|
|
|
|
|
для: parsek
(11.12.2013 в 17:21)
| | у вас там скорее всего подмассивы есть в $_POST, поэтому. попробуйте сделать рекурсивную array_map или напишите свою trim | |
|
|
|
|
автор: parsek (11.12.2013 в 17:21) |
|
|
для: sim5
(25.10.2010 в 15:05)
| | Скажите пожалуйста а почему выдаётся ошибка на эту строку rn
if($_POST = array_diff(array_map('trim', $_POST), array(''))) {
| rnследующего вида:rn
Warning: trim() expects parameter 1 to be string, array given in /var/***/vhosts/.... on line 4
|
| |
|
|
|
|
автор: classic1698@yandex.ru (11.12.2013 в 17:16) |
|
|
для: sim5
(25.10.2010 в 15:05)
| | ннн | |
|
|
|
|
|
|
|
для: Лена
(25.10.2010 в 16:53)
| | Достаточно имя и id этой кнопки не указывать и вы ее не получите, и заморачиваться с картинками не нужно будет. Поля формы не имеющие имен на сервер не передаются.
Да и соль не в ней, честно говоря, все слова эти лишь для того, чтобы автор темы задумался. А если подумает, то будет знать, как без труда вырезать ее и иные "мешающие". | |
|
|
|
|
|
|
|
для: Лена
(25.10.2010 в 16:53)
| | не указывать name | |
|
|
|
|
|
|
|
для: sim5
(25.10.2010 в 15:05)
| | >Единственно, что нужно учитывать то, что и кнопка SUBMIT может иметь имя, а значит передаваться на сервер, поэтому ее либо сразу удалить из массива перед проверкой, либо не отправлять на сервер.
Как можно значение кнопки не передавать на сервер? Указывать ей value='' и вместо самой кнопки ставить картинку с надписью? | |
|
|
|
|
|
|
|
для: antei
(25.10.2010 в 13:00)
| | Снисходительность, это дамская черта характера ;-)
...максимально усложнить скрипт от ввода недружелюбного кода, это задача несколько иного плана.
Начать, пожалуй, нужно опять с того, что я упоминал уже ранее.
if (empty($_POST['user_name'])) exit();
| Пустое значение этого поля совсем не означает, что суперглобальный массив $_POST в данном случае пустой. Это проверка на пустое значение только этого поля, но никак не массива, который никогда не будет пустой, если пришли поля формы, пусть и пустые. Вы уж ставя такие комментарии для себя, разбирайтесь, что на самом деле делает скрипт ваш.
И почему опять exit()? Почему это не ошибка, которую пользователь должен исправить? Вы даже не потрудились известить его об этом, а просто вывалились из диалога и все. Действительно проверить этот массив на пустые поля в нем, можно только проверив все поля, или воспользоваться функциями работы с массивами, среди которых есть масса полезных, именно для решения подобных задач. Две функции из этого набора позволяют вычесть из массива пустые поля и проверив после этого массив на пустоту.
<?
if($_POST = array_diff(array_map('trim', $_POST), array(''))) {
//массив не пуст, работаем
//и надобность в операциях $_POST['user_name'] = trim ($_POST['user_name']);
//и т.д. отпадает, теперь остается проверка только на корректность ввода
} else {
//массив не имеет значений, форма не имеет ни одного заполненного поля
}
|
Единственно, что нужно учитывать то, что и кнопка SUBMIT может иметь имя, а значит передаваться на сервер, поэтому ее либо сразу удалить из массива перед проверкой, либо не отправлять на сервер. Если форма имеет некое скрытое поле, значит, его запомнить в переменной и удалить из массива.
Сама структура скрипта неверна у вас, если только тут не показан вывод формы по умолчанию и по наличию ошибок. Иначе вывод ошибок ни к чему. Вы должны возвращать форму пользователю при ошибках ввода, и выводом самих ошибок, у вас должен быть диалог с пользователем, а не игра "Отгадай, что сейчас произойдет?". При этом значениям полей формы присваивать введенные пользователем данные, чтобы не набирать ему их вновь.
Пароль не хранят в открытом виде, хранят его хеш – md5(). | |
|
|
|
|
|
|
|
для: sim5
(24.10.2010 в 06:04)
| | Спасибо за ответ.
Теперь по пунктам:
"....Прочтите об if... elseif... else, у вас с этим проблема или со скобками....." -
вчера с утра до ночи учил и разбирал примеры,
Огромное спасибо за правило -
"....как правильно писать, то возьмите за правило - открывая фигурную скобку сразу жмите Enter и пишите для нее закрывающую, а уже после этого между ними пишите код....."
После капитальных мучений дошло, что именно в логике била ошибка, а потому и со скобками проблема!!!
Немного переписал скрипт, он и ЗАРАБОТАЛ! Регистрация на локалке прошла успешно.
Вот результат, все exit заменил.
<?php
if($_SERVER['REQUEST_METHOD'] != 'POST')
{
echo '<form method="post" action="">
</form>';
}
else
{
$errors = array();
//удаляем лишние пробелы
$_POST['user_name'] = trim ($_POST['user_name']);
$_POST['user_pass'] = trim ($_POST['user_pass']);
$_POST['user_pass_check'] = trim ($_POST['user_pass_check']);
$_POST['user_email'] = trim ($_POST['user_email']);
//проверяем, не пустой ли суперглобальный массив $_POST
if (empty($_POST['user_name'])) exit();
//проверяем правильно ли заполнены обязательные поля
if (empty($_POST['user_name'])) {$errors[] =('Поле "логин*" не заполнено');}
if (empty($_POST['user_pass'])) {$errors[] =('Поле "пароль*" не заполнено');}
if (empty($_POST['user_pass_check'])) {$errors[] =('Поле "пароль еще раз*" не заполнено');}
if($_POST['user_pass'] != $_POST['user_pass_check']) {$errors[] =('Пароли не совпадают.');}
if (empty($_POST['user_email'])) {$errors[] =('Поле "пароль еще раз*" не заполнено');}
// Если введен E-mail, проверяем его на корректность
if (!empty($_POST['user_email']))
{
if (!preg_match("|^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$|i",$_POST['user_email']))
{
$errors = ('Поле "E-mail*" должно соответствовать формату somebody@somewhere.ru');
}
}
if(!empty($errors))
{
echo '<p align="center">Некоторые поля заполнены некорректно!</p><br /><br />';
echo '<ul>';
foreach($errors as $key => $value)
{
echo '<li>' . $value . '</li>';
}
echo '</ul>';
}
else
{
$sql = "INSERT INTO
personal(user_name, user_pass, user_email ,user_date)
VALUES('" . mysql_real_escape_string($_POST['user_name']) . "',
'" . sha1($_POST['user_pass']) . "',
'" . mysql_real_escape_string($_POST['user_email']) . "',
NOW())";
$result = mysql_query($sql);
if(!$result)
{
echo '<p align="center">Ошибка, попробуйте позже.</p>';
}
else
{
echo '<p align="center">Успешная регистрация. Вы можете <a href="signin.php">войти</a> :-)</p>';
}
}
}
?>
|
Поставил себе задачу как можно максимально усложнить скрипт от ввода недружелюбного кода
в базу данных. Конечно без опыта можно такого понатыкать,,,
Если Вам не трудно подскажите что убрать, и может добавить.
Приму любую критику, но будьте снисходительны... | |
|
|
|
|
|
|
|
для: Trianon
(23.10.2010 в 23:55)
| | Так вот я о чем и говорю, пусть с простым сперва разберется, что к чему, и что выбросить можно безболезненно. ) | |
|
|
|
|
|
|
|
для: sim5
(23.10.2010 в 23:36)
| | ну вот, при всем почтении, array_map как-то к простым вещам и начальной учебе... как-то со скриптом. | |
|
|
|
|