1

我想在这里实现的是用户选择一个运算符,例如 +、>、<、>= 等,并在 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'";
}

我想要达到的是'AND Grade > 3'。“3”可能是另一个数字。

我如何更改我的代码以使 PHP 接受它作为正确的声明。请原谅我在这里不好的解释。

4

4 回答 4

2

你不应该引用运算符:

$where .= " AND grade $operator  '$grade'";

虽然您已经逃过了等级,但我会更进一步检查操作员是否是您预期的操作员之一,例如

if (($grade!='') && in_array($operator, array('>', '<', '=')))
{
    ....
}
于 2010-08-26T07:39:35.843 回答
1

我认为您应该将 < > 转义为 html 字符代码。

您可以将值设置为 1,2,3 并执行以下操作:

$myarray = array( '<' , '>' , '=' ); 

使用

$myarray[$operator]
于 2010-08-26T07:38:02.180 回答
1

转义函数的错误使用!您知道运算符只能是<, >, or=并且对数字进行评分(没有逗号或其他内容)。

这是一个更好的验证:

$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[]= 将其组成一个数组)。然后它会检查 operator 是否是有效的运算符(<、> 或 =),而 Grade 是否真的是一个数字。

于 2010-08-26T07:41:02.907 回答
1

我认为等级线应该是:

" AND 等级 $operator $grade "

于 2010-08-26T07:45:55.093 回答