php按多个类别逐个过滤

时间:2012-08-09 08:02:54

标签: php mysql

我正在尝试使用php中的搜索框我的html表单有三个选项,如下面

  1. 目的
  2. 类型
  3. 位置
  4. 我想如果用户按目的选择目的数据过滤器,如果类型然后按类型过滤,如果位置然后按位置过滤,如果他选择所有类别,那么它在位置类型中过滤目的如果不匹配显示(结果不是发现!)

    我使用了这些php查询但未能获得

    $res="SELECT * FROM test WHERE purpose like %$_Post['purpose']% AND type like %$_Post['type']% AND location like %$_Post['location']%";
    
    while ($row = mysql_fetch_array($res))
    {
    
        echo $row['purpose']."</br>";
    
        echo $row['type']."<br>";
    
        echo $row['location'];
        }
    

    但是这个查询没有逐个过滤,如果我使用OR而不是AND,则显示所有选中,然后混合找到结果,但我想在目的地中输入目的

    如果没有找到显示结果未找到

    请写完整查询

    感谢

2 个答案:

答案 0 :(得分:1)

  1. 您的参数未被转义,这非常危险
  2. $_POST而非$_Post,案件很重要。
  3. 您需要确保您的代码是安全的,不要在不转义的情况下使用值。

    $purpose  = mysqli_real_escape_string($dbc, $_POST['purpose' ]);
    $type     = mysqli_real_escape_string($dbc, $_POST['type'    ]);
    $location = mysqli_real_escape_string($dbc, $_POST['location']);
    

    编辑:删除了我的查询,因为@ Martin是正确的,这个不是。

答案 1 :(得分:0)

$dbc = mysqli_connect('host', 'user', 'password', 'database') or die('Error connecting to MySQL server');

if (isset($_POST['purpose'])) $where.= " AND purpose LIKE %". mysqli_real_escape_string($dbc, $_POST['purpose'])."%";
if (isset($_POST['type'])) $where.= " AND type LIKE %". mysqli_real_escape_string($dbc, $_POST['type'])."%";
if (isset($_POST['location'])) $where.= " AND location LIKE %". mysqli_real_escape_string($dbc, $_POST['location'])."%";

$res="SELECT * FROM test
      WHERE 1=1 
      ". ($where? $where: "");

while ($row = mysql_fetch_array($res)) {
    echo $row['purpose']."</br>";
    echo $row['type']."<br>";
    echo $row['location'];
}