2014-02-02 3 views
0

У меня есть этот код, который я схватил из StackOverflow, и я изменил сообщение формы формы формы, чтобы получить, и он не работает для меня. Когда я проверяю флажки, страница обновляется и вызывается запрос. Однако запрос не возвращает никаких строк, даже если у меня есть строки в таблице. Есть идеи?Флажок фильтра не работает

HTML-:

<script> 
$(function() { 
    $('.checkbox').on('change',function(){ 
     $('#form').submit(); 
    }); 
</script> 
<form id="form" method="GET" action=""> 
    <h4>Condition</h4> 
    <input type="checkbox" name="new" class="checkbox" <?=(isset($_GET['new'])?' checked':'')?>/> New<br/> 
    <input type="checkbox" name="used" class="checkbox" <?=(isset($_GET['used'])?' checked':'')?>/> Used<br/> 
</form> 

РНР:

if (isset($_GET["new"])) { 
    $arguments[] = "`condition` LIKE '%new%'"; 
} 
if (isset($_GET["used"])) { 
    $arguments[] = " condition LIKE '%use%' "; 
} 
if(! empty($arguments)) { 
    $str = implode(' or ',$arguments); 
    $fetch = $mydb->prepare("SELECT * FROM table where username = ? and ? ORDER BY id desc"); 
    echo $mydb->error; 
    $fetch->bind_param('ss', $username, $str); 
    $fetch->execute(); 
    $result = $fetch->get_result(); 
    //$result->num_rows gives me 0 in this case 
} else { 
    $fetch = $mydb->prepare("select * from table where username = ? order by id desc"); 
    $fetch->bind_param('s', $username); 
    $fetch->execute(); 
    $result = $fetch->get_result(); 
    //this one works 
} 
while ($row = $result->fetch_assoc()) { 
    //echo some rows. 
} 
+0

Было ли это работать, прежде чем вы изменили его с POST, чтобы получить? Вы уверены, что правильно открываете базу данных? Как выглядит запрос, когда вы вставляете все параметры, в частности, уверены ли вы, что кавычки находятся прямо вокруг 'или'? Это выглядит изворотливым. – Floris

+0

@Floris в первый раз, когда он работал, а затем я изменил его, чтобы получить, потому что мне не понравилось окно подтверждения каждый раз, когда я пытаюсь перезагрузить страницу. Я изменил его на пост, но это не сработало. Второй запрос работает правильно, поэтому база данных верна, и я уверен, что строки в таблице. – user3006683

+0

Почему вы все это делаете с помощью '$ arguments []' как массива? Что делать, если вы оставите новую/использованную вещь - она ​​работает? – Floris

ответ

0

Немного долго наматывается решение (не сказать вам, что это неправильно, но может работать):

if (isset($_GET["new"]) && !isset($_GET["used"])) { 
    $fetch = $mydb->prepare("SELECT * FROM table where username = ? and condition LIKE '%new%' ORDER BY id desc"); 
} 
if (!isset($_GET["new"]) && isset($_GET["used"])) { 
    $fetch = $mydb->prepare("SELECT * FROM table where username = ? and condition LIKE '%use%' ORDER BY id desc"); 
} 
if (isset($_GET["new"]) && isset($_GET["used"])) { 
    $fetch = $mydb->prepare("SELECT * FROM table where username = ? and condition LIKE '%use%' or condition LIKE '%new%' ORDER BY id desc"); 
} 
if (!isset($_GET["new"]) && !isset($_GET["used"])) { 
    $fetch = $mydb->prepare("SELECT * FROM table where username = ? ORDER BY id desc"); 
} 

echo $mydb->error; 

$fetch->bind_param('s', $username); 
$fetch->execute(); 
$result = $fetch->get_result(); 

обновление

Моя дочь говорит мне, что реальная проблема с подготовленным заявлением вашей попытки поставить имя столбца в запрос - вам нужно иметь condition LIKE в подготовленном заявлении, и только добавить значение '%new%' или '%use%', где знак вопроса ... Подготовленный оператор готовит столбцы для выбора. Таким образом, у вас должно быть как минимум три разных подготовленных заявления (нет, один, два условия) - вы могли бы генерировать их динамически или использовать выше, чтобы сделать вашу жизнь проще.

Смежные вопросы