询问提前搜索?
我的表单有2个下拉菜单和1个提交按钮
________________ ________________
body : |______All_______| color : |______All_______|
|____Circle______| |_____White______|
|___Triangle_____| |_____Black______|
__________
|__Submit__|
这是我的数据库:绘图
_________________________________
|__id___|____Body____|___Corlor___|
|___1___|___Circle___|___White____|
|___2___|__Triangle__|___Black____|
|___3___|__Triangle__|___Black____|
|___4___|___Circle___|___White____|
|___5___|__Triangle__|___Black____|
|___6___|___Circle___|___White____|
|___7___|___Circle___|___White____|
|___8___|__Triangle__|___Black____|
这是我从Mysql选择数据的PHP代码
$sql = "SELECT * FROM Draw WHERE Body = '$_POST[body]' AND Color = '$_POST[color]' order by id asc";
好的,当我选择下拉体----->全部和下拉颜色------>全部
值$_POST[body]
="全部" $_POST[color]
="全部"
,我运行页面,它不会从我的SQL获取任何数据
如何从mysql表中选择数据:Draw,当我选择下拉列表中的All值?
感谢ans ^^
答案 0 :(得分:1)
在这种情况下,您的查询会将所有条目和颜色设置为“全部”的条目提取。 您没有数据,因为没有该值的条目。
这样的事情可以解决问题:
$query = "SELECT * FROM Draw";
$where = "";
if(isset($_POST["body"]) && $_POST["body"] != "") {
if($_POST["body"] != "All") {
$where .= "`Body`='" . $_POST["body"] . "'";
}
}
if(isset($_POST["color"]) && $_POST["color"] != "") {
if($_POST["body"] != "All") {
if ($where.length() > 0) {
$where .= " AND ";
}
$where .= "`Color`='" . $_POST["color"] . "'";
}
}
if ($where.length() > 0) {
$query .= " WHERE " . $where;
}
此外,您应该阅读SQL注入。
答案 1 :(得分:0)
您的代码非常危险,容易受到注射。
如果您使用的是mysql_query(),请转到mysqli
或PDO.
以下是包含您案例逻辑的代码段。
注意::我假设您正在使用mysqli_*
$con = // Your mysqli connection ;
$sql = "SELECT * FROM Draw WHERE 1=1 ";
$where = "";
if(isset($_POST["body"]) && $_POST["body"] != ''){
if(trim($_POST["body"]) != "All"){
$where .= " AND `Body` = '".mysqli_real_escape_string($con,$_POST["body"])."'" ;
}
}
if(isset($_POST["color"]) && $_POST["color"] !=''){
if(trim($_POST["color"]) != "All"){
$where .= " AND `Color` = '".mysqli_real_escape_string($con,$_POST["color"])."'" ;
}
}
$sql .= $where ;
execute $sql ;
答案 2 :(得分:0)
最简单的解决方案是进行部分查询。
$query="SELECT * FROM Draw ";
if($_POST['body']!='All'){$where[1]='Body = "'.$_POST['body'].'"';}
if($_POST['color']!='All'){$where[2]='Color = "'.$_POST['color'].'"';}
if(count($where>0)){
$where=' WHERE '.implode(' AND ',$where);
}
$query.=$where;