Пользователь выбирает оператор из выпадающего меню и использует его в функции PHP - PullRequest
1 голос
/ 26 августа 2010

Чего я хотел бы достичь, так это того, что пользователь выбирает оператора, например, +,>, <,> = и т. д. и использует это в операторе Select в PHP.

МОЙ 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'";
}

То, чего я хотел бы достичь, это «И оценка> 3». «3» может быть другим числом.

Как я могу изменить свои коды, чтобы PHP воспринял это как правильное утверждение. Простите мое плохое объяснение здесь.

Ответы [ 4 ]

2 голосов
/ 26 августа 2010

Вы не должны цитировать оператора:

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

Несмотря на то, что вы вышли из класса, я бы пошел дальше и проверил, является ли оператор одним из ваших ожидаемых операторов, например,

if (($grade!='') && in_array($operator, array('>', '<', '=')))
{
    ....
}
1 голос
/ 26 августа 2010

Я думаю, что строка для оценки должна быть:

"И оценка $ оператор $ оценка оценки"

1 голос
/ 26 августа 2010

Неправильное использование экранирующих функций! Вы знаете , что оператором может быть только <, > или =, и вы оцениваете число (без запятой или чего-то еще).

Это лучшая проверка:

$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 [] = создает ее массив). Затем он проверяет, является ли оператор действительным оператором (<,> или =) и действительно ли оценка является числом.

0 голосов
/ 26 августа 2010

Я думаю, вам следует перейти <> к html кодам символов.

Вы можете установить значения 1,2,3 и сделать:

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

использование

$myarray[$operator]
...