2013-05-01 71 views
0

我通过ajax发送多个数组到php文件。我认为它的工作正常。这是代码。通过jQuery传递多个数组到php文件ajax

function call_ajax(){ 
    var category=new Array(); 
     $('.a:checked').each(function(i){ 
     category[i] = $(this).val(); 
    }); 
    var location=new Array(); 
     $('.b:checked').each(function(j){ 
     location[j] = $(this).val(); 
    }); 
    var experience=new Array(); 
     $('.c:checked').each(function(k){ 
     experience[k] = $(this).val(); 
    }); 

     $.ajax({ 
       type: 'post', 
       url: 'check3.php', 
       data: {cat:category, loc:location, exp:experience}, 
       cache: false, 
       beforeSend: function() { 
         $('.a').hide(); 
         $('.b').hide(); 
         $('.c').hide(); 
       }, 
       success: function(data) { 
         console.log('ok'); 
         alert(data); 
       } 
     }); 
} 

在PHP文件I M接收它们变成seprate阵列以使动态查询where子句 这里是PHP文件。

<?php 
include "function.php"; 
$cat=0;$loc=0;$exp=0; 

if(isset($_POST['cat'])) 
{ 
    $category=$_POST['cat']; 
    $length=count($category); 
    $cat=" catecory_filter="; 
    for($i=0;$i<$length;$i++) 
    { 
     if($i==$length-1){ $cat=$cat." '$category[$i]' "; } 
     else{ $cat=$cat." '$category[$i]' or category_filter="; } 
    } 
} 
if(isset($_POST['loc'])) 
{ 
    $location=$_POST['loc']; 
    $length=count($location); 
    $loc=" location_filter="; 
    for($i=0;$i<$length;$i++) 
    { 
     if($i==$length-1){ $loc=$loc." '$location[$i]' "; } 
     else{ $loc=$loc." '$location[$i]' or location_filter="; } 
    } 
} 
if(isset($_POST['exp'])) 
{ 
    $experience=$_POST['exp']; 
    $length=count($experience); 
    $exp=" experience_filter="; 
    for($i=0;$i<$length;$i++) 
    { 
     if($i==$length-1){ $exp=$exp." '$experience[$i]' "; } 
     else{ $exp=$exp." '$experience[$i]' or experience_filter="; } 
    } 
} 
//Query Construction Portion 
    if($cat && $loc==0 && $exp==0) 
    { 
     $result="select * from jobs_table where ($cat)"; 
     echo "$result"; 
    } 
    else if($cat==0 && $loc && $exp==0) 
    { 
     $result="select * from jobs_table where ($loc)"; 
     echo "$result"; 
    } 
    else if($cat==0 && $loc==0 && $exp) 
    { 
     $result="select * from jobs_table where ($exp)"; 
     echo "$result"; 
    } 
    else if($cat==0 && $loc && $exp) 
    { 
     $result="select * from jobs_table where ($loc) AND ($exp)"; 
     echo "$result"; 
    } 
    else if($cat && $loc && $exp==0) 
    { 
     $result="select * from jobs_table where ($cat) AND ($loc)"; 
     echo "$result"; 
    } 
    else if($cat && $loc==0 && $exp) 
    { 
     $result="select * from jobs_table where ($cat) AND ($exp)"; 
     echo "$result"; 
    } 
    else if($cat && $loc && $exp) 
    { 
     $result="select * from jobs_table where ($cat) AND ($loc) AND ($exp)"; 
     echo "$result"; 
    } 
    else if($cat==0 && $loc==0 && $exp==0) 
    { 
     $result="select * from jobs_table"; 
     echo "$result"; 
    } 
    else 
    { 
     echo "No match found"; 
    } 
?> 

问题是IF语句不起作用。只有$ cat,$ loc和$ exp的每个值才会执行Query构造区域的前三个和后一个IF语句。 请帮我解决它。 在此先感谢。

+0

您的混合整数和文本比较。使用$ cat ='';作为一个字符串,然后检查使用if(strlen($ cat)== 0)http://php.net/manual/en/language.operators.comparison.php – Waygood 2013-05-01 08:00:30

+0

非常感谢.....它工作 – user1986484 2013-05-01 08:25:52

回答

1

这会给你同样的结果用更少的代码

<?php 
include "function.php"; 
$clauses=array(); 
function safe(&$variable) { 
    $variable=mysql_real_escape_string($variable); 
    return $variable; 
} 
if(isset($_POST['cat'])) 
{ 
    $data=array_map('safe', $_POST['cat']); 
    $cat=" category_filter='".implode(' OR category_filter=', $data)."'"; 
    $clauses[]='('.$cat.')'; 
} 
if(isset($_POST['loc'])) 
{ 
    $data=array_map('safe', $_POST['loc']); 
    $loc=" location_filter='".implode("' OR location_filter='", $data)."'"; 
    $clauses[]='('.$loc.')'; 
} 
if(isset($_POST['exp'])) 
{ 
    $data=array_map('safe', $_POST['exp']); 
    $exp=" experience_filter='".implode("' OR experience_filter='", $data)."'"; 
    $clauses[]='('.$exp.')'; 
} 
$sql="select * from jobs_table"; 
if(sizeof($clauses)>0) 
{ 
    $sql.=" WHERE ".implode(" AND ", $clauses); 
} 
?>