Не удалось получить результаты поиска для фильтрации

Я пытаюсь отфильтровать результаты поиска в своей базе данных MySQL, я хочу отфильтровать результаты, выбрав значения из двух раскрывающихся списков, первое поле — «Клуб», а второе — «Отдел», поэтому я могу фильтровать результаты по «Отделу» и «Клубу». .

Моя проблема в том, что когда я делаю выбор в поле клуба, ничего не происходит, я могу выбрать из поля «Дивизион», и результаты будут отображать выбранный дивизион, но ничего не происходит, когда я выбираю по клубу.

    <?php
include("config.php");
?>
<!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" />
<title>Club Search</title>
<style>
.style1 {
    text-align: center;
}
</style>
</head>
<body>
<fieldset style="width: 327px"><legend>Filter Results</legend>
<form id="filter" name="filter" method="post" action="search.php" style="width: 316px">
<label for="club">Club</label>
<select name="club">
<option value="">--</option>
<?php
    $sql = "SELECT * FROM ".$SETTINGS["data_table"]." GROUP BY club ORDER BY club";
    $sql_result = mysql_query ($sql, $connection ) or die ('request "Could not execute SQL query" '.$sql);
    while ($row = mysql_fetch_assoc($sql_result)) {
        echo "<option value='".$row["club"]."'".($row["club"]==$_REQUEST["club"] ? " selected" : "").">".$row["club"]."</option>";
    }
?>
</select>

    <label>Division</label>
<select name="division">
<option value="">--</option>
<?php
    $sql = "SELECT * FROM ".$SETTINGS["data_table"]." GROUP BY division ORDER BY division";
    $sql_result = mysql_query ($sql, $connection ) or die ('request "Could not execute SQL query" '.$sql);
    while ($row = mysql_fetch_assoc($sql_result)) {
    echo "<option value='".$row["division"]."'".($row["division"]==$_REQUEST["division"] ? " selected" : "").">".$row["division"]."</option>";
    }
?>
</select>
<input type="submit" name="button" id="button" value="Filter" />

  <a href="search.php"> 
  reset</a>
</form></fieldset>
<br /><br />
<fieldset style="width: 720px"><legend>Search Results</legend>
<br/>
<table width="700" border="1" cellspacing="0" cellpadding="0" align="center">
  <tr>
    <td bgcolor="#CCCCCC" class="style1"><strong>Division</strong></td>
    <td bgcolor="#CCCCCC" class="style1"><strong>Club</strong></td>
    <td bgcolor="#CCCCCC" class="style1"><strong>Last Name</strong></td>
    <td bgcolor="#CCCCCC" class="style1"><strong>First Name</strong></td>
    <td bgcolor="#CCCCCC" class="style1"><strong>ID</strong></td>
  </tr>
<?php
if ($_REQUEST["club"]='') {
    $search_string = " AND (club LIKE '%".mysql_real_escape_string($_REQUEST["club"])."%' OR (division LIKE '%".mysql_real_escape_string($_REQUEST["division"])."%')";  
}
if ($_REQUEST["division"]<>'') {
    $search_division = " AND division='".mysql_real_escape_string($_REQUEST["division"])."'";   
}

if ($_REQUEST["club"]='' and $_REQUEST["division"]='') {
    $sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE club = '".mysql_real_escape_string($_REQUEST["club"])."' AND division = '".mysql_real_escape_string($_REQUEST["division"])."'".$search_string.$search_division;
}  else {
    $sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE id>0".$search_string.$search_division;
}

$sql_result = mysql_query ($sql, $connection ) or die ('request "Could not execute SQL query" '.$sql);
if (mysql_num_rows($sql_result)>0) {
    while ($row = mysql_fetch_assoc($sql_result)) {
?>
  <tr>
    <td class="style1"><?php echo $row['division']?></td>
    <td class="style1"><?php echo $row['club']?></td>
    <td class="style1"><?php echo $row['last_name']?></td>
    <td class="style1"><?php echo $row['first_name']?></td>
    <td class="style1"><?php echo $row['id']?></td>
  </tr>
<?php
    }
} else {
?>
<tr><td colspan="5">No results found.</td></tr>
<?php   
}
?>
</table>
<br/>
</fieldset>
</body>
</html>

ОБНОВЛЕНИЕ: я изменил следующий код:

if ($_REQUEST["club"]='') {
$search_string = " AND (club LIKE '%".mysql_real_escape_string($_REQUEST["club"])."%' OR (division LIKE '%".mysql_real_escape_string($_REQUEST["division"])."%')";  

}

к этому:

if ($_REQUEST["club"]<>'') {
    $search_club = " AND (club LIKE '%".mysql_real_escape_string($_REQUEST["club"])."%' OR (club LIKE '%".mysql_real_escape_string($_REQUEST["club"])."%')";    
}

и теперь это позволит мне фильтровать по клубам и дивизионам, но я все еще не могу делать это только по клубам!


person user2587858    schedule 29.07.2013    source источник
comment
Я настоятельно рекомендую вам удалить весь код вашей базы данных и поместить его в функции, а затем зациклить данные из этих функций, а не напрямую зацикливать результат db.   -  person Zak    schedule 30.07.2013
comment
@ Зак, как это поможет?   -  person user2587858    schedule 30.07.2013
comment
во-первых, если вы когда-нибудь захотите снова получить те же данные, вам не придется переписывать код в другом месте... он будет удобно упакован в функцию. во-вторых, как только код находится в функции, вы можете написать небольшие тесты (даже использовать модульные тесты, если хотите), чтобы проверить правильность извлечения ваших данных, и в-третьих, одним словом, удобство сопровождения.   -  person Zak    schedule 01.08.2013


Ответы (2)


Измените это:

if ($_REQUEST["club"]='') {
$search_string = " AND (club LIKE '%".mysql_real_escape_string($_REQUEST["club"])."%' OR (division LIKE '%".mysql_real_escape_string($_REQUEST["division"])."%')";

и это:

$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE id>0".$search_string.$search_division;

К этому:

if ($_REQUEST["club"]<>'') {
    $search_club = " AND club='".mysql_real_escape_string($_REQUEST["club"])."'";   
}

И это:

$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE id>0".$search_club.$search_division;

И это сработает!

person Jason    schedule 30.07.2013
comment
Спасибо, дружище, это было! - person user2587858; 30.07.2013
comment
@ user2587858 не беспокойтесь! - person Jason; 30.07.2013

Вы используете оператор = в своих операторах if, вы хотите использовать оператор сравнения == следующим образом:

if ($_REQUEST["club"] == '') {
    $search_string = " AND (club LIKE '%".mysql_real_escape_string($_REQUEST["club"])."%' OR (division LIKE '%".mysql_real_escape_string($_REQUEST["division"])."%')";  
}
if ($_REQUEST["division"] <> '') {
    $search_division = " AND division='".mysql_real_escape_string($_REQUEST["division"])."'";   
}

if ($_REQUEST["club"] == '' and $_REQUEST["division"] == '') {
    $sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE club = '".mysql_real_escape_string($_REQUEST["club"])."' AND division = '".mysql_real_escape_string($_REQUEST["division"])."'".$search_string.$search_division;
}  else {
    $sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE id>0".$search_string.$search_division;
}
person vee    schedule 30.07.2013
comment
это все еще не работает, при выборе из раскрывающегося списка клуба отображаются все данные в базе данных, а не только название выбранного клуба, и теперь я даже не могу фильтровать по дивизиону. - person user2587858; 30.07.2013