0

この質問をチェックしていただきありがとうございます。

ユーザーが MySQL データベースから返すデータを定義できる一連の HTML select 要素があります。それぞれの選択肢は変数に格納されます。一部のオプションでは、ユーザーは「設定なし」を選択できます。この場合、SQL ステートメントは変数を受け入れて、その特定の列のすべてのフィールドを返すことができるようにする必要があります。

私は参考のためにPHPを使用しています。

これは存在しますか、それともコードの設定が不十分ですか? 現在、SQL ステートメントはこの形式の変数を受け入れています

AND `operationalTier1`='$userOps'
AND `modelName`='$userEndpoint'
AND `status`='$userStatus'
AND `sourceName`='$userSource'
AND `metSLA`='$userSLA' 

ユーザーが選択するための Select は、この形式です

 <h3>Data Filters</h3>
            <p>Case Created</p>
            <form action="index.php" method="post">
            <p>Ops Tier 1</p>
            <select name="ops_1_select">
                <option>No Preference</option>
                <option>Add/Create</option>
                <option>Delete/Remove</option>
                <option>Fix</option>
                <option>Inform</option>
            </select>

オプションを変数に設定する

 if ($_POST['ops_1_select'] = "No Preference")
            {
                $userOps= XXXX
            } else
            {
                $userOps= $_POST['ops_1_select'];
            }

したがって、ユーザーが「設定なし」を選択した場合、XXXX を置き換えるデータベースからすべての ops 層を返す何かを格納する変数が必要です。

4

2 に答える 2

0

if ステートメントでは、代入演算子 (=) ではなく等値演算子 (==) を使用する必要があります。if ステートメントの結果は常に true になり、選択した $_POST キーの値が設定されます。if ($_POST['ops_1_select'] = "No Preference")に変更if ($_POST['ops_1_select'] == "No Preference")

前:

if ($_POST['ops_1_select'] = "No Preference")
            {
                $userOps= XXXX
            } else
            {
                $userOps= $_POST['ops_1_select'];
            }

後:

if ($_POST['ops_1_select'] == "No Preference") {
    $userOps = "XXXX";
} else {
    $userOps = $_POST['ops_1_select'];
}

ここでさらに詳しい情報を見つけることができます


したがって、この回答に対するコメントに基づいて、役立つと思われるコードをもう少し共有します。

$fields = array('field1', 'field2', 'field3');
$query = 'text'; // should be everything up until your first WHERE

for ($fields as $key => $val) {
     if ($_POST[$val] == 'No Preference') {
         // IS NOT NULL will return true as long as the field is set
         $and = $val . ' IS NOT NULL';
     } else {
         $and = $val . ' = "' . $_POST[$val] . '"';
     }
     $query = $query . $and . ' AND ';
}

// Remove the trailing AND from $query, add anything else you need, run query

いくつかの注意事項、入力データを検証してください! PDO/mysqli または別のデータベース抽象化エンジンを使用していない場合は、今が開始するときです。このコードは、SQL インジェクションに対して非常に脆弱です。この質問をチェックしてください

于 2013-03-29T19:03:55.220 に答える
0

LIKEinsted ofを使用してa=を追加し%ます。

AND `operationalTier1` LIKE '$userOps'

と:

$userOps= '%';

AND operationalTier1='$userOps'または、が設定されているときに、SQL ステートメントから条件を削除できますNo Preference

于 2013-03-29T18:57:22.383 に答える