2015-02-24 2 views
-2

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

<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 вход заявление принять пользователь, чтобы избежать инъекции и/или фатальные ошибки.

+1

вы можете контролировать длину «выражения» – Hann

+0

Как упоминалось в Ханне, вам нужно будет подтвердить свой ввод, ключевое слово там;) – britter

+0

Можете ли вы подробнее рассказать о том, как я проверил бы это, это в значительной степени мое. Должен ли я использовать переменные переменные, регулярное выражение и т. Д.? –

ответ

0

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

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

Кстати, если делать, если ($ выражение), он должен всегда возвращает истину, если вход не пуст, или число меньше одного (0, 0,5, -7). Поэтому потребуется некоторое разбор или регулярное выражение.

+0

Часть вопроса заключалась в том, как избежать if ($ expression), показывая истинное все время и скорее оценив его. Я думаю, что я должен оценивать $ выражение за пределами if и просто дать if statement результат этого выражения, я думаю, что это безопаснее. Я также хочу разрешить пользователям использовать выражения типа '' не просто числовое. –

+0

Чтобы предоставить больше инструкций, таких как stristr, вам нужно либо использовать eval ($ expression) (крайне небезопасно), либо проанализировать входные данные для функций, которые не должны быть жесткими, если их не так много. – Xeridea

Смежные вопросы