PHP: как вводить бинарные операторы + - * /% в форму?

Я написал базовый HTML/PHP для расчета таблицы Кэли некоторых также основных бинарных операций над конечное множество из n элементов.

Имя файла q.php и код (очищенный от всех стилей и т.д.) следующий:

<!doctype html>
<html>
<head><meta http-equiv="content-type" content="text/html;"></head>
<body>
<form action="q.php" method="post">
    Order:&nbsp;<input type="number" name="c1"><br><br>
    Operation:&nbsp;<input type="text" name="c2"><br>
    (syntax:<strong>&nbsp;$i "+" $j "%" 3&nbsp;</strong>)<br><br>
    <input type="submit" name="submit" value="Calculate / Reset">
</form>
<?php
$n=$_POST['c1']; $p=$_POST['c2'];
echo "<table style=\"text-align: center; margin: auto;\" cellpadding=\"8\">\n";
for ($i=0; $i<$n; $i++) {
    echo "<tr>\n";
    for ($j=0; $j<$n; $j++) {
        eval("\$a=\"$p\";");
        echo "\t<td>".$a."</td>\n";
    }
    echo "</tr>\n";
}
echo "</table>\n";
?>
</body>
</html>

Очень легко ввести целое число n в форму, но (точно так же, как здесь) Я не могу найти хороший способ ввода в форму бинарных операторов (это строки?).

Точнее, если операция над i и j, например. i+(j mod 3), я хотел бы ввести что-то вроде

i + j % 3

или даже

$i + $j % 3

вместо

$i "+" $j "%" 3

Это последнее с двойными кавычками - не очень приятное для пользователя - уже работает.

Можем ли мы сделать что-то лучше? А может быть еще и скобками () управляться, чтобы вычислять (i+j)*2 так же легко, как i+(j*2), что я уже делаю?

Мне теперь интересно, спасибо!


person MattAllegro    schedule 22.04.2014    source источник
comment
Я думаю, вы ищете htmlspecialchars().   -  person Amal Murali    schedule 22.04.2014
comment
Вам лучше действительно доверять своим пользователям, если вы собираетесь eval() произвольно вводить данные в веб-форму.   -  person cpilko    schedule 22.04.2014
comment
@AmalMurali: ты уверен, что это то же самое? Разве он не преобразует, например, % в % ?   -  person MattAllegro    schedule 22.04.2014
comment
@MattAllegro: посмотрите, что произойдет, если вы введете print_r(phpinfo(),true) в поле ввода. Проверьте этот вопрос SO для некоторых возможных решений.   -  person cpilko    schedule 22.04.2014
comment
Если вы хотите распечатать результат ваших данных публикации, вы можете использовать этот eval("\$a= {$p};"); echo "\t<td>" . $p . " = " . $a . "</td>\n"; в своем коде вместо кода eval.   -  person Gildonei    schedule 22.04.2014
comment
@gildonei: действительно, это то, что я сейчас настраивал. (Почему) вы удалили ответ? Это решает задачу. Завтра я также проверю ссылку на вопрос SO в комментарии cpilko, но этот из вас работает гладко!   -  person MattAllegro    schedule 22.04.2014
comment
@MattAllegro извините за удаление сообщения, я не понял ваш вопрос должным образом, поэтому я подумал, что опубликовал неправильный ответ. Восстановление публикации.   -  person Gildonei    schedule 23.04.2014


Ответы (1)


Попробуй это

<?php
$n = $_POST['c1']; 
$p = trim(str_replace(' ', '', $_POST['c2'])); // Remove spaces


eval("\$result = {$p};");
echo $result;
?>
person Gildonei    schedule 22.04.2014
comment
Он работает с вложенными скобками и охватывает множество простых примеров, как и ожидалось, очень хорошо! - person MattAllegro; 23.04.2014
comment
если вы посмотрите мой синтаксис и ваш, единственная разница в том, что вы ставите фигурные скобки в \$result = {$p}; ... но это имеет значение! - person MattAllegro; 10.05.2014