Не удается отфильтровать пробелы, Query возвращает всех пользователей - PullRequest
2 голосов
/ 16 сентября 2011

У меня есть пользовательский интерфейс, в котором пользователи могут вводить имя и фамилию человека.Пока я ничего не введу в поля поиска, пользователи не будут найдены.Но как только я ввожу пробел, каждый пользователь в базе данных возвращается.Я обрезаю строки ввода и проверяю пробелы:

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'";
}

Обычный поиск возвращает ожидаемого пользователя с правильным именем и фамилиейимя, если я ничего не введу и начну поиск, результаты не возвращаются.Однако один пробел в окне поиска, и я получаю всех пользователей.Как я могу это исправить?

1 Ответ

0 голосов
/ 16 сентября 2011

Вы должны сначала решить, хотите ли вы искать:

$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'";
    }
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...