我想在这里实现的是用户选择一个运营商,例如+,>,<,> =等,并在PHP的Select语句中使用它。
我的HTML代码:
<label for="grade">Grade: </label>
<select name="operator" id="operator">
<option value="">Select one</option>
<option value="<">Less than</option>
<option value=">">More than</option>
<option value="=">Equals to</option>
</select>
<input type="text" name="grade" id="grade" size="2" maxlength="2">
</input>
我的PHP代码:
$operator = mysqli_real_escape_string($link, $_GET['operator']);
$grade = mysqli_real_escape_string($link, $_GET['grade']);
if ($grade != '') {
$where .= " AND grade . '$operator' . '$grade'";
}
我想要达到的是'和等级&gt; 3' 。 '3'可能是另一个数字。
我如何更改代码以使PHP接受它作为正确的声明。请原谅我的不好解释。
答案 0 :(得分:2)
您不应该引用运营商:
$where .= " AND grade $operator '$grade'";
当你逃过评分时,我会更进一步,检查运营商是否是您预期的运营商之一,例如。
if (($grade!='') && in_array($operator, array('>', '<', '=')))
{
....
}
答案 1 :(得分:1)
错误使用转义功能!
您知道该运算符只能是<
,>
或=
并对数字进行评分(不含逗号或其他内容)。
这是一个更好的验证:
$operator = isset($_GET['operator']) && is_string($_GET['operator']) && in_array($_GET['operator'], array('<', '>', '=')) ? $_GET['operator']: '';
$grade = isset($_GET['grade']) && is_string($_GET['grade']) && ctype_digit($_GET['grade']) ? $_GET['grade'] : '';
if($operator && $grade){
$where .= " AND grade $operator $grade";
}
它首先检查$ _GET数组中是否存在运算符和等级,然后检查它是否为字符串(?operator [] =是否为其数组)。然后检查运算符是否是有效的运算符(&lt;,&gt;或=),等级实际上是一个数字。
答案 2 :(得分:1)
我认为成绩线应该是:
“和等级$运营商$ grade”
答案 3 :(得分:0)
我认为你应该逃避&lt; &GT;到html字符代码。
您可以将值设置为1,2,3并执行:
$myarray = array( '<' , '>' , '=' );
使用
$myarray[$operator]