2015-04-15 123 views
1

我有一個搜索表單有2個選擇字段和一個輸入,總共有3個選項,所以我創建了一些if語句,具體取決於每個字段的設置,它有自己的查詢,但它運行不好,是所有的錯誤,結果不正確,它與語句查詢混淆,它不是正確的。搜索表單多輸入

這裏是我的搜索表單結果代碼:)

$keywords = $_GET["Keywords"]; 
      $location = $_GET['Location']; 
      $jobtype = $_GET["Category"]; 


       if (isset($location) && empty($jobtype) && empty($keywords)){ 

       $sql_jobs = "SELECT * FROM jobs 
          WHERE 
          active = '1' AND 
          country = '$location' 
          ORDER BY id_job DESC"; 

       }elseif(isset($location) && isset($jobtype) && empty($keywords)){ 
        $sql_jobs = "SELECT * FROM jobs 
          WHERE 
          active = '1' AND 
          country = '$location' AND 
          jobType_en = '$jobtype' 
          ORDER BY id_job DESC"; 

       }elseif(isset($location) && isset($jobtype) && isset($keywords)){ 
        $sql_jobs = "SELECT * FROM jobs 
          WHERE 
          active = '1' AND 
          country = '$location' AND 
          jobType_en = '$jobtype' AND 
          title_en LIKE '%$keywords%' 
          ORDER BY id_job DESC"; 

       }elseif(empty($location) && isset($jobtype) && empty($keywords)){ 
        $sql_jobs = "SELECT * FROM jobs 
          WHERE 
          active = '1' AND 
          jobType_en = '$jobtype' 
          ORDER BY id_job DESC"; 

       }elseif(empty($location) && isset($jobtype) && isset($keywords)){ 
        $sql_jobs = "SELECT * FROM jobs 
          WHERE 
          active = '1' AND 
          jobType_en = '$jobtype' AND 
          title_en LIKE '%$keywords%' 
          ORDER BY id_job DESC"; 
       }elseif(empty($location) && isset($jobtype) && isset($keywords)){ 
        $sql_jobs = "SELECT * FROM jobs 
          WHERE 
          active = '1' AND 
          jobType_en = '$jobtype' AND 
          title_en LIKE '%$keywords%' 
          ORDER BY id_job DESC"; 
       } 
       else{ 
        $sql_jobs = "SELECT * FROM jobs 
          WHERE 
          active = '1' 
          ORDER BY id_job DESC"; 
       } 

       $consultaJob = mysql_query($sql_jobs); 

回答

0

你可能想嘗試的strlen(而不是isset或空

否則你必須同時使用isset()empty()

empty()如果該變量不存在,則不會生成警告。

strlen()將在NULL和''上返回零。

您可以通過將零更改爲較高值來設置最小長度。

elseif(strlen($location) > 0 && strlen($jobtype) > 0 && strlen($keywords) > 0){ 

如果提交的值是文本輸入,那麼你可能需要微調也:

elseif(strlen(trim($location)) > 0 && strlen(trim($jobtype)) > 0 && strlen(trim($keywords)) > 0){ 
0

您需要簡化代碼:

$sql = "SELECT * FROM jobs 
          WHERE 
          active = '1' AND 
          country = '$location' "; 
$order = "ORDER BY id_job DESC"; 
$where = ""; 

if(isset($jobtype) { $where .= " AND jobType_en = '$jobtype'"; } 
if(isset($keywords) { $where .= " AND title_en LIKE '%$keywords%'" }; 

$sqlx = $sql . $where . $order; 

顯然你是處理$ jobtype和$關鍵字。在這個處理過程中,您應該設置一些默認值,以便稍後處理。

$jobtitle = (isset($_GET['jobtitle'])) ? $_GET['jobtitle'] : ""; 
$keywords= (isset($_GET['keywords'])) ? $_GET['keywords'] : ""; 

這樣,您就可以使用:

if($jobtitle != '') { .... } 
+0

isset不檢查是否爲空值。 – Misunderstood