2015-04-15 122 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