2011-12-23 135 views
0

我想用下拉菜單在SQL表中進行搜索。從Web表單搜索數據庫表

例如,用戶可以選擇顏色,然後它會顯示所有顏色的項目。

這是我的代碼 - 我嘗試使用帶紅色的紅色命令(法語中的rouge)它的工作原理;那麼我試圖使用$couleur,它不起作用。有人可以檢查我的SQL命令。非常感謝。

<!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>Untitled Document</title> 
</head> 

<body> 
<form name="" method="post" action="enquete.php"> 
<select name="couleur"> 
    <option ></option> 
    <option value="rouge">rouge</option> 
    <option value="pink">pink</option> 



</select> 




</select> 
<input type="submit" value="submit" name="submit2" /> <br/> 
</form> 


</body> 
</html> 

<?php 

    //traitement pour decoulant couleur 
    if (isset($_POST["couleur"]) && $_POST["couleur"]!="0"&& isset($_POST["submit"])){ 
     //connexion avec le serveur 
     include_once("mesparametres.inc.php"); 
     //récupération données formulaire 
     $couleur = $_POST["couleur"]; 
     $query = "SELECT * FROM `poisson` WHERE `couleur` LIKE 'rouge'"; 
     $query = "SELECT * FROM `poisson` WHERE `couleur` LIKE '\"$couleur\"'"; 
     $result = mysql_query($query) or die('Query failed: ' . mysql_error()); 


     // Printing results in HTML 

     echo "<table border='1' width='300'>\n"; 

     $count = 0; 
      while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { 
       echo "\t<tr>\n"; 
       foreach ($line as $col_value) { 
        echo "\t\t<td>$col_value</td>\n"; 
       } 
       $count++; 
       echo "\t</tr>\n"; 
      } 

      echo "</table>\n"; 


     //fermeture connexion avec la BD 
     mysql_close($idConnectDB); 
    } 

?> 
+0

這是一個錯字? 'isset($ _ POST [「submit」])'?當你使用'name =「submit2」'? – 2011-12-23 18:19:59

+1

歡迎來到Stack Overflow!你顯示的代碼容易受到[SQL注入](http://php.net/manual/en/security.database.sql-injection.php)的影響。使用適當的衛生方法(例如'mysql_real_escape_string()'用於傳統的mysql庫),或切換到PDO並準備好語句。 – 2011-12-23 18:20:16

+0

是的,這是一個錯字,感謝 – 2011-12-23 19:02:28

回答

1

您不需要在$couleur附近引用額外的引號。

試試這個:

$query = "SELECT * FROM `poisson` WHERE `couleur` LIKE '$couleur'"; 
+1

*咳嗽SQL注射咳嗽* – 2011-12-23 18:20:36

+2

對不起,我不是一個PHP的傢伙,不知道它是如何做到的。剛剛發現明顯的錯誤:-) – 2011-12-23 18:22:04

1

我相信你需要改變這一行:

$query = "SELECT * FROM `poisson` WHERE `couleur` LIKE '\"$couleur\"'"; 

到:

$query = "SELECT * FROM `poisson` WHERE `couleur` LIKE '".$couleur."'"; 
+0

*咳嗽 - SQL注射 - 咳嗽* – 2011-12-23 18:20:59

+2

@Pekka我會說你對這個問題本身的評論就夠了。 SQL注入只是發佈的腳本中的許多其他基本設計缺陷之一。最好爲你的咳嗽做點什麼! :) – Yuck 2011-12-23 18:21:54

3

我會出錯的行更改爲:

$query = "SELECT * FROM poisson WHERE couleur LIKE '%" . mysql_real_escape_string($couleur) . "%'"; 

注意LIKE是文本搜索...如果你只想拉動的結果,其中列是你應該=取代正是在$couleur LIKE和刪除百分號(通配符匹配。)

另請注意,我在mysql_real_escape_string()函數內封裝了$couleur變量以防止SQL注入。

+0

非常感謝你,它現在的作品:) – 2011-12-23 19:01:42

1

此行

$query = "SELECT * FROM `poisson` WHERE `couleur` LIKE '\"$couleur\"'"; 

居然會搜索的值"rouge",而不是正確的價值rouge

將其更改爲

$query = "SELECT * FROM `poisson` WHERE `couleur` LIKE '".$couleur."'"; 

然而,這很容易受到SQL注入攻擊。您應該切換到使用預處理語句(見PHPs PDO例如),或至少使用mysql_real_escape_string

$query = "SELECT * FROM `poisson` ". 
     "WHERE `couleur` LIKE '" . mysql_real_escape_string($couleur)."'";