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

Форум PHP

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

 

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

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

тема: Можно ли без сессий исключить повторную отправку данных формы?
 
 автор: DJ Paltus   (02.07.2006 в 15:04)   письмо автору
 
 

Заморочился с гостевой книгой (добью баг и покажу общественности).
Ситуация, скорее всего, всем знакомая - переменная массива $_POST при обновлении окна броузера не обнуляется и скрипт обрабатывает ее снова, то есть, всякий желающий может нажатием F5 зафлудить гостевуху до неузнаваемости.

Однажды я это уже поборол при помощи сессий, но в этот раз хочу узнать, нет ли еще способа? Или руно не стоит скорняжных работ?

   
 
 автор: JIEXA   (02.07.2006 в 15:33)   письмо автору
 
   для: DJ Paltus   (02.07.2006 в 15:04)
 

Зачем сессии?

# Обработка переменных $_POST
# ...
header("Location: mypage.php");
exit();

   
 
 автор: DJ Paltus   (02.07.2006 в 16:04)   письмо автору
 
   для: JIEXA   (02.07.2006 в 15:33)
 

На это мне говорят, что заголовок уже послан и изменить его нельзя.
Warning: Cannot modify header information - headers already sent by (output started at z:\home\gbook\www\gbook.php:30) in z:\home\gbook\www\gbook.php on line 48
И соответственно при нажатии F5 таки повторяется скрипт.

   
 
 автор: cyberface   (02.07.2006 в 16:22)   письмо автору
 
   для: DJ Paltus   (02.07.2006 в 16:04)
 

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

>Warning: Cannot modify header information - headers already
>sent by (output started at z:homegbookwwwgbook.php:30)

Значит, в 30 строке начат вывод.

   
 
 автор: DJ Paltus   (02.07.2006 в 16:29)   письмо автору
 
   для: cyberface   (02.07.2006 в 16:22)
 

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

   
 
 автор: himic   (02.07.2006 в 18:33)   письмо автору
 
   для: DJ Paltus   (02.07.2006 в 16:29)
 

просто сделай файл на добавление типа add.php пост отправляй туда, и при добавлении хеадером возращайся обратно
в этом отдельном файле можещь и с сессиями работать

   
 
 автор: cheops   (03.07.2006 в 00:27)   письмо автору
 
   для: DJ Paltus   (02.07.2006 в 15:04)
 

Нужно просто осуществить программно перезагрузить страницу, чтобы были сброшены POST-данные, например, так
<?php
    
echo "<HTML><HEAD>
          <META HTTP-EQUIV='Refresh' CONTENT='0; URL=
$_SERVER[PHP_SELF]'>
          </HEAD></HTML>"
;
?>

   
 
 автор: DJ Paltus   (03.07.2006 в 03:10)   письмо автору
 
   для: cheops   (03.07.2006 в 00:27)
 

Ну я чуть выше говорил. что страницу перезагружать моему скрипту нельзя - это встраиваемый модуль, не его это дело.
Я просто-напросто решил проверять наличие 100% совпадающей записи (дата, имя, текст) в базе и тупо не размещать, если она такая же.
Мотивация такая - если это новый вопрос, то пусть он о том же, добуквенно он точно так же выглядеть не будет, а если это спам-робот залез второй раз за день, или кнопку F5 заело, то пусть хоть упишутся.

   
 
 автор: Loki   (03.07.2006 в 10:05)   письмо автору
 
   для: DJ Paltus   (03.07.2006 в 03:10)
 

а это тут при чем? пусть редиректит сама на себя...

   
 
 автор: Illuminare   (03.07.2006 в 14:18)   письмо автору
 
   для: DJ Paltus   (03.07.2006 в 03:10)
 

Ну, как вариант, если нужно уникальное поле типа SESSIONID, воткнуть hidden поле, которое генерить скриптом...
типа

echo "<input name=\"hash\" type=\"hidden\" value=\"".md5(mt_rand(0,65535)+microtime())."\">";

получится хрень типа
hash=1b1a7277cebff1fc2c0c8aa789c70d21
и по ней уже смотреть...

   
 
 автор: DJ Paltus   (03.07.2006 в 16:02)   письмо автору
 
   для: Illuminare   (03.07.2006 в 14:18)
 

Ну нет, эта-то хрень один раз ввелась и так и осталась - обратно к форме я не возвращаюсь, обновляется скрипт обработки уже висящих в массиве $_POST данных. А значит, раз установленный хэш так и будет повторяться.

Я вообще склонен считать, что проблема на данном этапе исчерпана проверкой на наличие дублирующей записи.
Всем спасибо.

   
Rambler's Top100
вверх

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