2011-11-30 52 views
3

所以我有一个使用PHP一个简单的网站做一些简单的数学就像这样:PHP数学 - 运营商

<form action="" method="POST"> 
<input type="text" name="first" /> 
<select name="method"> 
    <option>+</option> 
    <option>_</option> 
    <option>*</option> 
    <option>/</option> 
</select> 
<input type="text" name="second" /> 
<input type="submit" value="Equals" /> 

该网站可以让用户输入两个数字,然后选择一个数学运算符操纵他们。例如,在第一个输入中,用户可以输入数字3,选择减法运算符,在下一个字段中输入数字1并提交。我处理,像这样的信息:

​​

不过,我想提交后呼应网页上的数学问题的结果。我将如何做到这一点?只是回应所有的变量只会给我(在这种情况下)“3-1”,而不是实际的答案,这将是“2”。

任何想法如何做到这一点?

+2

的可能重复的[如何评估式作为在PHP字符串传递?](http://stackoverflow.com/questions/1015242/ how-to-evaluate-formula-passed-as-string-in-php) –

+0

我不确定我是否真的了解如何将该解决方案应用于我的答案。 – codedude

回答

6
if (isset($_POST['first']) && isset($_POST['second'])) { 
    $first = $_POST['first']; 
    $second = $_POST['second']; 
    $method = $_POST['method']; 
    switch($method) 
    { 
     case '+': 
      $result = $first + $second; 
      break; 
     case '-': 
      $result = $first - $second; 
      break; 
     case '*': 
      $result = $first * $second; 
      break; 
     case '/': 
      // check for division by 0 (wouldn't want to blow anything up) 
      $result = $first/$second; 
      break; 
     default: 
      $result = 'undefined operation'; 
      break; 
    } 
    printf("%.5f %s %.5f = %s", $first, $method, $second, $result); 
} 
+0

'$ second'是一个整数,所以你可能想用'%d'而不是第二个'%s'。 – Arjan

+0

@Arjan:你怎么知道它是一个整数?他没有说任何价值观都是整数。我可能会添加检查'is_numeric'两个参数。 –

+0

将数字输入转换为Tims代码的第2行和第3行的整数。 – Arjan

2

你可以使用开关盒。

switch($method){ 

case "+": 
    $result = $first + $second; 
    break; 
case "-": 
    $result = $first - $second; 
    break; 
case "*": 
    $result = $first * $second; 
    break; 
case "/": 
    $result = $first/$second; 
    break; 
} 

echo $result; 
+0

请格式化您的答案?对于大多数人来说这真的很难看,你会看到你的答案 –

+0

我提前提交我完成了它 –

1

是很危险的只是计算表达式,因为它可能包含脏东西,你应该永远不会信任用户输入(即使您使用的是select标签有人可以注入任何东西)。

要么净化输入第一然后评估它(例如检查两个数字实际上号码,并且该方法是仅一个可接受的列表中的一个),或在所述方法变量使用switch语句和写出在PHP每个方法。

或者,您可以查看PHP内部的脚本语言,如LUA。

希望帮助

2

您需要使用您的$方法的switch语句,像这样:

switch($method){ 

    case '+': 
     $result = $first + $second; 
     break; 

    case '-': 
     $result = $first - $second; 
     break; 

    case '*': 
     $result = $first * $second; 
     break; 

    case '/': 
     $result = $first/$second; 
     break; 

} 
var_dump($result); 

或者,你也可以EVAL操作:

$code = '$result = '.$first.$method.$second.';'; 
exec($code); 
var_dump($result); 

注意你不检查你的输入,它可能会导致安全问题:

if(!isset($_POST['first']) || !is_numeric($_POST['first'])){ exit('Bad number in #1'); } 

执行用于其它输入相同的如第一,第二和方法:)