【问题标题】:Can't filter whitespace, Query returns all users无法过滤空格,查询返回所有用户
【发布时间】:2011-11-18 11:05:39
【问题描述】:

我有一个用户界面,用户可以在其中输入一个人的名字和姓氏。 只要我在搜索框中不输入任何内容,就不会找到任何用户。但是,只要我输入一个空格,就会返回数据库中的每个用户。我修剪输入字符串并检查空格:

if (isset($_GET['lastname'])) {
    $lastname_value = trim($_GET['lastname']);
    //This Line is only used for setting the Text again in the Search Box       
    $tpl->setVariable('ss-search-lastname-value', $lastname_value);
}
if(isset($_GET['firstname'])) {
    $firstname_value = trim($_GET['firstname']);
    $tpl->setVariable('ss-search-firstname-value',$firstname_value);
}

之后我编写了搜索查询:

$sql = "SELECT e.`user_id`, e.`firstname`, e.`lastname`, e.`email`
            FROM `employees` as e
            WHERE 1";
if($lastname_value!="") {
    $sql .=" AND e.`lastname` ='$lastname_value'";
}
if($firstname_value!="") {
    $sql .=" AND e.`firstname` ='$firstname_value'";
}

正常搜索会返回具有正确名字和姓氏的预期用户,如果我不输入任何内容并开始搜索,则不会返回任何结果。然而,搜索框中的一个空格,我得到了所有用户。我该如何解决?

【问题讨论】:

  • 我认为正确的方法是不要将 SQL 组合为字符串,因为您容易受到注入攻击。用参数重做,也许你就不会再有问题了。

标签: php html sql filter


【解决方案1】:

您需要先决定是否要搜索:

$doSearch = false;
$hasLastname = $lastname_value != "";
$hasFirstname = $firstname_value != "";
$doSearch = $hasLastname || $hasFirstname;

if ($doSearch)
{
    $sql = "SELECT e.`user_id`, e.`firstname`, e.`lastname`, e.`email`
            FROM `employees` as e
            WHERE 1";
    if($lastname_value!="") {
        $sql .=" AND e.`lastname` ='$lastname_value'";
    }
    if($firstname_value!="") {
        $sql .=" AND e.`lastname` ='$firstname_value'";
    }
    ...
}

【讨论】:

    猜你喜欢
    • 2018-12-01
    • 1970-01-01
    • 2017-12-05
    • 2020-08-03
    • 1970-01-01
    • 2015-07-08
    • 2018-01-13
    • 2021-10-21
    • 1970-01-01
    相关资源
    最近更新 更多