如果php中的语句缩短了

时间:2013-11-07 17:31:17

标签: php

我绝不是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."' ";
        }
    }
}

1 个答案:

答案 0 :(得分:0)

除了明显的SQL注入(您可以通过简单的谷歌搜索阅读),您可以使用循环来检查值:

$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) . ")";
}