2011-04-26 42 views
0

我想使一個在線計算器,人們可以使用我的網站中的表格進行計算,人們可以在表單中進行POST,結果是通過url字符串進行GET。它安全嗎?這是一個安全的做法在PHP?

HTML

<form id="form1"> 
      <input type="text" name="user_price" size=2/> 
      <?php echo form_dropdown('selling', $rates);?> 
      <input type="submit" value="submit"> 
      </form> 

PHP

 <?php 
     if((int)$_GET['user_price']){ 
     echo 'Total '. $_GET['user_price'] * $_GET['selling']; 
     }else if((string)$_GET['user_price'] OR (array)$_GET['user_price']){ 
      echo 'enter number not characters'; 
     }else{ 
      echo ''; 
     } 
     ?> 
+0

(串)和(陣列)他們沒有測試他們的類型 – Galen 2011-04-26 05:14:05

+3

雖然這些答案都很好,但我不得不建議您使用javascript來執行這些計算,因爲它們看起來不那麼複雜。 – Ibu 2011-04-26 05:18:24

回答

3

是的,這是完全安全的,它只是沒有意義。 (int)$_GET['user_price']強制轉換爲一個整數的值,它確實是而不是的意思是「如果值是整數」

您正在尋找:

if (isset($_GET['user_price'], $_GET['selling']) && 
    is_numeric($_GET['user_price']) && is_numeric($_GET['selling'])) { 
    ... 
} else { 
    echo 'Please enter numbers'; 
} 
+0

沒有演員那裏[返回它鑄造](http:// codepad.org/SPn70a6Z),而不是自己的變量? – alex 2011-04-26 05:10:39

+0

@alex嗯,是的,這仍然不是'in_int'或'is_numeric'。 – deceze 2011-04-26 05:12:08

+0

+1指向我的眼睛沒有(和正確的:)) – alex 2011-04-26 05:17:16

1

你可以使它更簡潔

if (is_numeric($_GET['user_price']) && is_numeric($_GET['selling'])) { 
    echo 'Total '. $_GET['user_price'] * $_GET['selling']; 
} else { 
    echo 'Something went wrong'; 
} 
1

這裏是我會怎樣代碼...

$userPrice = isset($_GET['user_price']) ? $_GET['user_price']) : NULL; 
$selling = isset($_GET['selling']) ? $_GET['selling'] : NULL; 

if (is_numeric($userPrice) AND is_numeric($selling)) { 
    echo 'Total '. $userPrice * $selling; 
} else { 
    echo 'enter number not characters'; 
} 

請注意,如果回顯用戶提交的字符串,請使用htmlspecialchars()來包裝它們。

+0

他的數字倍增,我認爲這是... – deceze 2011-04-26 05:10:08

+0

@deceze OK,gotcha。我只是編輯那裏...... :) – alex 2011-04-26 05:14:55

+0

+1包括'isset'檢查,將其納入我的答案...:o) – deceze 2011-04-26 05:17:02

0

萬無一失,但使用GET和POST當你與表單數據進行任何之前你應該總是聲明一個變量