PHP数据访问的多重查询(租房子查询)

以租房查询房源为例,

可以添加多个条件进行查询,添加的条件可以是多选或单选选项,来源于数据库中相应的数据,还可以直接输入条件进行关键字查询,以租房查询为例

数据库house表头如下:

每列依次代表:主键自增长列、关键字(模糊条件)、地区、面积、租金、租赁方式、房屋类型

<!--用户可以通过多选框和关键词查询相应的房源-->
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>

<body>
<form action="house-2-handle.php" method="post">    <!--form表单指定接收文件为本文件,提交方式为post-->
<div>
    <h4>区域</h4>    
    <label for="quyu">全选</label>    <!--label指定关键表单元素-->
    <input type="checkbox" id="quyu">    <!--全选框,点击可以全选或全不选区域选项中的所有选项-->
</div>
<?php 
    require_once("./DBDA.class.php");    //引入增删改查的类,
    $db = new DBDA();    //实例化对象$db
    
    //以下是查询条件的处理,是处理用户填写和选择条件后提交过来的数据,写在php的最前面是为了在输出选择的选项和填写条件的文本框时可以输出用户之前填写和选择内容作为默认的内容
    $tj1 = " 1=1 ";        //一共有4个查询条件,所以先建立4个恒成立条件
    $tj2 = " 1=1 ";
    $tj3 = " 1=1 ";
    $tj4 = " 1=1 ";
    $arr_1_1 = array();        //建立与4个条件对应的空数组和空字符串,以便接收用户选择条件提交后提交过来的条件,这是条件处理写在页面输出前面的原因
    $arr_1_2 = array();        //主要作用是用于初始化查询后刷新页面的初始选项和用户输入的一样,
    $arr_1_3 = array();
    $str_1_4 = "";
    
    if(!empty($_POST["quyu"])){            //四个查询条件依次先判断是否为空,不为空说明用户选择了选项或填写了内容
        $arr_1_1 = $_POST["quyu"];            //把用户选择的内容存在已经定义的空数组中
        $str = implode("','",$_POST["quyu"]) ;    //把数组内的内容用 ',' 方式连接起来
        $tj1 = " area in('{$str}')";        //重写查询条件,这是一个离散查询的条件
    }
    if(!empty($_POST["zulei"])){        //同上一个条件
        $arr_1_2 = $_POST["zulei"];
        $str = implode("','",$_POST["zulei"]);
        $tj2 = " renttype in('{$str}')";
    }
    if(!empty($_POST["fanglei"])){        //同上
        $arr_1_3 = $_POST["fanglei"];    
        $str = implode("','",$_POST["fanglei"]);
        $tj3 = " housetype in('{$str}')";
    }
    if(!empty($_POST["guanjian"])){
        $str_1_4 = $_POST["guanjian"];        //条件4是字符串
        $tj4 = " keyword like '%{$str_1_4}%' ";    //直接修改查询条件,注意这里是模糊查询的条件  
    }
    
    //以下是页面输出,根据数据库的内容决定页面的内容
    $sql_1 = "select distinct area from house ";    //书写一个去重查询语句,查询的是数据库中区域对应的字段area
    $arr_1 = $db->query($sql_1);    //通过对象方法query执行查询语句,查询语句不用填写第二参数,直接返回二维数组
    
    foreach($arr_1 as $v){            //遍历输出网页中区域的选项,
        if(in_array($v[0],$arr_1_1)){    //判断是否是用户选择的选项,是就设为默认选中,不是就不选中
            echo"<input type='checkbox' class='dx1' name='quyu[]' checked id='{$v[0]}' value='{$v[0]}'><label for='{$v[0]}'>{$v[0]}</label>";
        }else{
            echo"<input type='checkbox' class='dx1' name='quyu[]' id='{$v[0]}' value='{$v[0]}'><label for='{$v[0]}'>{$v[0]}</label>";    
        }
    }
    
    echo "<div><h4>租赁类型</h4><label for='zulei'>全选</label><input type='checkbox' id='zulei'></div>";    //租赁类型和房屋类型同区域的操作方法相同
    $sql_2 = "select distinct renttype from house";
    $arr_2 = $db->query($sql_2);
    foreach($arr_2 as $v){
        if(in_array($v[0],$arr_1_2)){
            echo"<input type='checkbox' class='dx2' name='zulei[]' checked id='{$v[0]}' value='{$v[0]}'><label for='{$v[0]}'>{$v[0]}</label>";
        }else{
            echo"<input type='checkbox' class='dx2' name='zulei[]' id='{$v[0]}' value='{$v[0]}'><label for='{$v[0]}'>{$v[0]}</label>";    
        }
    }
    echo "<div><h4>房屋类型</h4><label for='fanglei'>全选</label><input type='checkbox' id='fanglei' ></div>";
    $sql_3 = "select distinct housetype from house";
    $arr_3 = $db->query($sql_3);
    foreach($arr_3 as $v){
        if(in_array($v[0],$arr_1_3)){
            echo"<input type='checkbox' class='dx3' name='fanglei[]' checked id='{$v[0]}' value='{$v[0]}'><label for='{$v[0]}'>{$v[0]}</label>";
        }else{
            echo"<input type='checkbox' class='dx3' name='fanglei[]' id='{$v[0]}' value='{$v[0]}'><label for='{$v[0]}'>{$v[0]}</label>";    
        }
    }
    
    echo "<div><label for='gj'>关键字</label><input type='text' id='gj' name='guanjian' value='{$str_1_4}'><div>";//输出文本框,如果用户之前提交过内容则把之前提交的内容设为默认
