передать аргументы IF if из HTML-формы во внешнем интерфейсе?

Я хочу, чтобы пользователи могли выполнять оператор if в PHP, предоставляя значения в HTML. В настоящее время я застрял здесь, как я могу обработать $expression если пользователь вводит в форму, например, «2 + 3 = 5«?

<form method="post" action="test.php">
Evaluate <input type="text" required="required" name="expression" /><br />
True <input type="text" required="required" name="returnOnTrue" /><br />
False <input type="text" required="required" name="returnOnFalse" /><br />
<input type="submit" name="submit" value="Run" />
</form>

Тогда в PHP у меня есть что-то вроде

function if_statement($expression, $true, $false) {

try {

if (    !empty($expression)
&& !empty($true) && ctype_digit($true)
&& !empty($false) && ctype_digit($false)
) {

if ($expression) {
return $true;
} else {
return $false;
}

}

return;

} catch (Exception $e) {
return;
}

}

$expression = $POST["expression"];
$onTrue     = $POST["returnOnTrue"];
$onFalse    = $POST["returnOnFalse"];

echo call_user_func_array("if_statement", array($expression, $onTrue, $onFalse));

Есть ли другой более безопасный способ заставить оператор IF принимать пользовательский ввод, чтобы избежать инъекций и / или фатальных ошибок.

-2

Решение

Я бы сказал, что вам нужно будет проанализировать входной символ за символом, чтобы определить, что они проверяют. Не было бы проблемы безопасности, если бы не использовали eval () или взаимодействие с базой данных. Если вы всегда ожидаете одного и того же типа простого выражения, вы можете использовать регулярное выражение для получения частей вместо анализа. Если вы хотите убедиться, что части являются цифрами, вы можете просто привести к целому числу, как

$expression = (int)$_POST['expression'];

Кстати, если делать if ($ expression), он всегда должен возвращать true, если вход не пустой или число меньше единицы (0, 0.5, -7). Таким образом, некоторый анализ или регулярное выражение были бы необходимы.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]