_ne_scaju_
Всем привет, суть вопроса: если я в форму указываю любую цифру то запись правильно вставляется в базу как я указал значение в поле, а вот если я поле оставляю пустым и отправлю форму то меня закидает ошибками, что лучше мне сделать чтобы такого не было? Сделать проверку этого поля? is_numeric поможет ли мне? Посоветуйте дельный совет в моей ситуации.
Dimon2x
можно поле сделать по умолчанию null
_ne_scaju_
null не помогает, уже пробовал.
artoodetoo
отвечаешь как юзер, а не как программист.
что получил, когда пробовал, конкретно? а что хотел получить?
_ne_scaju_
а что я должен был ответить на такой ответ?
Вообще я пробовал разные типы данных например float, int, но ситуация осталась прежней, и ставил эти поля то в null то в 0 все ровно ошибка одна и та же: Incorrect decimal value: » for column ‘price’ at row 1 in (в том случае если я не указываю цифру в поле и оставляю это поле пустым)
при не заполнении поля я хочу получить, значение по умолчанию после отправки формы, ну и понятно при заполнении поля я хочу получить значение которое указываю в поле.
artoodetoo
тебе подсказали сразу, но ты, видимо, не понял вот этого:
кроме типа у поля таблицы есть атрибут NULL или NOT NULL. если твоя цель допустить пустое значение, то объяви поле как NULL. когда поле объявлено как NULL и добавляется пустое значение, то фактически сохранится пустое значение. без ошибки!
когда поле NOT NULL, а во вставке пусто, то добавляется значение из атрибута DEFAULT.
проверь сначала в phpmyadmin разные случаи INSERT с пустыми значениями. потом уже пробуй через php.
_ne_scaju_
показываю скриншот, что я поле выставил в null. в атрибутах мне не доступно not null или просто null
artoodetoo
Ну а вообще, почему бы на стороне PHP не проверять на пустоту и не заменять на «значение по умолчанию»?
— Добавлено —
или (если у тебя NULL-able поле)PHP:— Добавлено —
P.S. я бы предпочёл не скриншот из какого-то блин мастера таблиц, а нормальный вид SQL, то есть как «CREATE TABLE xxx(…)». это более информативно, а еще лучше ссылку на песочницу в http://sqlfiddle.com/
_ne_scaju_
спасибо, только что попробовал вставить запись в sql у меня и со значением null запись вставилась и просто по умолчанию 0 тоже вставилась, значит проблемы в скрипте.
artoodetoo
В некоторых БД пустая строка интерпретируется как NULL, но для MySQL это разные вещи.
Ну значит подсовывай в запрос буквально нужное значение по умолчанию вместо литерала пустой строки. Как варианты — 0 или NULL.
_ne_scaju_
мне нужно просто по умолчанию записывать значение которое нужно, ну и понятно если я заполню поле своим значением то будет вставляться это значение в бд.
artoodetoo
Про значения по умолчанию:
http://sqlfiddle.com/#!9/8c1579/1
если поле вообще не упомянуто в INSERT, то сработает значение из атрибута DEFAULT.
Ganzal
может какой-то «класс для работы с бд» заменяет нулевой тип на ноль?
artoodetoo
@Ganzal похоже там всё проще: нет никакой обработки до вставки. Всегда строковое значение подставляется в INSERT. Как вариант, пустая строка.
ТС ожидает, что сам MySQL позаботится о значении по умолчанию. Но default field value не срабатывает, а сигналится ошибка, т.к. MySQL не умеет интерпретировать » как число и не использует правило default, когда в запросе есть значение поля. Любое блин значение.
Default будет работать если это поле вообще не присутствует в INSERT. Ни null, ни » не канают. Попробуй в моей песочнице поиграть.
— Добавлено —
Что блин характерно, для auto_increment поля можно использовать null на вставке. Интерпретируется как «мистер мускуль, пожалуйста вычисли это сам».
А для прочих полей null это буквально null, а не как «отказ от ответственности».
_ne_scaju_
Вы правы по сути в базу приходит значение пустой строки, `prise` = ‘ ‘; а точнее даже не доходит, так как вы и сказали что mysql не интерпретирует числовые значение, не подставляет значение по умолчанию. В лучшем случае поставить проверку до вставки, пример вы уже показали. Буду пробовать, спасибо.
_ne_scaju_
не получается обработать поле правильно.
Я тут подумал если я укажу в value=»0″ то даже если я забыл заполнить цену будет приходить значение 0 в базу, это хорошая практика?
Или лучше проверять поле? Хотя думаю что вы ответите конечно лучше проверять.
_ne_scaju_
Все разобрался с этим вопросом, помогли мне)
Решение было принято взять функцию ctype_digit() и с ней поработать)
Всем спасибо за обсуждение)
Sail
@_ne_scaju_, лучше уж is_numeric()
Так-то проблема лишь в том (как и указано в тексте ошибки), что пытаетесь в поле с типом decimal записать строку » (пустую строку).
В этом случае лишь требуется преобразовать полученное из формы значение либо в число, в которое эта строка может быть преобразована, либо в значение по-умолчанию, если получана просто строка из набора символов, не являющихся числами, десятичной точкой или знаком плюс/минус. И если не критично состояние «не определено» для этого поля в записи базы данных, то в данном случае лучше использовать значение 0 (ноль).
Фактически, ответ был дан в сообщении за номером 8 (в его первой части). Только ознакомьтесь с правилами преобразования строк в числа… (если пройтись по ссылочкам, сначала — по функции, затем — из описания функции).
Либо в случае, если поле для числа в форме заполнено набором не цифровых символов можно попросить пользователя внимательно заполнить поля формы.
_ne_scaju_
Возвращаюсь к этой теме а разве функция floatval() проверит например 4.00 число для decimal() ?
и вообще у меня как получается при редактировании данных в поле из базы записывается значение 4.00, перед обновлением записи выполняю проверку:в $num попадает значение 400 из-за этого в базе запись для этого поля изменяется на 400.00
что мне можно сделать чтобы при обновлении данных значение которое изначально было оставалось таким же?
_ne_scaju_
Так вроде разобрался перед вставкой делаю эту проверку которая выше, и для поля вместо FILTER_SANITIZE_NUMBER_FLOAT указал FILTER_DEFAUL фильтер, пока работает корректно проверил, дальше посмотрим.