?>
    <div><input type="submit" ></div>    <!--提交按钮,点击提交要查询的条件-->
<form>
<table width="100%" border="1" cellpadding="0" cellspacing="0">    <!--数据表头-->
    <tr>
        <td>关键字</td>
        <td>区域</td>
        <td>建筑面积(平)</td>
        <td>租金(元/月)</td>
        <td>租赁类型</td>
        <td>房屋类型</td>
    </tr>
<?php 
    //这是查询结果的输出,以表格方式输出
    $sql_4 = "select * from house where {$tj1} and {$tj2} and {$tj3} and {$tj4}";    //书写一个查询语句,条件包括之前写好的4个条件    
    $arr_jg = $db->query($sql_4);    //用对象方法执行查询语句并返回和接收二维数组
    foreach($arr_jg as $v){        //遍历这个二维数组并以表格形式在网页中输出内容
        echo "
            <tr>
                <td>{$v[1]}</td>
                <td>{$v[2]}</td>
                <td>{$v[3]}</td>
                <td>{$v[4]}</td>
                <td>{$v[5]}</td>
                <td>{$v[6]}</td>
            </tr>
        ";    
    }
?>
</table>
</body>
</html>
<script type="text/javascript">
    //给每个全选框和每组选项取元素
    var quyu = document.getElementById("quyu");
    var zulei = document.getElementById("zulei");
    var fanglei = document.getElementById("fanglei");
    var dx1 = document.getElementsByClassName("dx1");
    var dx2 = document.getElementsByClassName("dx2");
    var dx3 = document.getElementsByClassName("dx3");
    
    /*
        点击区域对应的全选框触发
        作用:全选或全不选区域内的所有选项    
    */
    quyu.onclick = function(){
        for(var i=0;i<dx1.length;i++){
            dx1[i].checked = quyu.checked;
        }    
    }
    
    /*
        点击租赁类型对应的全选框触发
        作用:全选或全不选租赁类型内的所有选项    
    */
    zulei.onclick = function(){
        for(var i=0;i<dx2.length;i++){
            dx2[i].checked = zulei.checked;
        }    
    }
    
    /*
        点击房屋类型对应的全选框触发
        作用:全选或全不选房屋内的所有选项    
    */
    fanglei.onclick = function(){
        for(var i=0;i<dx3.length;i++){
            dx3[i].checked = fanglei.checked;
        }    
    }
</script>
原文地址:https://www.cnblogs.com/zxbs12345/p/8352001.html