Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Форма регистрации =)

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: ещё раз о баранах и о кнопке F5
ZeiZ
Отправлено: 29 Апреля, 2010 - 19:54:59
Post Id



Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009  
Откуда: Москва


Помог: 0 раз(а)




Логика:
1. Проверяю получены ли POST - данные
1.1. Проверяю получены ли они именно из формы регистрации, или это другие (хз какие =) )
1.1.1 Долго валидирую данные, если что-то не нравиться, формирую массив $reg_err

1.2 Если массив $reg_err пуст:
1.2.2 Записываю в БД
1.2.3 Отправляю письмо
1.2.4 ??????????????

1.3 Массив $reg_err не пуст => вывожу форму с указанными ошибками.

2. Вывожу форму.

Как можно догодаться меня интересует ????????????.
Что там делать? Если вывести сообщение, мол спасибо за рег, то при обновлении страницы (F5) браузер опять посылает пост данные и возвращается форма с ошибкой: такой пользователь уже зарегистрирован.

Делать Header("Location:.....") не могу, т.к. шапка сайта уже к моменту запуска скрипта уже отрсовывается.
Запускать скрипт при каждом обращении к любым страницам сайта (if $_POST['reg']=='1'...)до шапки, при условиях, что получены пост-данные именно с формы регистрации и уж тогда делать Header("Location:.....") (не затратно?)? Или помимо Header("Location:.....") есть какие-нибудь другие возможности?

Понимаю, что это не критичный баг, но хочется чтоб всё было красиво и правильно.
Спасибо.
 
 Top
Champion Супермодератор
Отправлено: 29 Апреля, 2010 - 20:09:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




ZeiZ пишет:
Делать Header("Location:.....") не могу
сделай echo '<script>document.localtion='...'</script>'; Или запиши то-нибудь в сессию, проверь и не пиши в базу, если повторно обновили страницу.
 
 Top
ZeiZ
Отправлено: 29 Апреля, 2010 - 20:17:28
Post Id



Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009  
Откуда: Москва


Помог: 0 раз(а)




Champion пишет:
и не пиши в базу

и так не пишется. возвращается форма с ошибкой: "такой Вася уже зарегистрировался =)"

Обновлять браузер думаю и так никто не будет, только если те, кого интересует надёжность сайта (назовём их так).

+ На регистрации стоит капча.

Champion пишет:
<script>document.localtion='...'</script>

спасибо.... посмотрим.
(Добавление)
Champion пишет:
<script>document.localtion='...'</script>
 
 Top
koras
Отправлено: 29 Апреля, 2010 - 23:10:19
Post Id



Частый гость


Покинул форум
Сообщений всего: 224
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




Цитата:
1.1. Проверяю получены ли они именно из формы регистрации, или это другие (хз какие =) )

Можно узнать как проверяете.


Я бы ещё добавил где нить


ну и капчу
 
 Top
JustUserR
Отправлено: 30 Апреля, 2010 - 13:18:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




ZeiZ пишет:
Проверяю получены ли они именно из формы регистрации, или это другие (хз какие =) )
Проверить это в принципе невозможно - ведь если отследить HTTP-запрос от вашего браузера с помощью Proxymitron и скопировать его то получится то же самое - однако эти данные могут быть специально изменены
Как вариант можно использовать JS-функции для подтверждения авторизации - тогда скопировать запрос будет труднее - так как данных JS-скрить нужно будет проанализировать и выполнить


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
altermann
Отправлено: 30 Апреля, 2010 - 20:34:52
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Март 2010  
Откуда: Днепропетровск


Помог: 6 раз(а)




Попробуй так:

CODE (html):
скопировать код в буфер обмена
  1. <META HTTP-EQUIV="refresh" CONTENT="0; url=index.php">


-----
Я прирожденный кузнец, я не могу не куя!
 
 Top
JustUserR
Отправлено: 01 Мая, 2010 - 11:27:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




altermann Если уж не делать перенаправление через HTTP-заголовок Location - то тогда лучше сделать его с помощью JS - причим выражение с установкой нового адреса должно быть внутри функции которая вызывается через очень малое время - это дает гарантию что event-модель подгрузиться до конца и такое присвоение не вызовет ошибку Переход отменен


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB