Показать полную графическую версию : [решено] not null не срабатывает
dima1981
06-09-2008, 20:20
Вообщем, в таблице какая то часть полей имеет значение not null, какая то null но при внесении данных в базу из скрипта эти значения не учитываются в mysql и хоть все поля в html форме оставляй пустыми и отправляй на занесение в базу, такие данные хорошо заносятся и отображаются в браузере только естественно с пустыми полями, хотя какие то поля not null, что такое не могу понять, подскажите пожалуйста?
dmitryst
06-09-2008, 23:34
dima1981, попробуйте NOT NULL DEFAULT 'test' для символьных строк или DEFAULT 255 для чисел (потому что NULL- это вообще ничего, а NOT NULL это пробел или ноль)
dima1981
06-09-2008, 23:48
ALTER TABLE `rg` CHANGE `m_o` `m_o` VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT 'test'
или не так? не много не понял...
но так dmitryst не получается, записываются данные из m_o в базу, даже если форма не заполнена
dima1981
07-09-2008, 04:58
ALTER TABLE `rg` CHANGE `h_o` `h_o` TINYINT(20) NOT NULL DEFAULT '20', вообщем не срабатывает, обязательными к заполнению остаются только три селектовые формы день, месяц, год при чем цифры в них 01, 02, 03 и т.д. но отображается только 1, 2, 3 какую бы длинну поля не устанавливал, все остальные поля и пустыми заносятся.
(потому что NULL- это вообще ничего, а NOT NULL это пробел или ноль) » мне казалось, что not null это значит не обязательно к заполнению т.е. т.е. значение может чему то равняться но может быть и нулевым...
как тогда обозначить поля, которые являются обязательными к заполнению?
not null это не значение!!! not null - может быть только условием!
not null в описании таблицы (CREATE|ALTER table) означает что данный столбец должен иметь значение. Не обязательно к заполнению как раз поле обозначенное null
null - это отсутствие значения, нулевым его не называют
dima1981
07-09-2008, 16:04
not null в описании таблицы (CREATE|ALTER table) означает что данный столбец должен иметь значение » понял, у меня из 10 полей в таблице только 5 с этим значением и почему то они могут оставаться не заполнеными т.е. заполняю базу из форм в которых не заполнены поля и база заполняется и результат выборки показывает таблицу с незаполниными значениями это и есть самое удивительное
БД ты заполняешь не из форм, а из какого-нибудь PHP запускаешь sql-запрос. Чтобы ячейка таблицы стала null - нужно либо при записи строки вообще опустить упоминание этого столбца, либо явно указать ключевое слово null. А незаполненная web-форма на самом деле заполнена строками нулевой длины.
dima1981
07-09-2008, 16:57
хорошо Busla так и есть БД ты заполняешь не из форм, а из какого-нибудь PHP запускаешь sql-запрос.
Как тогда сделать, чтоб передавалост не нулевой длинны т.е. данные из такого поля доходя до таблицы не воспринемались бы ею и обратно приходил ответ, что не все поля заполнены, заполните все поля или как можно ещё сделать, чтобы некоторые поля формы являлись обязательными (чтоб отправить форму эти поля надо заполнить и только тогда их база примет) к заполнению и некоторые по выбору т.е. хочешь заполнять заполняй, не хочешь как хочешь? )
Обычно, решения подобного рода возлагают на серверный скрипт (php).
dima1981
07-09-2008, 20:42
да совсем я в этих грёбанных скриптах не разбераюсь в серверных и подавно, для меня эта фраза решения подобного рода возлагают на серверный скрипт (php). » не понятна, знаю что в скрипте, как то сделать можно, только знал бы как сделал бы и так, неделю смотрел ответ на эту т.е. скрипт загрузки данных с функцией фильтрации в интернете, так и не разобрался, поэтому и решил с mysql что то придумать, единственное что тут это нужен хост на, котором mysql настроен с DONT_USE_DEFAULT_FIELDS и готова сам mysql с решением подобного рода справится и без скрипта, только у себя на mysql этот параметр conf не могу настроить, вот и хочу на этот счет, что то узнать точнее как быть и настроить mysql.
блин чего все таки сообщения такие длинные получаются, сори что так себя утруждаете при их прочтении :sorry:
совсем я в этих грёбанных скриптах не разбераюсь в серверных и подавно »а без этого никак: MySQL - всего лишь средство хранения данных. Для их обработки нужно использовать какой-то язык программирования.
dima1981
08-09-2008, 16:15
понятен Busla, спсб
Delirium
11-09-2008, 06:25
как можно ещё сделать, чтобы некоторые поля формы являлись обязательными (чтоб отправить форму эти поля надо заполнить и только тогда их база примет) к заполнению и некоторые по выбору т.е. хочешь заполнять заполняй, не хочешь как хочешь? )
На это есть так называемые валидаторы, т.е. проверяющие правильность ввода данных. Если по русски, то когда вы жмете кнопку "Отправить форму", вы должны проверить в коде php значения данных в полях.
Т.е. типа такого примерно:
If MyLabel.Text = "" then
alert("Заполните поле MyLabel")
отмена отправки формы на сервер
end if
И так каждое поле. Если вы не будете этого проверять, а хотите, чтобы это сделал сервер, то все равно придется обрабатывать данные во введенных полях, но уже через оператор try... catch... finally.
P.S. И научитесь наконец ставить запятые в своих постах.
P.P.S. да совсем я в этих грёбанных скриптах не разбераюсь в серверных и подавно »
К вашему сведению, код PHP является серверным кодом, т.к. выполняется на сервере.
Delirium, как-то слабо приведённый код на php походит ;)
Delirium
12-09-2008, 01:08
Busla, я привел логику работы, а уж переложить ее на любой язык, согласитесь, не составит труда, тем более что логика элементарная :)
dima1981
12-09-2008, 01:09
не знаю Delirium, пробую оператором isset
if (!isset($_POST['m_d'])){
echo "пожалуйста заполните поле m_d";
exit();
}
else
{"m_d";}
if (!isset($_POST['m_c'])){
echo "пожалуйста заполните поле m_c";
exit();
}
else
{"m_c";}<-- тут эт я произвольно написал т.к. не знаю, что писать в книге написанно: обрабатываете форму, но как вот я как мог. Можете тут, что то подсказать, потому, что она не срабатывает, вернее когда как тут срабатывает, данные доходят до mysql, но доходят и тогда когда поле не заполнено )
не знаю что предпринять, перебераю способы т.е. )
Delirium
12-09-2008, 01:39
dima1981, Делайте проще.
Перед началом циклов If создайте переменную FillFields типа Integer, присвойте ей 0. Если условие !isset($_POST['m_d']) не выполняется, то FillFields =1, и так в каждом цикле.
После прохода всех сверок, если вдруг хоть одно поле не заполнено было, в переменной FillFields будет лежать 1.
Ну и последним циклом вы проверяете значение переменной FillFields , если оно равно 1, то не отсылаете данных, если равно нулю - то отсылаете.
Да, и на форме пометьте звездочками/цветом/выделением поля, необходимые для заполнения.
dima1981
12-09-2008, 21:27
Спасибо Delirium, уверен ценный совет, теперь только нормальную книгу или статью про это подобрать и получится клево)
звездочки там до того как сам сайт создаваться начал )
Delirium ты не мог бы в примере, про FillFields интересно как это выглядит, какие там скобки, есть ли точка с запятой, сразу потом if прописывать или перед ним, что то дополнительно ставится, был бы очень признателен )
Delirium
15-09-2008, 01:27
Блин... ну не кодил я на php. Я напишу примерно, а вы попробуйте переложить на php.
Dim FillFields as integer
FillFields = 0
If !isset($_POST['m_d']) then
echo "пожалуйста заполните поле m_d";
FillFields =1
end if
If !isset($_POST['m_c']) then
echo "пожалуйста заполните поле m_C";
FillFields =1
end if
....
If FillFields=1 then
echo "пожалуйста заполните все необходимые поля";
else
....здесь код, который отправляется на сервер для занесения данных, т.е. что то типа Insert into myTable values (m_c, m_d)
end if
dima1981
15-09-2008, 16:58
Спасибо Delirium, терь хоть понятно как это примерно выглядит )
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.