2014-02-05 2 views
0

У меня на моей странице есть куча текстовых полей, содержащих числа. Значение по умолчанию в базе данных равно NULL, когда оно создано, и у меня есть каждый вход echo значение, которое оно находится в базе данных (по умолчанию ничего нет, поскольку оно установлено на null).Работа с нулевыми переменными и номерами форматирования

Проблема, с которой я столкнулся, заключается в том, что если пользователь впервые открывает форму, отправляет форму и не заполняет элемент, значение get превращается в 0 вместо того, чтобы хранить его null.

Может ли кто-нибудь мне помочь?


Когда пользователь открывает страницу, форматирует число как так:

if(isset($data['variable1'])) 
    $variable1 = numberFormat($data['variable1']); 
else 
    $variable1 = ""; 

Когда сообщения пользователя форма, это unformats число так:

$variable1 = numberUnformat($_POST['variable1']); 

I даже попытались сделать это:

if(isset($_POST['variable1'])) 
    $variable1 = numberUnformat($_POST['variable1']); 
else 
    $variable1 = ""; 

NumberFormat()

function numberFormat($n, $n_decimals="2") 
{ 
    return ((floor($n) == round($n, $n_decimals)) ? number_format($n) : number_format($n, $n_decimals)); 
} 

numberUnformat()

function numberUnformat($number) 
{ 
     $cleanString = preg_replace('/[^0-9.,-]|(?<=.)-/', '', $number); 
     $onlyNumbersString = preg_replace('/[^0-9-]|(?<=.)-/', '', $number); 

     $separatorsCountToBeErased = strlen($cleanString) - strlen($onlyNumbersString) - 1; 
     $stringWithCommaOrDot = preg_replace('/([,\.])/', '', $cleanString,   $separatorsCountToBeErased); 
     $removedThousendSeparator = preg_replace('/(\.|,)(?=[0-9]{3,}$)/', '', $stringWithCommaOrDot); 

     return (float) str_replace(',', '.', $removedThousendSeparator); 
} 

ответ

0
if(isset($_POST['variable1'])) 

$_POST['variable1']всегда быть установлен если она была частью формы. Значения HTTP POST (или что-то еще, передаваемое через HTTP, если на то пошло) никогда не являются null, потому что это не тип HTTP. Лучше всего это пустая строка, которая не является null, поэтому указанное выше условие всегда истинно, и ваша функция unformat всегда будет возвращать 0.

Вместо этого вы должны проверить на strlen($_POST['variable1']) > 0 или $_POST['variable1'] !== ''.

+1

в дополнение к этому, если вы set $ variable1 = ""; и вставьте его в базу данных, значение в базе данных будет пустой строкой, а не NULL, и они будут разными значениями. –

+0

Thnks @deceze. Могу ли я отправить нулевую переменную через запрос sql? – bryan

+0

@bryan Если вы явно пишете 'NULL', то да. – deceze

0

Потому что он включен в сообщение формы, эта переменная технически установлена ​​(установлена ​​в ''), это то, что вам нужно будет проверить.

Простой метод может быть

if(strlen(trim($data['variable1'])) > 0) 
{ 
    $variable1 = numberFormat($data['variable1']); 
} 
else 
{ 
    $variable = null; 
} 

В зависимости от того, что вы на самом деле хотите сделать. Итак, здесь мы удаляем все пробелы до и после, а затем проверяем длину ввода, если оно больше 0, пользователь вводит что-то, иначе мы превратим его в истинный null.

0

isset($_GET['data']) всегда верно, если у вас есть input name="data", даже если он пуст

вы должны проверить $_GET['data'] === '' слишком (или $ _POST)

0

Try This

if(isset($data['variable1']) && !is_null($data['variable1'])) 
    $variable1 = numberFormat($data['variable1']); 
else 
    $variable1 = ""; 
Смежные вопросы