2015-09-19 22 views
0

我有一個搜索功能,它匹配來自數據庫的關鍵字和回聲的一些HTML,但我錯過了如何啓用空搜索的處理。我可以使用else語句嗎?還是必須重新定義相同的參數並使用!isset,如果沒有設置?php else語句爲空搜索

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

回答

1

您可以使用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"; 
    } 
} 
+1

對這個問題的最佳答案。我會添加一條關於SQL注入的註釋。 – chris85

+0

thanks @ chris85我已經添加了'mysqli_real_escape_string'來防止SQL注入 – Saty

+0

是的!!!這解決了這個問題。非常感謝您的幫助 :) – Steven

1

您可以像這樣設置空搜索條件。

if (isset($_GET['search']) && trim($_GET['search']) !='') { ... } 
+0

@Steven你總是可以接受這個答覆的投票部分下點擊刻度標記! – user5173426

+0

爲什麼不使用'empty'?這是如何判斷是否有記錄? – chris85

+0

@ chris85如果有人提交了空格,那麼清空條件不起作用。所以我們必須修剪那個搜索變量,然後我們可以將它設置爲空狀態。 –

1

更改條件:

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

} 
0

修改,如果條件

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

} 
+0

這並不知道是否有記錄。應該在'search' GET上使用'!empty',目前允許它爲空。 – chris85

0

您可以通過使用empty功能做到這一點:

if (!empty($_GET['search'])) { 
    //your code 
} 
+0

爲什麼'isset'?這並不能說明是否有記錄。 – chris85