我想使用下拉菜单在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);
}
?>
答案 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)."'";