我希望用户能够通过在HTML中提供值来在PHP中执行if语句。目前我被困在这里,如果用户以例如"2+3=5"的形式输入,我如何处理$expression
?
<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语句接受用户输入,以避免注入和/或致命错误。
我认为您需要逐个字符解析输入,以确定他们正在检查什么。如果不使用eval()或数据库交互,就不会出现真正的安全问题。如果总是期望相同类型的简单表达式,则可以使用regex来获取部分,而不是解析。如果你想确保零件是数字,你可以直接转换成像这样的整数
$expression = (int)$_POST['expression'];
顺便说一句,如果执行if($expression),它应该始终返回true,除非输入为空,或者是小于一(0,0.5,-7)的数字。因此,需要一些解析或正则表达式。