greg77
Новичок
Дата регистрации:
03.12.2012 15:08:12
Сообщений: 4
Взяв за основу курс Михаила о создании простого сайта на РНР, в качестве практики, мною написан код добавления комментариев к статье на локальном сервере. Статья и комментарии расположены на одной и той же странице. В принципе все работает, комментарии добавляются и отображаются корректно. Проблема в том, что происходит повторное добавление того же самого комментария при обновлении страницы если нажать на кнопку "Обновить текущую страницу" в браузере без добавления в поля формы нового(какого-либо) комментария. При этом выскакивает окно с текстом "... , Firefox должен отправить информацию, которая повторит предыдущую..." и если продолжить и в появившемся окне нажать на кнопку "Отправить заново", - добавится прежний комментарий несмотря на то, что, как я сказал, поля формы оставались пустыми.
В то же время, при попытке решить проблему приведенным ниже способом и сделать редирект на ту же страницу, то после отсылки данных в БД таким образом:
if ('если добавился комментарий нормально') {
header('Location: .../samepage_name.php');
exit ();
}
появляется следующий текст:
Warning: Cannot modify header information - headers already sent by (output started at S:\home\localhost\www\shop\views\layouts\main.php:13) in S:\home\localhost\www\shop\views\pages\karc_templ.php on line 36
Конструкция сайта проста:
index.php:
include //подключаем главную страницу сайта - main.php
main.php:
include //подключаем хедер
include //подключаем нужную страницу
include //подключаем футер
karc_templ.php - шаблон на котором находится форма и подключаемый к странице karc.php;
karc.php - страница подключаемая в нужное время к странице main.php
Подскажите пожалуйста каким образом решается данная проблема в принципе, и, если можно - приведите код(ы) решения. Если для решения вопроса нужно представить скрипт(ы) - пожалуйста напишите.
mischa.samolkaev
Продвинутый
Дата регистрации:
12.07.2012 13:00:02
Сообщений: 74
Насколько я понял, скрипт добавления комментариев находится в одном файле с самой статьей, в которой эти комментарии добавляются.
Решения 2:
1.Разделить эти файлы. В одном отправка, в другом обработка.
2.Очищать $_REQUEST в начале работы:
<?php
unset($_REQUEST);
//Дальше ваш код
//|
//|
//|
//|
//|
?>
greg77
Новичок
Дата регистрации:
03.12.2012 15:08:12
Сообщений: 4
Большое спасибо за желание помочь!
Попробовал оба метода - опять то же самое...
Привожу то, что выскакивает после нажатия на иконку "обновить страницу":
"Чтобы отобразить эту страницу, Firefox должен отправить информацию, которая повторит любое ранее произведенное действие (например, запрос на поиск или онлайн-покупка)."
Дорогие друзья!
Ну что, так и не поможете решить эту, для кого-то очень простую, а для меня, пока что, неразрешимую задачу?...
alexandrdante
Модератор
Дата регистрации:
15.11.2013 15:33:40
Сообщений: 207
открыть сессию - закрыть сессию.
уничтожить содержание после публикации
Всё,вроде,просто
greg77
Новичок
Дата регистрации:
03.12.2012 15:08:12
Сообщений: 4
Спасибо за отклик, но, если не затруднит, не подскажете - где это следует сделать (в каком месте и в каком файле)? В том файле где пропсана форма и отправлен запрос на добавление коммента (а это файл-шаблон) или в том файле в котором вызывается/подключается файл-шаблон? Спрашиваю потому, что справочниках по сессиям написано: не выводите данные в браузер до использования функции session_start(), иначе она выдаст ошибку. Но ведь мне же нужно, в любом случае, вывести форму, как же тогда тут быть?
И еще - я конечно же обязательно поробую дополнить скрипт согласно Вашей рекомендации и, правильно ли я понял, что Вы имели ввиду уничтожение всех данных в $_SESSION...?
e-five
Новичок
Дата регистрации:
18.07.2013 20:22:50
Сообщений: 2
Здравствуйте! Предлагаю один интересный метод, я сам его использую.
При отображении страницы в своей форме создайте скрытое поле ввода,
в котором содержится некий числовой ключ, и добавьте этот же ключ в
сессии. То есть вот так:
<?php
session_start();
if($_SESSION['key']==$_POST['key']){
//прислали форму здесь обработка формы
}
//И отображаем саму форму
$key = rand(111,999); //генерируем числовой ключ
$_SESSION['key']=$key; //заносим ключ в сессии
?>
<!--HTML-->
<!--и в форму добавляем поле-->
<input type="hidden" name="key" value="<?php echo $key ?>" />
По сути алгоритм такой же как у капчи, разница в том, что ее вводит не пользователь,
и она как бы уже введена.
P.S. В коде могут быть ошибки, особо не проверял, писал быстро