2015-02-22 3 views
-1

Я работаю над этим скриптом, который будет фильтровать результаты sql, на основе которых отмечены флажки. Мой стол настроен так ...Фильтрация PHP с помощью флажков

id venue imageurl showingads 2kandunder 2kto4k 4kandup 
1 venue1 myurl.com yes   yes 
2 venue2 myurl.com yes      yes 
3 venue3 myurl.com no         yes 
4 venue4 myurl.com yes   yes 

Весь код указан на этой странице. Вот HTML ..

<form id="form" method="post" action=""> 
<input type="checkbox" name="2kandunder" class="checkbox" <?=(isset($_POST['2kandunder'])?' checked':'')?>/> 2kandunder<br> 
<input type="checkbox" name="2kto4k" class="checkbox" <?=(isset($_POST['2kto4k'])?' checked':'')?>/> 2k to 4k<br> 
<input type="checkbox" name="4kandup" class="checkbox" <?=(isset($_POST['4kandup'])?' checked':'')?>/> 4k and up<br> 
</form> 

Javascript код ...

<script type="text/javascript"> 
$(function(){ 
$('.checkbox').on('change',function(){ 
    $('#form').submit(); 
    }); 
}); 
</script> 

и PHP ...

<?php 
$servername = "localhost"; 
$username = "myusername"; 
$password = "mypassword"; 
$dbname = "mydb"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
die("Connection failed: " . $conn->connect_error); 
} 

if (isset($_POST["2kandunder"])) { 
$arguments[] = "`2kandunder` = 'yes'"; 
} 
if (isset($_POST["2kto4k"])) { 
$arguments[] = "`2kto4k` LIKE 'yes'"; 
} 
if (isset($_POST["4kandup"])) { 
$arguments[] = "4kandup LIKE '%yes%'"; 
} 
if(!empty($arguments)) { 
$str = implode(' or ',$arguments); 

$qry = "SELECT id, venue, imageurl FROM ads where " . $str . ""; 

$paginate = new pagination($page, $qry, $options); 
} else { 
//Whatever happens when there's none checked. 
$sql = "SELECT id, venue, imageurl FROM ads WHERE `showingads` = 'yes'"; 
} 

$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
// output data of each row 
while($row = $result->fetch_assoc()) { 
    echo "<table class='tablebox' width='940' border='1' cellspacing='5'> 
    <tr><td width='75'>".$row["venue"]."</td></tr> 
    <tr> 
    <td width='10'><a href='post_click.php?id=".$row["id"]."'> <img src='".$row["imageurl"]."'></a></td> 
    </tr>"; 


    } 
echo "</table>"; 
} else { 
echo "0 results"; 
} 
$conn->close(); 

?> 

Когда я запускаю эту страницу либо еще отображает запрос, который является то, что я хочу когда первая страница загружается. Но когда я проверяю любой из флажков, ничего не происходит. Здесь весь код, как на странице.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<script language="JavaScript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script> 

</head> 
<html> 
<body> 
<form id="form" method="post" action=""> 
<input type="checkbox" name="2kandunder" class="checkbox" <?=(isset($_POST['2kandunder'])?' checked':'')?>/> 2k and under<br> 
<input type="checkbox" name="2kto4k" class="checkbox" <?=(isset($_POST['2kto4k'])?' checked':'')?>/> 2k to 4k<br> 
<input type="checkbox" name="4kandup" class="checkbox" <?=(isset($_POST['4kandup'])?' checked':'')?>/> 4k and up<br> 
</form> 
<script type="text/javascript"> 
$(function(){ 
$('.checkbox').on('change',function(){ 
    $('#form').submit(); 
    }); 
}); 
</script> 

<?php 
$servername = "localhost"; 
$username = "myusername"; 
$password = "mypassword"; 
$dbname = "mydb"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
die("Connection failed: " . $conn->connect_error); 
} 

if (isset($_POST["2kandunder"])) { 
$arguments[] = "`2kandunder` = 'yes'"; 
} 
if (isset($_POST["2kto4k"])) { 
$arguments[] = "`2kto4k` LIKE 'yes'"; 
} 
if (isset($_POST["4kandup"])) { 
$arguments[] = "4kandup LIKE '%yes%'"; 
} 
if(!empty($arguments)) { 
$str = implode(' or ',$arguments); 

$qry = "SELECT id, venue, imageurl FROM ads where " . $str . ""; 

$paginate = new pagination($page, $qry, $options); 
} else { 
//Whatever happens when there's none checked. 
$sql = "SELECT id, venue, imageurl FROM ads WHERE `showingads` = 'yes'"; 
} 

