2011-11-30 63 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'); } 

執行用於其它輸入相同的如第一,第二和方法:)