【问题标题】:Advanced Search PHP高级搜索 PHP
【发布时间】:2016-01-25 21:12:19
【问题描述】:

我有一个包含 4 个字段的高级搜索,只有一个 name_first 是必填项

搜索有很多变体,因为其他字段不是强制性的,所以我需要一个 select 语句,只选择已填充的字段,但变体太多

我尝试了下面的脚本,但它没有显示正确的信息(我认为它完全错误?!)

$name_first=$_GET["name_first"];
$status=$_GET["status"];
$type=$_GET["type"];
$manstaff=$_GET["manstaff"];

$result401=mysql_query("SELECT * FROM `hr_employees` WHERE 
    (name_first LIKE '$name_first%') 
            AND 
    (status LIKE '$status%') 
            AND 
    (manages_staff LIKE '$manstaff%');")or die('Error' . mysql_error());

任何想法上面的脚本应该是什么?基本上如果字段没有填写就不需要搜索了?

【问题讨论】:

  • 把这个$name_first%改成这个%$name_first%
  • 谢谢,但是它仍然没有涵盖搜索的所有变体?如果我将字段 EG 状态填写到与 name_first 不匹配的内容,它仍然会根据 name_first 显示一个结果,如果这有意义吗?
  • 为什么使用 AND 而不是 OR ??任何原因 ??为什么name_first IS NULL ??
  • 好像所有的字段都完成了就需要AND?
  • 那么在最坏的情况下,如果只设置了第一个变量??

标签: php mysql


【解决方案1】:

首先使用所需的条件定义您的 SQL

$sql = "SELECT * FROM `hr_employees` WHERE (name_first LIKE '$name_first%')";

然后添加可选条件...可选

if ($status) {
    $sql .= " AND (status LIKE '$status%') ";
}

if ($manstaff) {
    $sql .= " AND (manages_staff LIKE '$manstaff%')";
}
$result401=mysql_query($sql) or die ('Error' . mysql_error());

顺便说一句,请考虑更新您的代码以避免使用已弃用的mysql 函数,并记住,像这样将变量连接到您的 SQL 中会使您的代码容易受到 SQL 注入的攻击。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 2018-07-13
    相关资源
    最近更新 更多