|
|
|
| Полный текст скрипта:
<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, однако запись пустых полей туда почему-то происходит. | |
|
|
|
|
|
|
|
для: Alexhoppus
(08.08.2009 в 19:40)
| | 1.
http://docs.php.net/manual/ru/function.isset.php
внимательней! проверяет существует переменная или нет! А не ее содержание!
2. "" и NULL - это разные вещи! | |
|
|
|
|
|
|
|
для: а-я
(08.08.2009 в 20:25)
| | Если я это же условие пытаюсь выстроить через $_POST['name'] != "" && ... возникает ошибка
Notice: Undefined index: name in C:\apache\test.ru\www\index.php on line 8
как быть? | |
|
|
|
|
|
|
|
для: Alexhoppus
(08.08.2009 в 23:49)
| | это не ошибка, а предупреждение. ставьте вперед isset и , в принципе, остальное уже не должно проверяться (или по крайней мере, волновать)
т.е. сначала проверяется isset, а потом наличие какого то значения или другие условия. По правилам Си, на котором зиждется PHP, если первое условие в списке И не выполняется, то другие и не проверяются | |
|
|
|
|
|
|
|
для: 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'])) {
}
}
?>
|
| |
|
|
|
|
|
|
|
для: а-я
(09.08.2009 в 00:02)
| | ответ некорректный, POST может существовать, а его отдельные члены нет! | |
|
|
|
|
|
|
|
для: GeorgeIV
(09.08.2009 в 00:05)
| | смотри внутр. условие, там уже проверяет составные части.
но все начинает работать только если пришли ПОСТ-данные. | |
|
|
|
|
|
|
|
для: GeorgeIV
(09.08.2009 в 00:05)
| | более того $_POST существует всегда, когда вызов идет из под apache | |
|
|
|
|
|
|
|
для: Trianon
(09.08.2009 в 00:12)
| | хммм) странно) у меня все работает именно в таком виде.
хотя у меня нет апача, только nginx может поэтому.
p.s. пошел проверять!)
------
и правда.. на денвере отдает пустой массив $_POST.
может на кнопку реагировать?) submit -> name | |
|
|
|
|
|
|
|
для: а-я
(09.08.2009 в 00:15)
| | $_SERVER['REQUEST_METHOD'] | |
|
|
|
|
|
|
|
для: а-я
(09.08.2009 в 00:15)
| | nginx это несколько другое, более упрощеное и быстрое.(Как мне кажется) | |
|
|
|
|
|
|
|
для: GeorgeIV
(09.08.2009 в 00:05)
| | В итоге решил промолчать. :))) | |
|
|
|
|
|
|
|
для: а-я
(09.08.2009 в 00:02)
| | Через empty работает, сделал конструкцию как у вас, спасибо. Про null прочитал, понял. | |
|
|
|
|
|
|
|
для: Alexhoppus
(09.08.2009 в 00:27)
| | с null в php действительно момент непростой.
Между несуществующей переменной и переменной, которой присвоено значение null, разница весьма призрачная. | |
|
|
|
|
|
|
|
для: 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
с ними все работает, но это ведь ненормально? | |
|
|
|
|
|
|
|
для: Alexhoppus
(09.08.2009 в 00:51)
| | if(isset($_POST['sex'])) ... | |
|
|
|
|
|
|
|
для: 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 вначале то все работает как хотелось бы.
Конструкции ифов видно сложно разобрать, я пробельчиков то понатыкал где надо, чтобы придать вид структуры, но они не выводятся видимо вначале строки. | |
|
|
|
|
|
|
|
для: Alexhoppus
(09.08.2009 в 01:27)
| | var_dump($_POST);
Вам уже написали. Если создан массив, это еще не значит, что в нем созданы необходимые элементы. | |
|
|
|
|
|
|
|
для: Trianon
(09.08.2009 в 01:33)
| | извиняюсь, не заметил, все исправил. спасибо. | |
|
|
|