<MyRusakov.ru />

Создание крупного проекта на Java с нуля

Создание крупного проекта на Java с нуля

Данный курс научит Вас создавать крупные проекты на Java грамотно и быстро. В курсе Вы увидите создание большой и сложной программы на Java абсолютно с нуля.

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

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

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Форум сайта MyRusakov.ru

Повторное добавление комментария при нажатии на кнопке обновить страницу.
26.03.2014 10:42:40 Повторное добавление комментария при нажатии на кнопке обновить страницу. Сообщение #1
greg77

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
Подскажите пожалуйста каким образом решается данная проблема в принципе, и, если можно - приведите код(ы) решения. Если для решения вопроса нужно представить скрипт(ы) - пожалуйста напишите.
Профиль Ответить
27.03.2014 11:42:45 Повторное добавление комментария при нажатии на кнопке обновить страницу. Сообщение #2
mischa.samolkaev

mischa.samolkaev

Продвинутый

Продвинутый

Дата регистрации:
12.07.2012 13:00:02

Сообщений: 74

Насколько я понял, скрипт добавления комментариев находится в одном файле с самой статьей, в которой эти комментарии добавляются.
Решения 2:
1.Разделить эти файлы. В одном отправка, в другом обработка.
2.Очищать $_REQUEST в начале работы:

<?php
unset($_REQUEST);
//Дальше ваш код
//|
//|
//|
//|
//|
?>
Профиль Ответить
27.03.2014 15:58:49 Повторное добавление комментария при нажатии на кнопке обновить страницу. Сообщение #3
greg77

greg77

Новичок

Новичок

Дата регистрации:
03.12.2012 15:08:12

Сообщений: 4

Большое спасибо за желание помочь!
Попробовал оба метода - опять то же самое...

Привожу то, что выскакивает после нажатия на иконку "обновить страницу":
"Чтобы отобразить эту страницу, Firefox должен отправить информацию, которая повторит любое ранее произведенное действие (например, запрос на поиск или онлайн-покупка)."

Дорогие друзья!
Ну что, так и не поможете решить эту, для кого-то очень простую, а для меня, пока что, неразрешимую задачу?...
Профиль Ответить
30.03.2014 00:46:54 Повторное добавление комментария при нажатии на кнопке обновить страницу. Сообщение #4
alexandrdante

alexandrdante

Модератор

Модератор

Дата регистрации:
15.11.2013 15:33:40

Сообщений: 207

открыть сессию - закрыть сессию.
уничтожить содержание после публикации

Всё,вроде,просто
Профиль Ответить
30.03.2014 12:34:04 Повторное добавление комментария при нажатии на кнопке обновить страницу. Сообщение #5
greg77

greg77

Новичок

Новичок

Дата регистрации:
03.12.2012 15:08:12

Сообщений: 4

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

И еще - я конечно же обязательно поробую дополнить скрипт согласно Вашей рекомендации и,  правильно ли я понял, что Вы имели ввиду уничтожение всех данных в $_SESSION...?
Профиль Ответить
03.04.2014 17:09:10 Повторное добавление комментария при нажатии на кнопке обновить страницу. Сообщение #6
e-five

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. В коде могут быть ошибки, особо не проверял, писал быстро
Профиль Ответить