提前感谢您查看此问题。
我有一系列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
答案 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