Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] not null не срабатывает (http://forum.oszone.net/showthread.php?t=116444)

dima1981 06-09-2008 20:20 892532

not null не срабатывает
 
Вообщем, в таблице какая то часть полей имеет значение not null, какая то null но при внесении данных в базу из скрипта эти значения не учитываются в mysql и хоть все поля в html форме оставляй пустыми и отправляй на занесение в базу, такие данные хорошо заносятся и отображаются в браузере только естественно с пустыми полями, хотя какие то поля not null, что такое не могу понять, подскажите пожалуйста?

dmitryst 06-09-2008 23:34 892693

dima1981, попробуйте NOT NULL DEFAULT 'test' для символьных строк или DEFAULT 255 для чисел (потому что NULL- это вообще ничего, а NOT NULL это пробел или ноль)

dima1981 06-09-2008 23:48 892701

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 892794

ALTER TABLE `rg` CHANGE `h_o` `h_o` TINYINT(20) NOT NULL DEFAULT '20', вообщем не срабатывает, обязательными к заполнению остаются только три селектовые формы день, месяц, год при чем цифры в них 01, 02, 03 и т.д. но отображается только 1, 2, 3 какую бы длинну поля не устанавливал, все остальные поля и пустыми заносятся.

Цитата:

Цитата dmitryst
(потому что NULL- это вообще ничего, а NOT NULL это пробел или ноль) »

мне казалось, что not null это значит не обязательно к заполнению т.е. т.е. значение может чему то равняться но может быть и нулевым...

как тогда обозначить поля, которые являются обязательными к заполнению?

Busla 07-09-2008 14:50 892985

not null это не значение!!! not null - может быть только условием!
not null в описании таблицы (CREATE|ALTER table) означает что данный столбец должен иметь значение. Не обязательно к заполнению как раз поле обозначенное null
null - это отсутствие значения, нулевым его не называют

dima1981 07-09-2008 16:04 893024

Цитата:

Цитата Busla
not null в описании таблицы (CREATE|ALTER table) означает что данный столбец должен иметь значение »

понял, у меня из 10 полей в таблице только 5 с этим значением и почему то они могут оставаться не заполнеными т.е. заполняю базу из форм в которых не заполнены поля и база заполняется и результат выборки показывает таблицу с незаполниными значениями это и есть самое удивительное

Busla 07-09-2008 16:25 893038

БД ты заполняешь не из форм, а из какого-нибудь PHP запускаешь sql-запрос. Чтобы ячейка таблицы стала null - нужно либо при записи строки вообще опустить упоминание этого столбца, либо явно указать ключевое слово null. А незаполненная web-форма на самом деле заполнена строками нулевой длины.

dima1981 07-09-2008 16:57 893046

хорошо Busla так и есть БД ты заполняешь не из форм, а из какого-нибудь PHP запускаешь sql-запрос.
Как тогда сделать, чтоб передавалост не нулевой длинны т.е. данные из такого поля доходя до таблицы не воспринемались бы ею и обратно приходил ответ, что не все поля заполнены, заполните все поля или как можно ещё сделать, чтобы некоторые поля формы являлись обязательными (чтоб отправить форму эти поля надо заполнить и только тогда их база примет) к заполнению и некоторые по выбору т.е. хочешь заполнять заполняй, не хочешь как хочешь? )

Busla 07-09-2008 19:31 893146

Обычно, решения подобного рода возлагают на серверный скрипт (php).

dima1981 07-09-2008 20:42 893212

да совсем я в этих грёбанных скриптах не разбераюсь в серверных и подавно, для меня эта фраза
Цитата:

Цитата Busla
решения подобного рода возлагают на серверный скрипт (php). »

не понятна, знаю что в скрипте, как то сделать можно, только знал бы как сделал бы и так, неделю смотрел ответ на эту т.е. скрипт загрузки данных с функцией фильтрации в интернете, так и не разобрался, поэтому и решил с mysql что то придумать, единственное что тут это нужен хост на, котором mysql настроен с DONT_USE_DEFAULT_FIELDS и готова сам mysql с решением подобного рода справится и без скрипта, только у себя на mysql этот параметр conf не могу настроить, вот и хочу на этот счет, что то узнать точнее как быть и настроить mysql.

