Я создаю массив из флажков, которые «проверяются» через JS.PHP, передающий массив в SQL-запрос
Простые Флажки:
<div class="checkbox">
<label>
<input type="checkbox" name="checkSearch[]" value="One" checked /> One
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" name="checkSearch[]" value="Two" checked /> Two
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" name="checkSearch[]" value="Three" checked /> Three
</label>
</div>
JS:
var selectedItems = [];
$('input[type="checkbox"]:checked').each(function() {
selectedItems .push($(this).val());
});
//passing array in a function
searchLocations(pass1, pass2, selectedItems);
На данный момент, что выводимый (предполагается, что все три Флажки "проверено"):
["Один", "Tw o "," Three "];
Вот где я не совсем уверен, что должно произойти дальше?
Могу ли я включить массив в виде строки URL и использовать функцию PHP .implode позже в моей инструкции SQL?
Вот что я пробовал:
function searchLocations(pass1, pass2, selectedItems) {
var searchUrl = 'searchLocations.php?pass1=' + pass1 + '&pass2=' + pass2 + '&selectedItems=' + selectedItems;
...
}
searchLocations.php
$pass1 = $_GET['pass1'];
$pass2 = $_GET['pass2'];
$selectedItems = $_GET['selectedItems'];
$selectedItems = " '".implode("', '", $selectedItems)."' ";
$query = sprintf("SELECT * FROM dbtable WHERE pass1 = $pass1 AND pass2 = $pass2 AND selectedItems IN ($selectedItems)");
$ SelectedItems нужно читать, как это в запросе SQL: IN ('One', «Два ',' Three ').
Я уверен, что 'sprintf()' дезактивирует параметры '$ _GET' –
Ваш' $ _GET ['selectedItems'] 'is * not * массив. Это строка. Посмотрите на 'var_dump ($ _ GET ['selectedItems']);'. Возможно, вам сначала понадобится 'explode()' it. Вы также можете использовать jQuery для создания строки запроса для вас: 'var searchUrl = 'searchLocations.php?' + $ Param ({pass1: pass1, pass2: pass2, selectedItems: selectedItems});' Если вы сделаете это, тогда $ _GET ['selectedItems'] 'будет массивом, и ваш код должен работать. –
Почему вы используете 'sprintf', без каких-либо'% s'? Это очень опасный *** код. Вы должны использовать подготовленные заявления или, по крайней мере, на самом деле * экранирование * входов. –