2013-04-23 97 views
0

我有一個州和地方稅的輸入字段。保留數字和小數的格式,但刪除一切

每個字段的數據輸入然後我加在一起得到totaltax。

我已經嘗試過number_format和round和print_f,但沒有一個正在工作,因爲我需要它們。我試圖找到preg_match的可能性。如果有人進入0.10應該轉換爲0.10

10.2 
10.33 
10.301 
3.275 
2.90 

我需要的是,輸入字段將採取類似的東西。如果它們輸入0.10,它應該保持不變。 .125應該輸入0.125

如果它不是數字或小數,它需要刪除。

$statetax = $_POST['statetax']; 
$localtax = $_POST['localtax']; 
$totaltax = $statetax+$localtax; 

insert into tax (state, local, total) values($state, $local, $total) 

謝謝!

回答

0

嘗試:

$statetax = (float) is_numeric($_POST['statetax']) ? $_POST['statetax'] : 0; 
$localtax = (float) is_numeric($_POST['localtax']) ? $_POST['localtax'] : 0; 
$totaltax = $statetax + $localtax; 

mysql_query(
    "insert into tax ('state', 'local', 'total') values($statetax, $localtax, $totaltax)" 
); 

一般來說它是一個好主意,以建立一個SQL字符串時逃跑用戶輸入($ _ POST,...)。否則,你正在設置自己的SQL注入。請閱讀here。在這種情況下,它不是必需的,因爲浮點類型轉換確保您的POST值「被轉義」。

+0

我會嘗試這個,謝謝。我正在逃避,但在例子中,我保持一切都很簡單,以獲得功能。 :) – John 2013-04-23 23:27:43

+0

這個問題是,我不希望它錯誤,如果它有一個數字,如10.3%或10.50美元 - 我正在尋找它剝去一切,但留下的數字和小數位置。然後,如果數字以小數開頭,則將其添加到零。因此,如果它以.50開頭,將其格式設置爲0.50--謝謝! – John 2013-04-24 00:07:34

+0

您可以嘗試先通過preg_replace運行過濾數據:'$ _POST ['statetax'] = preg_replace('/ [^ 0-9] \ ./','',$ _POST ['statetax']] );'。這剝奪了除數字和「。」之外的所有內容。 – 2013-04-24 00:21:58

1

您應該使用is_numeric()來確保您的輸入是一個數字。然後轉換爲浮點數並返回字符串,以確保0將根據需要進行預編排。這使用floatval()strval()

我希望下面的例子可以幫助:

$tests = array(
    '10.2', 
    '10.33', 
    '.301', 
    'bar', 
    '3.275', 
    '2.90', 
    '.1', 
    'foo' 
); 

foreach($tests as $input) { 
    // check if the value is number using `is_numeric` 
    if(!is_numeric($input)) { 
     echo "Error: Not a number: $input\n"; 
     continue; 
    } 

    // convert to float and back to string (in the echo) will 
    // automatically prepend a 0 if required 
    $sanitizedInput = strval(floatval($input)); 
    echo "Sanitized input: $sanitizedInput\n"; 
} 
+0

如果我將10.2的第一個值更改爲10.2%或10.2這個錯誤,那麼這不起作用,因爲我需要它。我不想讓它出錯,而是去掉$或%或任何其他不是數字或小數的字符。 – John 2013-04-24 00:08:15

+0

如果輸入是「10.2%10.1」會怎麼樣?使用第一個值? – hek2mgl 2013-04-24 00:09:49

+0

輸入不會輸入爲10.2%10.1。它將以10.2%或$ 10.50輸入。但我想要的東西只有堅固的東西才能去掉所有的字符,但只留下數字和點(句點)。 preg_replace(「/ [^ 0-9 \。] /」,「」,$ statetax);我發現這個preg_match是我現在在玩的。 – John 2013-04-24 00:21:06

1

這就是我最終使用。

$statetax = preg_replace("/[^0-9\.]/", "",$_POST['statetax']); 
$localtax = preg_replace("/[^0-9\.]/", "",$_POST['localtax']); 
$totaltax = ($statetax+$localtax); 

感謝大家的插話。

相關問題