Я осмотрелся вокруг и пока не нашел решения.
Предположительно из-за моих любительских способностей у меня возникают проблемы при создании результатов динамического поиска, которые имеют более 1 варианта поиска. Я хочу, чтобы результаты поиска заполнялись и обновлялись динамически при выборе каждой новой опции.
Я пытался заставить его работать только на 2 отдельных опциях, пока я не заработал. У меня есть выпадающее меню, которое передает переменную ‘q’ через ajax, и флажок (действующий как кнопка), который передает переменную ‘wblack’, оба из jQuery UI. Я могу заставить их работать отдельно, но они просто меняют результаты поиска на свой собственный SQL-запрос, не обновляя его, чтобы включить оба параметра (надеюсь, это имеет смысл!). Я хотел бы иметь возможность сложить эти параметры в рабочем запросе MySQL, чтобы при выборе обоих результатов поиска результаты отображались на основе обоих параметров.
Любой совет приветствуется, спасибо.
Мой PHP это:
require_once 'mysql_login.php';
$db_server = mysql_connect($db_hostname, $db_username, $db_password);
if (!$db_server) die("Unable to connect to MySQL: " . mysql_error());
mysql_select_db($db_database)
or die("Unable to select database: " . msql_error());
$sql="SELECT * FROM `TABLE 1` WHERE ";
if (isset($_GET['q'])) {
$q = $_GET['q'];
$sql .= "ProductDescription LIKE \"%".$q."%\" AND ";
}
if (isset($_GET['wblack'])) {
$wblack = $_GET['wblack'];
$sql .= "ProductDescription LIKE \"%".$wblack."%\" AND ";
}
if (substr($sql, strlen($sql) - strlen('WHERE ')) == 'WHERE ') {
$sql = substr($sql, 0, strlen($sql) - strlen('WHERE '));
}
if (substr($sql, strlen($sql) - strlen('AND ')) == 'AND ') {
$sql = substr($sql, 0, strlen($sql) - strlen('AND '));
}
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result))
{
echo "<div class='width'><div class='parent'><div class='searchimage'>";
echo "<img src='{$row['ImageURL']}' /></div></div>";
echo "<br><br>".$row['ProductName']."<br>";
echo "£".$row['ProductPrice'];
echo "</div>";
}
if (!$result) die ("Database access failed: " . mysql_error());
mysql_close($db_server);
JQuery это:
var q = $('#selectmenu').val();
$("#selectmenu" ).selectmenu ({
change:function( event,ui ) {
q = $(this).val();
$.ajax({
url: 'searchtestphp.php',
data: 'q='+q,
success: function (data) {
$('#searchresults').html(data);
}
}).error(function() {
alert ('An error occured');
});
}
});
});
$(function() {
$( "#checkblack" ).button();
$( "#checkblack" ).click(function(){
if($(this).is(':checked')) {
var wblack = $(this).val();
$.ajax({
url: 'searchtestphp.php',
data: 'wblack='+wblack,
success: function (data) {
$('#searchresults').html(data);
}
});
}
});
});
HTML:
<select id="selectmenu" name="selectmenu">
<option value="">--Select--</option>
<option value="dress">Dresses</option>
<option value="tshirt">T-Shirts</option>
<option value="skirt">Skirts</option>
<option value="shoes">Shoes</option>
<option value="top">Tops</option>
<option value="floral">Floral</option>
<option value="trousers">Trousers</option>
</select>
<input name="colour[]" type="checkbox" class="checksize" id="checkblack" value="black"/> <label for="checkblack">Black</label>
PHP:
Вот лучший способ построить ваш SQL-запрос с предложением ‘where’ или без него, в зависимости от $ _GET
$where = array ();
if (isset($_GET['q'])) {
$where[] = 'ProductDescription LIKE "%' . addslashes ($_GET['q']) . '%"';
}
if (isset($_GET['wblack'])) {
$where[] = 'ProductDescription LIKE "%' . addslashes ($_GET['wblack']) . '%"';
}
$sql = 'SELECT * FROM `TABLE 1` ' . (!empty ($where) ? 'WHERE (' . implode (') AND (', $where) . ')' : '');
addlashes немного повышает безопасность, но это все же не лучшее решение, но оно намного лучше, чем то, что есть в вашей версии (есть много тем о stackoverflow, когда вы можете прочитать больше об уязвимостях addlashes).
JS:
Предлагаемые изменения: один запрос ajax, оба параметра переданы, если значение! = False:
$(function() {
function search () {
var ajax_data = {};
var q = $("#selectmenu").val();
if (q) {
ajax_data.q = q;
}
var wblack = $("#checkblack").val();
if (wblack) {
ajax_data.wblack = wblack;
}
$.ajax({
url: 'searchtestphp.php',
data: ajax_data,
success: function (data) {
$('#searchresults').html(data);
}
}).error(function() {
alert ('An error occured');
});
}
$("#selectmenu").selectmenu ({
change:function( event, ui ) {
search ();
}
});
$("#checkblack").button();
$("#checkblack").on("click", function () {
search ();
});
});
Других решений пока нет …