У меня на моей странице есть куча текстовых полей, содержащих числа. Значение по умолчанию в базе данных равно 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);
}
в дополнение к этому, если вы set $ variable1 = ""; и вставьте его в базу данных, значение в базе данных будет пустой строкой, а не NULL, и они будут разными значениями. –
Thnks @deceze. Могу ли я отправить нулевую переменную через запрос sql? – bryan
@bryan Если вы явно пишете 'NULL', то да. – deceze