блин чего все таки сообщения такие длинные получаются, сори что так себя утруждаете при их прочтении :sorry:

Busla 08-09-2008 14:47 893738

Цитата:

Цитата dima1981
совсем я в этих грёбанных скриптах не разбераюсь в серверных и подавно »

а без этого никак: MySQL - всего лишь средство хранения данных. Для их обработки нужно использовать какой-то язык программирования.

dima1981 08-09-2008 16:15 893818

понятен Busla, спсб

Delirium 11-09-2008 06:25 896066

Цитата:

как можно ещё сделать, чтобы некоторые поля формы являлись обязательными (чтоб отправить форму эти поля надо заполнить и только тогда их база примет) к заполнению и некоторые по выбору т.е. хочешь заполнять заполняй, не хочешь как хочешь? )
На это есть так называемые валидаторы, т.е. проверяющие правильность ввода данных. Если по русски, то когда вы жмете кнопку "Отправить форму", вы должны проверить в коде php значения данных в полях.
Т.е. типа такого примерно:
Код:

If MyLabel.Text = "" then
  alert("Заполните поле MyLabel")
  отмена отправки формы на сервер
end if

И так каждое поле. Если вы не будете этого проверять, а хотите, чтобы это сделал сервер, то все равно придется обрабатывать данные во введенных полях, но уже через оператор try... catch... finally.
P.S. И научитесь наконец ставить запятые в своих постах.

P.P.S.
Цитата:

Цитата dima1981
да совсем я в этих грёбанных скриптах не разбераюсь в серверных и подавно »

К вашему сведению, код PHP является серверным кодом, т.к. выполняется на сервере.

Busla 11-09-2008 13:30 896341

Delirium, как-то слабо приведённый код на php походит ;)

Delirium 12-09-2008 01:08 896872

Busla, я привел логику работы, а уж переложить ее на любой язык, согласитесь, не составит труда, тем более что логика элементарная :)

dima1981 12-09-2008 01:09 896873

не знаю 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 896898

dima1981, Делайте проще.
Перед началом циклов If создайте переменную FillFields типа Integer, присвойте ей 0. Если условие !isset($_POST['m_d']) не выполняется, то FillFields =1, и так в каждом цикле.
После прохода всех сверок, если вдруг хоть одно поле не заполнено было, в переменной FillFields будет лежать 1.
Ну и последним циклом вы проверяете значение переменной FillFields , если оно равно 1, то не отсылаете данных, если равно нулю - то отсылаете.
Да, и на форме пометьте звездочками/цветом/выделением поля, необходимые для заполнения.

dima1981 12-09-2008 21:27 897541

Спасибо Delirium, уверен ценный совет, теперь только нормальную книгу или статью про это подобрать и получится клево)
звездочки там до того как сам сайт создаваться начал )
Delirium ты не мог бы в примере, про FillFields интересно как это выглядит, какие там скобки, есть ли точка с запятой, сразу потом if прописывать или перед ним, что то дополнительно ставится, был бы очень признателен )

Delirium 15-09-2008 01:27 899370

Блин... ну не кодил я на 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 899960

Спасибо Delirium, терь хоть понятно как это примерно выглядит )

dima1981 16-09-2008 13:19 900648

$error = '';
if ( empty( $login ) ) $error = $error.'<li>не заполнено поле "Имя"</li>'."\n";
else
$query = "INSERT INTO ".TABLE_USERS."

не так? )

dmitryst 17-09-2008 15:51 901709

dima1981, ссылка на java-script-овый вариант проверки форм (может, понадобится :) )

dima1981 18-09-2008 17:23 902622

http://www.whatis.ru/razn/razn12.shtml Это кстати отлично подходит не представлял, что на столько обычный способ есть, только про качество не скажу не знаю но для 5php самое то )
Благодарю dmitryst, только java для меня атас совсем даже и не пробЫвал ни разу, мне рнр хватает скоро вопросы во сне видеть начну )

timon4ik 19-09-2008 11:36 903166

dima1981,
я когда-то приводил пример JavaScript-валидатора, посмотрите тут , еще несколько полезных приемов в есть в той же теме.

dima1981 19-09-2008 17:50 903426

