0

提前感谢您查看此问题。

我有一系列 HTML 选择元素,用户可以在其中定义他们想要从 MySQL 数据库返回的数据。每个选项都存储在一个变量中。一些选项使用户可以选择“无偏好”,在这种情况下,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

4

2 回答 2

0

我会使用LIKEinsted of=并添加一个%.

AND `operationalTier1` LIKE '$userOps'

和:

$userOps= '%';

或者您可以在设置AND operationalTier1='$userOps'时从您的 sql 语句中删除条件No Preference

于 2013-03-29T18:57:22.383 回答
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 回答