从Web表单搜索数据库表

时间:2011-12-23 18:16:32

标签: php mysql sql

我想使用下拉菜单在sql表中进行搜索。

例如,用户可以选择颜色,然后它将显示具有该颜色的所有项目。

这是我的代码 - 我尝试使用sql命令,颜色为红色(法语为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); 
    }

 ?>

4 个答案:

答案 0 :(得分:3)

我会将违规行改为:

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

请注意,LIKE是一种文字搜索...如果您只想提取结果与$couleur中的列完全匹配的结果,则应将LIKE替换为=并删除百分号(外卡匹配。)

另请注意,我将$couleur变量包装在mysql_real_escape_string()函数中以防止SQL注入。

答案 1 :(得分:1)

$couleur周围不需要额外的引号。

试试这个:

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

答案 2 :(得分:1)

我相信你需要改变这一行:

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

为:

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

答案 3 :(得分: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)."'";