MySQL / PHP - 用户过滤变量以返回所有值

时间:2013-03-29 18:27:58

标签: php mysql

提前感谢您查看此问题。

我有一系列HTML选择元素,用户可以在其中定义他们想要从MySQL数据库返回的数据。每个选项都存储在一个变量中。一些选项允许用户选择“No Preference”,在这种情况下,sql语句需要接受一个变量,允许它返回该特定列的所有字段。

我使用PHP作为参考。

这是否存在或是否设置了糟糕的代码?目前,SQL语句正在接受这种格式的变量

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

可供选择的用户选择采用此格式

 <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'];
            }

因此,如果用户选择“无偏好”,我需要变量来存储将返回db的所有操作层的内容,这将取代XXXX

2 个答案:

答案 0 :(得分:0)

我会使用LIKE代替=并添加%

AND `operationalTier1` LIKE '$userOps'

$userOps= '%';

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

答案 1 :(得分: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'];
}

您可以找到更多信息here


因此,基于您对此答案的评论,我将分享一些我认为可能有用的代码:

$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注入的攻击。查看this question

相关问题