用户从下拉菜单中选择操作符并在PHP函数中使用它

时间:2010-08-26 07:33:30

标签: php mysql html operators where

我想在这里实现的是用户选择一个运营商,例如+,>,<,> =等,并在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接受它作为正确的声明。请原谅我的不好解释。

4 个答案:

答案 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]