Понял, спасиб за переход, только во первых там у меня почти все сделанно на php пробелы отсекаются, не нужные знаки убераются, только вот для емеил формы не могу проверку сделать, но думаю раздобуду код потихоньку ) и во вторых если скрипт не поддерживается у заполняющего форму на машине, то, что тогда, как быть, конечно это побыстрее на jave в смысле, но на php попрактичней походу, хотя не знай не силен по этим да и вообщем остальным направлениям, так копирую коды, которые требуется для сайта, который создаю где придется, тем и рад, вообщем вот так )

Кстати если не затруднит, что с этим кодом взял отсюда http://www.internet-technologies.ru/...ticle_701.html для построчного вывода данных из таблицы, подредактировал под то, что требуется, мне в основном в плане дизайна, получилось так

PHP код:

<?
ini_set
('display_errors',1);
error_reporting(E_ALL);
function 
page()
{
    if(empty(
$_post["page"])){
        
$page 0;
    } else {
if(!
is_numeric($_post["page"])) die("Неправильный формат номера страницы!");
        
$page $_post["page"];
    }
        return 
$page;



        function 
sql_query($onpage$page$table)
{
    
$begin $page*$onpage// откуда начинать
    
$sql "SELECT * FROM ".$table." where m_o='".$_POST['m_o']."' and m_d='".$_POST['m_d']."' limit ".$begin.", ".$onpage;
        
$result mysql_query($sql) or die(mysql_error());
        return 
$result;



        function 
navigation($onpage$page$table)
{
        
$return null;
    
$count mysql_query("SELECT COUNT(*) FROM rg where m_o='".$_POST['m_o']."' and m_d='".$_POST['m_d']."'");
        
$count mysql_fetch_array($count);
        
$count $count[0];
        
$pages $count/$onpage;
        if(
$page!==0){
            
$prev"<A HREF=?page.=".($page-1).">&lt;</A>";
        } else {
            
$prev "<";
        }
        if(
$page<round($pages-1)){
            
$next "<A HREF=?page=".($page+1).">&gt;</A>";
        } else {
            
$next ">";
        }
        for(
$i=0;$i<$pages;$i++)
        {
            if(
$i==$page){
                
$return.="[".($i+1)."]";
            } else {
                
$return.="<A HREF=?page='".$i."'>[".($i+1)."]</A>";
            }
        }
        return 
$prev.$return.$next;
}
$onpage 5
$table "rg"
$db mysql_connect("localhost","root","***");
mysql_select_db("rp"$db);
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
$page page(); // определяем страницу
$result sql_query($onpage$page$table); // sql - запрос
echo ("<center><table bgcolor='#ecddca' BORDERCOLOR='black' border='1' style='border-collapse: collapse'>");
echo (
"<tr bgcolor='white'><td align='center'>поле0</td><td>Поле1</td><td>Поле2</td><td align='center'>Поле3</td></tr>");
while(
$abc mysql_fetch_row($result))
{
echo(
"<tr><td>$abc[1]</td><td align='center'>$abc[2]</td><td align='center'>$abc[3]</td><td>$abc[4]</td></tr>");
echo(
"<tr><td bgcolor='white' colspan='12'><font color='white'>$abc[0]</font></td></tr></td></tr>");
}
echo 
"</table></center>";
$navigation navigation($onpage$page$table); // определим навигацию
echo $navigation// выведем ее
?>

в итоге показывает данные нормально в еолличестве определенном в onepage подсчет страниц в базе по заданным критериям поиска осуществляется хорошо т.е. навигация работает, но когда перехожу на вторую и т.д. страницу, переход есть но таблицу не отображает, мне кажется он данные запроса не получает с первой страницы, пол дня седня проэксперементировал но т.к. не рублю в этом то вот результат/
Хоть узнать вообщем подходит эт код к mysql 6 и php5 или узнать, что с этим кодом не так, походу все )

dima1981 21-09-2008 23:59 905206

Подскажите пожалуйста, выполняю этот код по постраничному выводу данных, отображает нормально первую страницу в четыре поля, навигацию определяет хорошо т.е. подсчет полей в базе по этому запросу совершает праильно, но перехожу на вторую страницу пишет

Notice: Undefined index: m_o in C:\apache\localhost\www\zg.php on line 32

Notice: Undefined index: m_d in C:\apache\localhost\www\zg.php on line 32

Поле0 Поле1 Поле2 Поле3


Notice: Undefined index: m_o in C:\apache\localhost\www\zg.php on line 41

Notice: Undefined index: m_d in C:\apache\localhost\www\zg.php on line 41

т.е. про эти строки
PHP код:

$sql "SELECT * FROM ".$table." where m_o='".$_POST['m_o']."' and m_d='".$_POST['m_d']."' limit ".$begin.", ".$onpage

и
PHP код:

$count mysql_query("SELECT COUNT(*) FROM rg where m_o='".$_POST['m_o']."' and m_d='".$_POST['m_d']."'"); 


Delirium 22-09-2008 01:36 905261

Цитата:

"SELECT * FROM ".$table."
Я вам уже писал, никогда не пишите такие запросы. PHP может тупо не понять, какие поля надо выводить. Пишите список полей, необходимых для вывода на экран, т.е.
Цитата:

SELECT name, family, surname, date_in FROM rg where......
То же самое и с
Цитата:

SELECT COUNT(*) FROM
Напишите select count(1) from ...., или имя поля вместо 1.

dima1981 22-09-2008 03:23 905298

это не подходит )
мне кажется все или из за того, что
$begin = $page*$onpage;
$sql = "SELECT * FROM ".$table."
где бегин постоянно равен нулевому числу т.к. пейдж=0 умноженный на онпейдж=5 равно ноль отсюда он и стартует