$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
// output data of each row 
while($row = $result->fetch_assoc()) { 
    echo "<table class='tablebox' width='940' border='1' cellspacing='5'> 
    <tr><td width='75'>".$row["venue"]."</td></tr> 
    <tr> 
    <td width='10'><a href='post_click.php?id=".$row["id"]."'> <img src='".$row["imageurl"]."'></a></td> 
    </tr>"; 


} 
echo "</table>"; 
} else { 
echo "0 results"; 
} 
$conn->close(); 

?> 
</body> 
</html> 

Мои первые мысли: 1. javascript не выполняется вообще? 2. Мои аргументы $ отформатированы неправильно для того, как я настроил базу данных? (У меня есть 3 разных варианта аргументов, чтобы попробовать и проверить различные форматы, чтобы увидеть, могу ли я заставить их работать)

Примечание: Часть php из учебника, из которого я узнал, имела аргумент, как if (isset ($ _ POST ["2kandunder"]). У меня это выглядит так: if (isset ($ _ POST ["2kandunder"])) с дополнительной скобкой в ​​конце, потому что я получал синтаксическую ошибку для каждого оператора if. Если это может быть проблема почему я получаю ошибки синтаксиса для каждой, если заявление линии?

Всего этого кода и разглагольствуя, но я чувствую, что я близко. Может кто-то пожалуйста, помогите мне понять, в чем проблема?

EDIT колонн устанавливаются так ..

Field Type   Null Key Default  Extra 

id  int(5)   NO  PRI  NULL  auto_increment 

venue varchar(100) NO    NULL 

imageurl varchar(150) NO    NULL 

showingads varchar(5) NO    NULL 

2kandunder varchar(5) NO    NULL 

2kto4k varchar(5)  NO    NULL 

4kandup varchar(5)  NO    NULL 

UPDATE Так что я флажки работают сейчас, но теперь, когда я загрузить страницу и нажмите на верхний флажок (2kandunder) возвращает 0 результатов. Остальное sql все еще работает, когда флажки не отмечены. Я изменил первый, если заявление

if (isset($_POST["2kandunder"])) { 
$arguments[] = "`showingads` = 'yes'"; 

который должен сделать это тот же запрос, как SQL-запрос еще при первом (2kandunder) флажок. Еще 0 результатов. Таким образом, я повторил $ ​​qry, чтобы отобразить, какой запрос запускался, когда первый флажок установлен, и он точно такой же, как и запрос $ sql else, но все же возвращает 0 результатов? Как это возможно, если этот точный запрос работает для запроса else?

Последнее обновление Проблема была в том, что если результаты были получены только для результатов sql-запроса, спасибо всем, кто помог!

+0

Вы получаете какие-либо ошибки в консоли? –

+0

@SulthanAllaudeen Нет ошибок. Просто отображает 3 флажка вверху страницы и затем отображает дату из SQL-запроса else ниже. – bg2982

+0

Можете ли вы показать мне «объявления» и «показы» в sqlfiddle? –

ответ

0

http://api.jquery.com/on/

Вы правы. javascript вообще не выполняется. Вы используете jquery 1.4.1. Но «on» доступен с 1.7 Надеюсь, это вам поможет.

+0

Спасибо за ответ! Это определенно помогло и, по крайней мере, что-то происходит сейчас, когда я нажимаю флажок! Последняя проблема заключается в том, что она возвращает 0 результатов. Любые советы о том, как правильно писать аргументы, если утверждения? – bg2982

+0

Спасибо за помощь! – bg2982

+0

if (! Empty ($ arguments)) { $ str = implode ('или', $ arguments); // ЗДЕСЬ --- --- $ qry $ qry = "SELECT id, место проведения, imageurl FROM ads where". $ str. ""; $ paginate = новая разбивка на страницы ($ page, $ qry, $ options); } else { // Что бы ни происходило, когда никто не проверял. // ЗДЕСЬ --- --- $ sql $ sql = "SELECT id, место проведения, imageurl FROM ads WHERE' showads' = 'yes' "; } // ВЫ ИСПОЛЬЗУЕТЕ $ sql $ result = $ conn-> query ($ sql); Извините за CAPS –

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