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 に答える