0

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

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 文件中,我将它们接收到单独的数组中以进行动态查询 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 语句不起作用。查询构造区域的前三个和倒数第二个 IF 语句只对 $cat、$loc 和 $exp 的每个值执行。请帮我解决它。提前致谢。

4

1 回答 1

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);
}
?>
于 2013-05-01T08:18:24.897 回答