0

我绝不是 PHP 专家。我可以阅读它,但写它超出了我的能力。我试图找到写这个 if 语句的最短最有效的方法。这是我网站上的过滤器。过滤器根据用户所做的选择显示业务。问题是我不知道如何将其编码到用户可以选择多个过滤器的位置。我很确定这与我的 && 语句有关。请查看我的代码并告诉我我做错了什么。我已经搜索过,但我找不到任何与我的情况有关的东西。

if($tghtcrl!="" && $lsecrl!="" && $wavy!="" && $strt!="")
    {

$vWhereClause .= " AND (specialty='".$wavy."' OR specialty='".$strt."' OR specialty='".$tghtcrl."' OR specialty='".$lsecrl."')";
    }
    else
    {
        if($tghtcrl!="")
        {
            $vWhereClause .= " AND specialty='".$tghtcrl."' ";
        }
        if($lsecrl!="")
        {
            $vWhereClause .= " AND specialty='".$lsecrl."' ";
        }
        if($wavy!="")
        {
            $vWhereClause .= " AND specialty='".$wavy."' ";
        }
        if($strt!="")
        {
            $vWhereClause .= " AND specialty='".$strt."' ";
        }
    }

先生们将不胜感激任何帮助。else 语句负责单数选择,而开头的 if 语句负责选择所有 4 个。但是在两者之间进行选择呢?我觉得答案就在我眼前。下面的代码是@h2ooooooo 提供的更新代码。

 if($tghtcrl!="" && $lsecrl!="" && $wavy!="" && $strt!="")
{
    $vWhereClause .= " AND (specialty='".$wavy."' OR specialty='".$strt."' OR specialty='".$tghtcrl."' OR specialty='".$lsecrl."')";
}
else
{
    $variables = array($tghtcrl, $lsecrl, $wavy, $strt);
    foreach ($variables as $variable) 
    {
        if ($variable!="")
        {
            $vWhereClause .= " AND specialty='".$variable."' ";
        }
    }
}
4

1 回答 1

0

除了明显的 SQL 注入(您可以通过简单的 google 搜索了解)之外,您还可以使用循环来检查值,如下所示:

$values = array($tghtcrl, $lsecrl, $wavy, $strt);
$sqlValues = array();

foreach ($values as $value) 
{
    $value = trim($value);
    if ($value != "") 
    {
        $sqlValues[] = "specialty = '" . $value . "'";
    }
}

if (!empty($sqlValues)) 
{
    $vWhereClause .= " AND (" . implode(" OR ", $sqlValues) . ")";
}
于 2013-11-07T17:34:49.307 回答