Оператор php else для пустого поиска

У меня есть функция поиска, которая сопоставляет ключевые слова из базы данных и выводит какой-то html, но я не знаю, как включить обработку пустых поисков. Могу ли я использовать оператор else или мне нужно переопределить те же параметры и использовать !isset, если они не установлены?

<?php
$con = mysqli_connect("localhost", "database", "password", "table");
if (isset($_GET['search'])) {
    $search_query = $_GET['search_query'];

    global $con;
    $get_item = "select * from database where keywords like '%$search_query%'";
    $run_item = mysqli_query($con, $get_item);
    while ($row_item = mysqli_fetch_array($run_item)) {

        $item_keywords = $row_item['item_keywords'];

        echo "Search found for $search_query";
    } // working fine up to here
} else {
    echo "Search not found for $search_query";
}
?>

person Community    schedule 19.09.2015    source источник


Ответы (5)


Вы можете использовать isset() и mysqli_num_rows() для проверки пустого результата. И используйте mysqli_real_escape_string для запуска вашего запроса

 if (isset($_GET['search'])) {
    if (isset($_GET['search_query']) && $_GET['search_query'] != "") {/// check variable is set or not
        $search_query = $_GET['search_query'];
        $$search_query = mysqli_real_escape_string($con, $search_query);//
        $get_item = "select * from `database` where `keywords` like '%$search_query%'";
        $run_item = mysqli_query($con, $get_item);
        $row_cnt = mysqli_num_rows($run_item); // count number of rows
        if ($row_cnt > 0) {
            while ($row_item = mysqli_fetch_array($run_item)) {
                $item_keywords = $row_item['item_keywords'];
                echo "Search found for $item_keywords";
            }
        } else {
            echo "Search not found for $item_keywords";
        }
    } else {
        echo "Search not found for $item_keywords";
    }
}
person Saty    schedule 19.09.2015
comment
Лучший ответ на этот вопрос. Я бы добавил примечание о SQL-инъекциях. - person chris85; 19.09.2015
comment
спасибо @chris85, я добавил mysqli_real_escape_string для предотвращения SQL-инъекций - person Saty; 19.09.2015

Измените свое условие на:

if (isset($_GET['search']) && trim($_GET['search_query']) != '') { 

}
person Al Amin Chayan    schedule 19.09.2015

Вы можете установить условие для пустого поиска следующим образом.

if (isset($_GET['search']) && trim($_GET['search']) !='') { ... }
person Dharmesh Goswami    schedule 19.09.2015
comment
@ Стивен, вы всегда можете принять этот ответ, нажав на галочку под частью голосования! - person DirtyBit; 19.09.2015
comment
Почему бы просто не использовать empty? Как это говорит, есть записи или нет? - person chris85; 19.09.2015
comment
@ chris85 Если кто-то отправит пробел, то пустое условие не работает. Итак, нам нужно обрезать эту переменную поиска, а затем мы можем установить для нее пустое состояние. - person Dharmesh Goswami; 21.09.2015

Измените условие if

if (isset($_GET['search']) && !empty($_GET['search_query'])) { 

}
person Happy Coding    schedule 19.09.2015
comment
Это не говорит, есть ли записи. Следует также использовать !empty в search GET, в настоящее время позволяя ему быть пустым. - person chris85; 19.09.2015

Вы можете сделать это с помощью функции empty:

if (!empty($_GET['search'])) {
    //your code
}
person NITIN PATEL    schedule 19.09.2015
comment
Почему isset? Это не говорит, есть записи или нет. - person chris85; 19.09.2015