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

Форум PHP

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

 

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

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

тема: очистить форму или спастись от флуда
 
 автор: vorobey   (11.02.2009 в 00:35)   письмо автору
 
 

на первой странице есть ФОРМА которая отправляет данные (сообщение итп)
если вводятся не все данные, то на второй странице выводится сообщение отом что "вернись назад и введи как положено". Соотвецтвенно чел жмет на СТРЕЛКУ назад и заполняет все как надо далее жмет ОК и информация добавляется в базу (человеку выдается сообщение с его логином и паролем для редактирования его инф.)
Но если в этот момент он нажимает на СТРЕЛКУ назад -появляется заполненоя форма ,он может нажать еще раз ОК и плодит в базу сообщения
спомощью чего можно это все красиво оформить?
вот несколько вариантов точнее 2
- если информация введена правильно, и если жмет назад ФОРМА должна очищатся
- если невсе поля в форме заполнены то очищатся она недолжна
- если информация введена правильно, и если жмет назад то человека должно перенаправлять на главную страницу или др

вобщем необходимо спастись от флуда. Может кто чтото предолжет иное чем то что я написал- цель недать случайно наплодить постов.


или можнт если данным пользователем заполнена форма правильно , то недать ему в течении скажем 5 минут добавлять сообщение

  Ответить  
 
 автор: DEM   (11.02.2009 в 01:55)   письмо автору
 
   для: vorobey   (11.02.2009 в 00:35)
 

просто если всё норм создавайте сессию:
session_register("time");
$_SESSION['time'] = time();

а потмо каждый раз при добавлении еще проверяйте, что-то вроде:
if($_SESSION['time']+36000>=time())
{
exit("Сколько можно добавлять сообщения?");
}


ну или в сессии можно хранить данные из какого-либо поля, которое вводил пользователь, а потом, опять же, сравнивать.

  Ответить  
 
 автор: Trianon   (11.02.2009 в 09:19)   письмо автору
 
   для: vorobey   (11.02.2009 в 00:35)
 

> - если информация введена правильно, и если жмет назад ФОРМА должна очищатся
> - если информация введена правильно, и если жмет назад то человека должно перенаправлять на главную страницу или др

и то и другое делается путем редиректа. header("Location: / "); exit();

>или можнт если данным пользователем заполнена форма правильно , то недать ему в течении скажем 5 минут добавлять сообщение

а здесь - да, сессия. Только на 300 секунд, а не на 36000.

  Ответить  
 
 автор: goodwilll   (11.02.2009 в 13:53)   письмо автору
 
   для: Trianon   (11.02.2009 в 09:19)
 

Trianon, а после header ставить exit обязательно нужно или на всякий случай? Разве выполнение скрипта не прерывается при header? Я его тоже всегда ставлю, но так и не знаю обязателен он или нет.. Пользуясь случаем решил спросить )

  Ответить  
 
 автор: Trianon   (11.02.2009 в 18:14)   письмо автору
 
   для: goodwilll   (11.02.2009 в 13:53)
 

Выполнение скрипта не прерывается при header()
Более того, непосредственно вызов header даже поля заголовка не отправляет.
Он лишь добавляет поле в список.

Программисту может понадобиться поставить несколько полей.
И что будет если после первого же вызова прервется скрипт?

  Ответить  
 
 автор: Rembrant   (11.02.2009 в 18:28)   письмо автору
 
   для: Trianon   (11.02.2009 в 18:14)
 

а я не ставлю exit() O_o и все нормально....

  Ответить  
 
 автор: sim5   (11.02.2009 в 18:31)   письмо автору
 
   для: Rembrant   (11.02.2009 в 18:28)
 

Смотря какая ситуация. Например, если вы отдаете в контейнер браузера (фрейм), а далее идет код, то это будет равноценно как сделать переход бросив все - браузер получит исключение в этом случае.

  Ответить  
 
 автор: Trianon   (11.02.2009 в 18:52)   письмо автору
 
   для: Rembrant   (11.02.2009 в 18:28)
 

Я рад за Вас.

  Ответить  
 
 автор: nikita2206   (11.02.2009 в 19:32)   письмо автору
 
   для: vorobey   (11.02.2009 в 00:35)
 

проще всего, я думаю, так:
1. Когда юзер открывает отправление сообщения, то скрипт выдает ему форму, в которой есть поле hidden и в нём записано некое значение(лучше всего если это значение будет примерно таким: md5(mt_rand(100, 1000))) и это значение записывается в сессию...
2. Когда юзер отправляет форму, на сервере идёт проверка, ровна ли сессийная переменная значению поля hidden... Если ровна, то происходит дальнейшая инициализация\отправка и переходим к пункту 3..... Если не ровна то показываем соответственное сообщение....
3. Если две переменных были ровны, то после отправки данных можно(даже нужно) стереть сессийную переменную....

  Ответить  
 
 автор: Loki   (11.02.2009 в 21:28)   письмо автору
 
   для: nikita2206   (11.02.2009 в 19:32)
 

А почему она будет не равна?

  Ответить  
 
 автор: nikita2206   (12.02.2009 в 20:18)   письмо автору
 
   для: Loki   (11.02.2009 в 21:28)
 

потому что если юзверь обновит страницу, на которой браузер отправляет данные с текстом, то, опятьже если, hidden поле будет равно сессийной переменной то добавление продолжится и из сессии удалится переменная....

  Ответить  
 
 автор: Loki   (13.02.2009 в 09:43)   письмо автору
 
   для: nikita2206   (12.02.2009 в 20:18)
 

Вы на мой вопрос не ответили

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

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