Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: PhP вопрос про метод POST и функцию isset
 
 автор: Alexhoppus   (08.08.2009 в 19:40)   письмо автору
 
 

Полный текст скрипта:

<html>
<head>
<title> Добавление в Базу данных MySQL </title>
</head>
<body>
<?php

if ( isset($_POST['name']) && isset ($_POST['sex']) && isset ($_POST['mail']) && isset($_POST['password1']) )
{
$dberror=" ";
if($_POST['password1']==$_POST['password2'])
{
$ret=add_to_database($_POST['name'], $_POST['sex'], $_POST['mail'],$_POST['password1'], $dberror);
if (! $ret)
echo"Ошибка: $dberror <br>";
else
echo"Спасибо";
}
else
echo"несовпадение пароля";
}
else
{
write_form();
}

function add_to_database ($name, $sex, $mail,$pass, &$dberror)
{
$user="root";
$pass="pass";
$db="bd";
$link=mysql_pconnect('localhost', $user, $pass);
if (! $link)
{
$dberror="Немогу подключиться к серверу MySql";
return false;
}
if (! mysql_select_db($db, $link))
{
$dberror=mysql_error();
return false;
}
$a=$_POST['name'];
$b=$_POST['sex'];
$c=$_POST['mail'];
$d=$_POST['password1'];
$query="INSERT INTO site_clients(name,sex,mail,pass) VALUES( '$a', '$b','$c','$d')";
mysql_query( 'SET NAMES cp1251' );
if (! mysql_query($query, $link))
{
$dberror=mysql_error();
return false;
}
return true;
}

function write_form()
{
global $PHP_SELF;
print "<form action=\"$PHP_SELF\" method=\"POST\">\n";
print "<input type=\"text\" name=\"name\">";
print "Ваш домен<p>\n";
print "<input type=\"text\" name=\"mail\">";
print "Ваше мыло<p>\n";
print "<input type=\"password\" name=\"password1\">";
print "Ваш пароль<p>\n";
print "<input type=\"password\" name=\"password2\">";
print "Ваш пароль (подтверждение)<p>\n";
print "<select name=\"sex\">\n";
print "\t<option value=\"М\">М\n";
print "\t<option value=\"Ж\">Ж\n";
print "</select>";
print "<input type=\"submit\" value=\"submit!\">\n</form>\n";
}
?>
</body>
</html>

Условие в начале скрипта
if ( isset($_POST['name']) && isset ($_POST['sex']) && isset ($_POST['mail']) && isset($_POST['password1']) ) считается выполненным, если даже я оставляю поле password пустым. Почему? +вопрос по части sql, в таблице куда производится запись прописывалось мною перед созданием, что значение полей должно быть NOT NULL, однако запись пустых полей туда почему-то происходит.

  Ответить  
 
 автор: а-я   (08.08.2009 в 20:25)   письмо автору
 
   для: Alexhoppus   (08.08.2009 в 19:40)
 

1.
http://docs.php.net/manual/ru/function.isset.php

внимательней! проверяет существует переменная или нет! А не ее содержание!

2. "" и NULL - это разные вещи!

  Ответить  
 
 автор: Alexhoppus   (08.08.2009 в 23:49)   письмо автору
 
   для: а-я   (08.08.2009 в 20:25)
 

Если я это же условие пытаюсь выстроить через $_POST['name'] != "" && ... возникает ошибка
Notice: Undefined index: name in C:\apache\test.ru\www\index.php on line 8
как быть?

  Ответить  
 
 автор: GeorgeIV   (08.08.2009 в 23:59)   письмо автору
 
   для: Alexhoppus   (08.08.2009 в 23:49)
 

это не ошибка, а предупреждение. ставьте вперед isset и , в принципе, остальное уже не должно проверяться (или по крайней мере, волновать)

т.е. сначала проверяется isset, а потом наличие какого то значения или другие условия. По правилам Си, на котором зиждется PHP, если первое условие в списке И не выполняется, то другие и не проверяются

  Ответить  
 
 автор: а-я   (09.08.2009 в 00:02)   письмо автору
 
   для: Alexhoppus   (08.08.2009 в 23:49)
 


<?php
    
if(isset($_POST)) {
    
$_POST['name'] = trim($_POST['name']);
    
$_POST['sex'] = trim($_POST['sex']);
    
$_POST['mail'] = trim($_POST['mail']);
    
$_POST['password1'] = trim($_POST['password1']);
    
        if(!empty(
$_POST['name']) && !empty($_POST['sex']) && !empty($_POST['mail']) && !empty($_POST['password1'])) {
        
        
        
        
        }
    }
?>

  Ответить  
 
 автор: GeorgeIV   (09.08.2009 в 00:05)   письмо автору
 
   для: а-я   (09.08.2009 в 00:02)
 

ответ некорректный, POST может существовать, а его отдельные члены нет!

  Ответить  
 
 автор: а-я   (09.08.2009 в 00:08)   письмо автору
 
   для: GeorgeIV   (09.08.2009 в 00:05)
 

смотри внутр. условие, там уже проверяет составные части.

