|
|
|
| Заморочился с гостевой книгой (добью баг и покажу общественности).
Ситуация, скорее всего, всем знакомая - переменная массива $_POST при обновлении окна броузера не обнуляется и скрипт обрабатывает ее снова, то есть, всякий желающий может нажатием F5 зафлудить гостевуху до неузнаваемости.
Однажды я это уже поборол при помощи сессий, но в этот раз хочу узнать, нет ли еще способа? Или руно не стоит скорняжных работ? | |
|
|
|
|
|
|
|
для: DJ Paltus
(02.07.2006 в 15:04)
| | Зачем сессии?
# Обработка переменных $_POST
# ...
header("Location: mypage.php");
exit();
|
| |
|
|
|
|
|
|
|
для: 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 таки повторяется скрипт. | |
|
|
|
|
|
|
|
для: DJ Paltus
(02.07.2006 в 16:04)
| | Хедеры должны отсылаться до вывода какой-либо информации в выходной поток.
>Warning: Cannot modify header information - headers already
>sent by (output started at z:homegbookwwwgbook.php:30)
Значит, в 30 строке начат вывод. | |
|
|
|
|
|
|
|
для: cyberface
(02.07.2006 в 16:22)
| | тогда этот способ совсем не подходит - эта гостевуха должна быть модулем, свободно встраиваемым в тело любого сайта.
со своим заголовком в чужой монастырь ))) | |
|
|
|
|
|
|
|
для: DJ Paltus
(02.07.2006 в 16:29)
| | просто сделай файл на добавление типа add.php пост отправляй туда, и при добавлении хеадером возращайся обратно
в этом отдельном файле можещь и с сессиями работать | |
|
|
|
|
|
|
|
для: DJ Paltus
(02.07.2006 в 15:04)
| | Нужно просто осуществить программно перезагрузить страницу, чтобы были сброшены POST-данные, например, так
<?php
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=$_SERVER[PHP_SELF]'>
</HEAD></HTML>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(03.07.2006 в 00:27)
| | Ну я чуть выше говорил. что страницу перезагружать моему скрипту нельзя - это встраиваемый модуль, не его это дело.
Я просто-напросто решил проверять наличие 100% совпадающей записи (дата, имя, текст) в базе и тупо не размещать, если она такая же.
Мотивация такая - если это новый вопрос, то пусть он о том же, добуквенно он точно так же выглядеть не будет, а если это спам-робот залез второй раз за день, или кнопку F5 заело, то пусть хоть упишутся. | |
|
|
|
|
|
|
|
для: DJ Paltus
(03.07.2006 в 03:10)
| | а это тут при чем? пусть редиректит сама на себя... | |
|
|
|
|
|
|
|
для: DJ Paltus
(03.07.2006 в 03:10)
| | Ну, как вариант, если нужно уникальное поле типа SESSIONID, воткнуть hidden поле, которое генерить скриптом...
типа
echo "<input name=\"hash\" type=\"hidden\" value=\"".md5(mt_rand(0,65535)+microtime())."\">";
|
получится хрень типа
hash=1b1a7277cebff1fc2c0c8aa789c70d21
и по ней уже смотреть... | |
|
|
|
|
|
|
|
для: Illuminare
(03.07.2006 в 14:18)
| | Ну нет, эта-то хрень один раз ввелась и так и осталась - обратно к форме я не возвращаюсь, обновляется скрипт обработки уже висящих в массиве $_POST данных. А значит, раз установленный хэш так и будет повторяться.
Я вообще склонен считать, что проблема на данном этапе исчерпана проверкой на наличие дублирующей записи.
Всем спасибо. | |
|
|
|