или $count потому, что фиксирован на нуле вообщем трудно это что то совсем

или раз
Цитата:

Цитата dima1981
Notice: Undefined index: m_o in »

то он скорее всего не может не то получить не то обработать данные
Цитата:

Цитата dima1981
m_o='".$_POST['m_o']."' »

тогда получается, что с передачей данных, что то не так потому, что на первой странице данные нормально показываются и количество данных подсчитывается точно, только понять, что тут такое не могу и все тут, подскажите

dmitryst 22-09-2008 15:03 905672

Цитата:

Цитата Delirium
PHP может тупо не понять, какие поля надо выводить. »

не знаю, как там у вас на РНР, а на perl-е у меня тысячи таких запросов, и ничего...

$sql = "SELECT * FROM `.$table.` where m_o='".$_POST['m_o']."' and ... и далее по тексту.

Delirium 23-09-2008 01:35 906223

dmitryst, я не спорю, что это не будет работать.
Просто сейчас вы помните, что за этой * лежит, а через полгода открываешь код, смотришь тупо на select * from table и думаешь, а что ж там за поля то? Гораздо проще написать 1 раз нужные поля через запятую, и радоваться.

К модераторам: тема переросла из MySql (Not Null) в решение проблем по PHP. Считаю, что тему надо переименовать и перенести в программирование, mysql уже не обсуждается.

dima1981 23-09-2008 12:38 906497

Да может там она половчее начнет смотреться )
только почему вот вторую страницу не отображает, навигацию показывает, поля таблицы в которой размещаются полученные из базы данные отображаются, но нет данных, как в первой странице, тут не от сесий зависит, как вы думаете, потому что я что мог передумал тут? )

dima1981 24-09-2008 04:51 907235

Вообщем отмечаю тему решенной, хотя она совсем не решенная, короче бывает :oszone:

dmitryst 24-09-2008 13:08 907503

dima1981, ну так применяйте javascript-проверку - ИМХО, это проще, даже страницу перегружать не надо (т.е. поле не заполнено - кнопка отправки вообще блокируется)

dima1981 25-09-2008 00:18 908114

dmitryst, например java на крмпьютере запрашивающего не включенно, что дополнительно пару проверок включать и php дополнительно, не могу тут разобраться, подскажи пожалуйста?

dima1981 25-09-2008 05:52 908179

Вообщем решено, но данные из базы постранично выведу )
И на счет java спасибо dmitryst, посмотрел на эту тему повнимательнее, хороший способ для такой задачи, как проверка на заполнение.
И вот понять не могу, почему все таки у меня так темы на форуме разростаются, но вот кпд практически постоянно у них обратно пропорционален колличеству ответов, но это другая история, спасибо и Делириуму, скоро появлюсь если не погибну или не умру )


Время: 00:23.

Время: 00:23.
© OSzone.net 2001-