Не могат да се получат резултати от търсенето за филтриране

Опитвам се да филтрирам резултатите от търсенето на моята 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="/bgsearch.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
@Zak как ще помогне това?   -  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