2013-04-23 2 views
0

У меня есть поля ввода для государственного и местного налога.сохранить формат числа и десятичный, но удалить все остальное

Каждое поле данных вводится, а затем добавляю оба вместе, чтобы получить totaltax.

Я пробовал number_format и round и print_f, но ни один из них не работает так, как мне нужно. Я пытался найти возможность preg_match.

Что мне нужно, входные поля будут принимать такие вещи, как:

10.2 
10.33 
10.301 
3.275 
2.90 

Если кто-то входит +0,10 он должен преобразовать до 0,10. Если они войдут в 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

Try:

$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)" 
); 

В целом его хорошая идея, чтобы избежать ввода пользователя ($ _POST, ...) при построении строки SQL. В противном случае вы настроитесь на SQL-инъекцию. Прочитайте here. В этом случае это необязательно, поскольку приведение типов с плавающей точкой гарантирует, что ваши значения POST будут «экранированы».

+0

Я попытаюсь это, спасибо. Я убегаю, но в примере я все упростил, чтобы получить функцию. :) – John

+0

Проблема с этим, я не хочу, чтобы ошибка, если у него есть число, такое как 10.3% или $ 10.50 - я ищу его, чтобы удалить все, но оставить числа и десятичные числа там, где они есть. Тогда, если число начинается с десятичного числа, чтобы добавить нуль, это оно. Так что, если он начинается с .50, чтобы отформатировать его как 0.50 - спасибо! – John

+0

Вы можете попытаться отфильтровать данные сообщения сначала, выполнив его через preg_replace: '$ _POST ['statetax'] = preg_replace ('/ [^ 0-9] \ ./', '', $ _POST ['statetax']); '. Это разделяет все, кроме цифр, и «.». –

1

Вы должны использовать is_numeric(), чтобы убедиться, что ваш ввод - это номер. Затем конвертируйте в float и вернитесь к строке, чтобы убедиться, что при необходимости будет добавлен 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

+0

Что делать, если ввод «10,2% 10,1»? Использовать первое значение? – hek2mgl

+0

Ввод не будет введен как 10.2% 10.1. Он будет введен как 10,2% или 10,50 долларов США. но я хотел просто иметь что-то твердое тело, которое лишило бы ВСЕ персонажей, но оставило бы числа и точки (периоды) в одиночку. Я нашел этот preg_match, с которым я сейчас играю: preg_replace ("/ [^ 0-9 \.] /", "", $ Statetax); – John

1

это то, что я в конечном итоге использовала.

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

благодарит всех за пробили в.

Смежные вопросы