но все начинает работать только если пришли ПОСТ-данные.

  Ответить  
 
 автор: Trianon   (09.08.2009 в 00:12)   письмо автору
 
   для: GeorgeIV   (09.08.2009 в 00:05)
 

более того $_POST существует всегда, когда вызов идет из под apache

  Ответить  
 
 автор: а-я   (09.08.2009 в 00:15)   письмо автору
 
   для: Trianon   (09.08.2009 в 00:12)
 

хммм) странно) у меня все работает именно в таком виде.

хотя у меня нет апача, только nginx может поэтому.

p.s. пошел проверять!)

------
и правда.. на денвере отдает пустой массив $_POST.

может на кнопку реагировать?) submit -> name

  Ответить  
 
 автор: Trianon   (09.08.2009 в 00:20)   письмо автору
 
   для: а-я   (09.08.2009 в 00:15)
 

$_SERVER['REQUEST_METHOD']

  Ответить  
 
 автор: GeorgeIV   (09.08.2009 в 00:21)   письмо автору
 
   для: а-я   (09.08.2009 в 00:15)
 

nginx это несколько другое, более упрощеное и быстрое.(Как мне кажется)

  Ответить  
 
 автор: Рома   (20.08.2009 в 00:24)   письмо автору
 
   для: GeorgeIV   (09.08.2009 в 00:05)
 

В итоге решил промолчать. :)))

  Ответить  
 
 автор: Alexhoppus   (09.08.2009 в 00:27)   письмо автору
 
   для: а-я   (09.08.2009 в 00:02)
 

Через empty работает, сделал конструкцию как у вас, спасибо. Про null прочитал, понял.

  Ответить  
 
 автор: Trianon   (09.08.2009 в 00:46)   письмо автору
 
   для: Alexhoppus   (09.08.2009 в 00:27)
 

с null в php действительно момент непростой.
Между несуществующей переменной и переменной, которой присвоено значение null, разница весьма призрачная.

  Ответить  
 
 автор: Alexhoppus   (09.08.2009 в 00:51)   письмо автору
 
   для: Trianon   (09.08.2009 в 00:46)
 

Это я уже понял, а что делать с предупреждениями
Notice: Undefined index: name in C:\apache\test.ru\www\index.php on line 9

Notice: Undefined index: sex in C:\apache\test.ru\www\index.php on line 10

Notice: Undefined index: mail in C:\apache\test.ru\www\index.php on line 11

Notice: Undefined index: password1 in C:\apache\test.ru\www\index.php on line 12

с ними все работает, но это ведь ненормально?

  Ответить  
 
 автор: Trianon   (09.08.2009 в 00:58)   письмо автору
 
   для: Alexhoppus   (09.08.2009 в 00:51)
 

if(isset($_POST['sex'])) ...

  Ответить  
 
 автор: Alexhoppus   (09.08.2009 в 01:27)   письмо автору
 
   для: Trianon   (09.08.2009 в 00:58)
 

Я использую isset, но выдает при первом же вхождении (не понимаю) вот что
Notice: Undefined index: name in C:\apache\test.ru\www\index.php on line 9

Notice: Undefined index: sex in C:\apache\test.ru\www\index.php on line 10

Notice: Undefined index: mail in C:\apache\test.ru\www\index.php on line 11

Notice: Undefined index: password1 in C:\apache\test.ru\www\index.php on line 12
не все обязательные поля заполнены

код:

if(isset($_POST))
{
$_POST['name'] = trim($_POST['name']);
$_POST['sex'] = trim($_POST['sex']);
$_POST['mail'] = trim($_POST['mail']);
$_POST['password1'] = trim($_POST['password1']);
if (!empty($_POST['name']) && !empty ($_POST['sex']) && !empty($_POST['mail']) && !empty($_POST['password1']) )
{
$dberror=" ";
if($_POST['password1']==$_POST['password2'])
{
$ret=add_to_database($_POST['name'], $_POST['sex'], $_POST['mail'],$_POST['password1'], $dberror);
if (! $ret)
echo"Ошибка: $dberror <br>";
else
echo"Спасибо";
}
else
echo"несовпадение пароля";
}
else
{
echo"не все обязательные поля заполнены";
}
}
else
{
write_form();
}

То есть получается для него массив POST установлен, т.к. выводится эхом не все поля заполнены (но почему он предупреждение про неопознанные индексы выводит?) Если поменять isset на empty вначале то все работает как хотелось бы.
Конструкции ифов видно сложно разобрать, я пробельчиков то понатыкал где надо, чтобы придать вид структуры, но они не выводятся видимо вначале строки.

  Ответить  
 
 автор: Trianon   (09.08.2009 в 01:33)   письмо автору
 
   для: Alexhoppus   (09.08.2009 в 01:27)
 

var_dump($_POST);
Вам уже написали. Если создан массив, это еще не значит, что в нем созданы необходимые элементы.

  Ответить  
 
 автор: Alexhoppus   (09.08.2009 в 01:39)   письмо автору
 
   для: Trianon   (09.08.2009 в 01:33)
 

извиняюсь, не заметил, все исправил. спасибо.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования