2011-09-16 53 views
2

我有一個用戶界面,用戶可以在其中鍵入一個人的名字和姓氏。 只要我沒有在搜索框中輸入任何內容,就不會找到用戶。但只要我進入一個空白區域,數據庫中的每個用戶都會返回。我修剪輸入字符串和檢查空格:無法過濾空白,查詢返回所有用戶

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

一個正常的搜索返回用正確的名字和姓氏預期的用戶,如果我不輸入任何內容並開始搜索,不會返回任何結果。然而,搜索框中只有一個空格,我得到所有用戶。我該如何解決這個問題?

+0

我認爲正確的做法是不編寫SQL字符串形式,因爲你是開放的注入攻擊。用參數重做它,也許你不會再有問題了。 –

回答

0

您需要首先決定你是否要搜索:

$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'"; 
    } 
    ... 
} 
+0

thx,它工作完美 – Stefan

+0

不客氣。 – hakre

+0

應該已經完成 – Stefan