2013-12-08 145 views
0

我試圖建立一個PHP的MySQL搜索腳本,這將讓我打印我的會員MySQL數據庫表的內容,然後使用不同的標準來篩選結果。過濾MySQL表搜索

以下字段在我的MySQL表中使用:

committee_id 排名 姓氏 FIRST_NAME 性 地址 電子郵件 PHONE_NUMBER active_status

我想2種方式來過濾數據: 1 )使用與所有可用的排名下拉,我可以按成員的排名過濾結果。 2)在所有可用的active_status中使用下拉菜單,只能按活動狀態過濾結果。

我已經建立了我的搜索表單成功,並打印所有MySQL表的內容,只有部分位置的搜索過濾我的結果,但不是active_status,過濾器部分是一個挑戰。這裏是我的HTML表格和搜索腳本:

<?php include("./includes/connnect.php");?> 
    <!DOCTYPE HTML> 
    <html> 
    <body> 
    <table> 
     <thead> 
      <tr> 
      <td>ID</td> 
      <td>position</td> 
      <td>Last Name</td> 
      <td>First Name</td> 
      <td>Sex</td> 
      <td>Address</td> 
      <td><strong>Email</td> 
      <td><strong>Phone Number</td> 
      <td>Status</td> 
      </tr> 
     </thead> 
     <tbody> 
      <?php    
      if ($_REQUEST["position"]<>'') { 
       $search_position = " AND position='".mysql_real_escape_string($_REQUEST["position"])."'"; 
      } 
      if ($_REQUEST["status"]<>'') { 
       $search_status = " AND status='".mysql_real_escape_string($_REQUEST["status"])."'"; 
      } 
      else { 
       $sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE committee_id>0".$search_position.$search_status; 
      } 

      $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><?php echo $row["committee_id"]; ?></td> 
       <td><?php echo $row["rank"]; ?></td> 
       <td><?php echo $row["last_name"]; ?></td> 
       <td><?php echo $row["first_name"]; ?></td> 
       <td><?php echo $row["sex"]; ?></td> 
       <td><?php echo $row["address"]; ?></td> 
       <td><?php echo $row["email"]; ?></td> 
       <td><?php echo $row["phone_number"]; ?></td> 
       <td><?php echo $row["active_status"]; ?></td> 
       </tr> 
      <?php 
       } 
      } else { 
      ?> 
      <tr><td colspan="5">No results found.</td> 
      <?php 
      } 
      ?> 
     </tbody> 
    </table> 
</body> 
</html> 

我希望得到這個去任何建議。

謝謝。

+0

'active_status'或'status'?!和什麼是數據類型? – mehdi

回答

1

這是因爲當有$_REQUEST["status"]變量SQL沒有設置好的,你把它放在else語句

if ($_REQUEST["status"]<>'') { 
      $search_status = " AND status='" . 
          mysql_real_escape_string($_REQUEST["status"])."'"; 
     } 
     else { /// this is your problem 

      $sql = "SELECT * FROM ".$SETTINGS["data_table"]." 
        WHERE committee_id>0".$search_position . $search_status; 
     } 

把$ sql中出其他的,並採取了別的出路。

+1

除了Jorge的解決方案之外,您還應該知道'mysql_'現在已被棄用。你應該瞭解的mysqli和PDO如果你是剛剛開始 - 它也將使你的代碼更容易閱讀和調試的情況下這樣的[http://php.net/manual/en/mysqli.quickstart。 prepared-statements.php],PDO:http://www.php.net/manual/en/pdo.prepared-statements.php。 PDO的優勢在於它可以跨SQL引擎移植。使用這兩者,您不必擔心SQL注入或必須轉義每個變種。 – cerd

+0

我同意你的看法,我必須注意到這一點! – Terungwa

0

謝謝豪爾赫您的解決方案工作。但我得到了與這些elseif語句相同的結果:

if ($_REQUEST["position"]<>'') { 
       $search_position = " AND position='".mysql_real_escape_string($_REQUEST["position"])."'"; 
      } 
      if ($_REQUEST["status"]<>'') { 
       $search_status = " AND status='".mysql_real_escape_string($_REQUEST["status"])."'"; 
      } 
      if ($_REQUEST["position"]<>'' and $_REQUEST["status"]<>'') { 
       $sql = "SELECT * FROM ".$SETTINGS["data_table"]." 
        WHERE position = '".mysql_real_escape_string($_REQUEST["position"])."' 
        AND status = '".mysql_real_escape_string($_REQUEST["status"])."'"; 
      }else if ($_REQUEST["position"]<>'') { 
       $sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE position = '".mysql_real_escape_string($_REQUEST["position"])."'".$search_city; 
      }else if ($_REQUEST["status"]<>'') { 
       $sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE status = '".mysql_real_escape_string($_REQUEST["status"])."'".$search_position; 
      }else { 
       $sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE committee_id>0".$search_position.$search_status; 
      } 

我將不得不按照建議將這些轉換爲mysqli或pdo。