0

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

  1. 目的
  2. 类型
  3. 地点

我想如果用户选择目的数据按目的过滤,如果类型然后按类型过滤,如果位置然后按位置过滤,如果他选择所有类别,那么它会像位置类型中的目的一样过滤,如果不匹配显示(找不到结果!)

我使用了这些 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 然后混合结果是否全部选中但我希望在位置类型中输入目的

如果未找到,则显示未找到结果

请写完整的查询

谢谢

4

2 回答 2

1
  1. 你的参数没有转义,这很危险
  2. 不是,情况很重要$_POST$_Post

你需要确保你的代码是安全的,千万不要在没有转义的情况下使用值。

$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's 是正确的,这个不是。

于 2012-08-09T08:15:40.933 回答
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'];
}
于 2012-08-09T08:15:43.137 回答