当用户选择所有内容时询问提前搜索?

时间:2014-04-02 14:51:00

标签: php html mysql

当用户选择所有内容时,

询问提前搜索?

我的表单有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 ^^

3 个答案:

答案 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(),请转到mysqliPDO.

以下是包含您案例逻辑的代码段。

注意::我假设您正在使用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;