php - sql复选框和多选过滤

标签 php mysql search checkbox filter

运行搜索时,我在过滤我的用户时遇到了一些问题。 必须可以选择多个地区和性别。 性别是复选框,区域是多选选择器。

在我的项目中,所有内容都是动态的,但这里显示的内容太多了。

形式:

<form action="" method="get">

    <input type="checkbox" name="gender[]" value="1"> <!-- male -->
    <input type="checkbox" name="gender[]" value="2"> <!-- female -->

    <select name="region[]" multiple>

        <option value="1">North</option>
        <option value="2">East</option>
        <option value="3">West</option>
        <option value="4">South</option>

    </select>

    <input type="submit" name="submitSearch" value="Filter">
</form>

过滤函数:

<?php

    if(isset($_GET['submitSearch']){
        user_filter($db);
    }

    function user_filter($db){

        $gender = $_GET['gender'];
        $region = $_GET['region'];

        $sql = "SELECT name, region, img FROM users WHERE true $gender AND $region";
        $stmt = $db->prepare($sql);
        $stmt->execute();
        $res = $stmt->fetchAll();
        return $res;

    }

?>

不确定我是否对数组进行了循环,如果未设置任何内容,则 WHERE true 有问题

希望有人能帮助我 谢谢

最佳答案

像这样更改你的代码

if(isset($_GET['submitSearch']){
    user_filter($db);
}

function user_filter($db){

    $gender = implode(",",$_GET['gender']); //Change array to comma separated string so easy to pass in mysql using IN keyword
    $region = implode(",",$_GET['region']);

    $sql = "SELECT name, region, img FROM users WHERE gender IN($gender) AND region IN ($region)";
    $stmt = $db->prepare($sql);
    $stmt->execute();
    $res = $stmt->fetchAll();
    return $res;

}

更新了条件代码

function user_filter($db){

        if(isset($_GET['gender']) && $_GET['gender'] !=''){
            $gender = implode(",",$_GET['gender']); //Change array to comma separated string so easy to pass in mysql using IN keyword
        }
        if(isset($_GET['region']) && $_GET['region'] !=''){
            $region = implode(",",$_GET['region']);
        }


        $genderSql = "";
        $regionSql = "";
        $where = "";

        $sql = '';
        $sql .="SELECT name, region, img FROM users";

        if(isset($_GET['gender']) && $_GET['gender'] !=''){
            $genderSql =" gender IN($gender)"; //Note Space at start 
        }

        if(isset($_GET['region']) && $_GET['region'] !=''){
            if(isset($_GET['gender']) && $_GET['gender'] !=''){
                $regionSql =" AND region IN ($region)"; //Note Space at start 
            } else {
                $regionSql =" region IN ($region)"; //Note Space at start 
            }
        }


        if((isset($_GET['gender']) && $_GET['gender'] !='') || (isset($_GET['region']) && $_GET['region'] !='')){
            $where =" Where";
            $sql .=$where.$genderSql.$regionSql;
        }


        $stmt = $db->prepare($sql);
        $stmt->execute();
        $res = $stmt->fetchAll();
        return $res;

    }

关于php - sql复选框和多选过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32628308/

相关文章:

php - SHA1 hmac PHP 与 Javascript - 不同的结果?

php - 使用 jQuery 或 PHP 检测较暗或较亮的背景颜色

php - 查询获取空闲时间MYSQL

mysqldump 在 perl 脚本中抛出错误,但在脚本之外运行良好

mysql - 求和MYSQL中多行时间戳之间累积时间的最佳方法

search - 如何获得 Elasticsearch 以在尖括号内返回结果?

php - 如何从表中选择行?

mysql - 如何在 MySQL 的 SET 子句中使用 SELECT 子句?

c# - C 中的地理编码查找

search - 具有数百万个 'url' 字符串的 sqlite 数据库设计 - 从 csv 批量导入缓慢