基于if条件优化PHP变量

基于if条件优化PHP变量,php,mysql,Php,Mysql,我有一个用户页面,默认情况下系统中的所有用户都显示在该页面中 我正在尝试应用过滤器,以便用户可以优化对用户的搜索。例如,查看所有男性用户 默认情况下,要在users.php上显示所有用户,我在默认情况下运行此查询: $get_all_users = "SELECT * FROM users"; 但是,例如,当一个用户选择了要查看系统上所有女性用户时,我想运行此查询(示例): 但由于某些原因,默认情况下显示所有用户的查询总是在执行。我的做法如下: // get gender from radio

我有一个用户页面,默认情况下系统中的所有用户都显示在该页面中

我正在尝试应用过滤器,以便用户可以优化对用户的搜索。例如,查看所有男性用户

默认情况下,要在
users.php
上显示所有用户,我在默认情况下运行此查询:

$get_all_users = "SELECT * FROM users";
但是,例如,当一个用户选择了要查看系统上所有女性用户时,我想运行此查询(示例):

但由于某些原因,默认情况下显示所有用户的查询总是在执行。我的做法如下:

// get gender from radio buttons
$refined_gender = htmlentities (strip_tags(@$_POST['gender']));

$get_all_users = "SELECT * FROM users";

if (isset($_POST['submit'])){
if (isset($_POST['gender'])) {
        if ($refined_gender){
                $get_all_users = "SELECT * FROM users WHERE gender = '$refined_gender'";
        }
    }
} 

比如我会构建WHERE子句(至少是这样的) 未测试

$get_all_users = "SELECT * FROM users" . buildWhereClause($_POST);

function buildWhereClause($_POST) {
    $where = 'WHERE 1=1';
    foreach($_POST as $k => $v) {
        //check if $v is valid with a different function
        switch($k) {
            case 'gender':
                $where .= sprintf('AND `gender` = `%s`', $v);
                break;
            case 'age':
                $where .= sprintf('AND `age` = %d', $v);
                break;
        }
    }
    return $where;
}

这是一个非常蹩脚的函数,不应按原样使用。作为一个例子,它可能导致。我相信有聪明的方法可以做到这一点,而且你并不总是想要一个

1。您是否已验证(
var\u dump($\u POST)
)这两项是否已实际设置?2.这可能不是它现在不起作用的原因,但是
htmlentities
strip\u标记
不适合转义SQL查询的输入。之所以要执行
@$\u POST['gender']
是因为有一个恼人的警告,警告您POST数组中不存在此键。那么,为什么不事先检查一下,然后在其他地方构建WHERE子句,在这里检查(在一个switch案例中)用户在前端选择了什么。1/2这意味着,在未来,有了更多的过滤器,你就有了一个大的if-else结构,这很难让人注意到。因此,有一个功能构建,这是一个更好的方法。此外,它还将消除过程中的重复代码。2/2为什么不加载页面上的所有内容,并根据用户选择使用客户端筛选器显示/隐藏内容。例如,当您将结果回显到页面中时,将性别设置为每个条目的类,然后在用户选择中切换要显示/隐藏的类这样做的两个好处是减少了服务器负载,并加快了向用户显示过滤结果的速度。然后,您可以在中添加其他筛选器(例如,所有名为“Bob”的人都可以在客户端进行筛选,而无需另一个查询。是否需要在“@$\u POST['gender']”旁边添加“@”?我从未见过这样的用法,因此这可能是个问题。
$get_all_users = "SELECT * FROM users" . buildWhereClause($_POST);

function buildWhereClause($_POST) {
    $where = 'WHERE 1=1';
    foreach($_POST as $k => $v) {
        //check if $v is valid with a different function
        switch($k) {
            case 'gender':
                $where .= sprintf('AND `gender` = `%s`', $v);
                break;
            case 'age':
                $where .= sprintf('AND `age` = %d', $v);
                break;
        }
    }
    return $where;
}