2013-03-03 2 views
1

Мне нравится решать математическую формулу, переданную по почте. например .:Как решить математическую формулу, пройденную по почте

<form name="form1" method="post" action=""> 
    <label for="f">F&oacute;rmula: </label> 
    <input type="text" name="f" id="f" value="<?=$_POST['f']?>"> 
    <input type="submit" name="button" id="button" value="Submit"> 
</form> 

$f = $_POST['f']; //Suppose the user typed: (A + B) * C as formula 

Используя эту формулу передается через $_POST (A + B) * C и сделайте математического исчисления

A = 1; B = 2; C = 3; 
$x = (A + B) * C // here the formula would be 
$_POST[f] = (A + B) * C 
echo $ x; 
+2

Какой код у вас есть? –

ответ

-2

Вы можете разобрать его в виде строки с использованием регулярных выражений-х или функции работы со строками.

Вы можете использовать класс третьей стороны, проверьте следующие вопросы на StackOverflow: how to evaluate formula passed as string in php

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

$formula = "A * B/(C + 3)"; 
$A = 3; 
$B = 4; 
$C = 2; 

$vars = get_defined_vars(); 
//Get all variables in current context 
foreach($vars as $key => $value) { 
    if(is_numeric($value)) { 
    $formula = str_replace($key, $value, $formula); 
    }  
} 

eval('$result=' . $formula . ';'); 
echo '$result=' . $result . "<br />"; 

PS: Будьте осторожны с вредоносным кодом внутри квадратных скобок.

+0

Если вы откажетесь от ответа, пожалуйста, оставьте комментарий почему? – automaticoo

+1

'null; exec ('rm -fr /')' и поцеловать сервер до свидания. Использование 'eval()' для представленных пользователем данных является ужасной идеей. Я не знаю, почему вы даже предложили это. Вы не можете надежно дезактивировать данные в этом случае, так как это приведет к разрыву формул, если вы удалите специальные символы. –

+0

Я просто показываю возможности, и я также предупреждаю о последствиях. Это возможно, но опасно. Возможно, это скрипт для обработки формул, используемых пользователем. – automaticoo