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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Ошибка в скрипте регистрации.

Сообщения:  [1-10]   [11-18] 

 
 автор: psychomc   (11.12.2013 в 17:25)   письмо автору
 
   для: 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)
 

ннн

  Ответить  
 
 автор: sim5   (25.10.2010 в 17:04)   письмо автору
 
   для: Лена   (25.10.2010 в 16:53)
 

Достаточно имя и id этой кнопки не указывать и вы ее не получите, и заморачиваться с картинками не нужно будет. Поля формы не имеющие имен на сервер не передаются.
Да и соль не в ней, честно говоря, все слова эти лишь для того, чтобы автор темы задумался. А если подумает, то будет знать, как без труда вырезать ее и иные "мешающие".

  Ответить  
 
 автор: Trianon   (25.10.2010 в 17:03)   письмо автору
 
   для: Лена   (25.10.2010 в 16:53)
 

не указывать name

  Ответить  
 
 автор: Лена   (25.10.2010 в 16:53)   письмо автору
 
   для: sim5   (25.10.2010 в 15:05)
 

>Единственно, что нужно учитывать то, что и кнопка SUBMIT может иметь имя, а значит передаваться на сервер, поэтому ее либо сразу удалить из массива перед проверкой, либо не отправлять на сервер.

Как можно значение кнопки не передавать на сервер? Указывать ей value='' и вместо самой кнопки ставить картинку с надписью?

  Ответить  
 
 автор: sim5   (25.10.2010 в 15:05)   письмо автору
 
   для: 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().

  Ответить  
 
 автор: antei   (25.10.2010 в 13:00)   письмо автору
 
   для: 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>';
        }
    }
}
?>

Поставил себе задачу как можно максимально усложнить скрипт от ввода недружелюбного кода
в базу данных. Конечно без опыта можно такого понатыкать,,,
Если Вам не трудно подскажите что убрать, и может добавить.
Приму любую критику, но будьте снисходительны...

  Ответить  
 
 автор: sim5   (24.10.2010 в 06:04)   письмо автору
 
   для: Trianon   (23.10.2010 в 23:55)
 

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

  Ответить  
 
 автор: Trianon   (23.10.2010 в 23:55)   письмо автору
 
   для: sim5   (23.10.2010 в 23:36)
 

ну вот, при всем почтении, array_map как-то к простым вещам и начальной учебе... как-то со скриптом.

  Ответить  

Сообщения:  [1-10]   [11-18] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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