Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/149: Рейтинг темы: голосов - 149, средняя оценка - 4.93
 Аватар для Pafos
97 / 97 / 17
Регистрация: 18.10.2009
Сообщений: 453

Повторный POST при обновлении страницы

13.01.2011, 14:30. Показов 30915. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возникла такая проблема:
Есть форма, которая добавляет данные в mysql, после чего чуть ниже они(данные) и выводятся...
Всё работает, всё хорошо, но если, после добавления данных, в браузере нажать "обновить" - новость добавляется заново, это при том, что форма пуста, то есть в $_POST остаются предыдущие данные...
Прописал unset($_POST) - не помогает, помогите в решении проблемы...
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.01.2011, 14:30
Ответы с готовыми решениями:

Повторение POST запроса при обновлении страницы
Доброе время суток, может кто-нибудь подсказать можно ли избавиться от повторного отправления POST запроса при обновлении страницы ? Тоесть...

Запретить повторную отправку POST запроса при обновлении страницы
Вопрос немного нубский... Но есть страница с формой, юзер вводит какие то данные, и при нажатии на кнопку происходит отправка POST...

Повторная отправка формы POST при обновлении
Добрый день, Форумчане На сайте есть форма отправки данных в БД через POST, при обновлении данные повторно отправляются. Пробовал...

10
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
13.01.2011, 14:37
Лучший ответ Сообщение было отмечено как решение

Решение

Я в начале скрипта (до первого echo) получаю все данные из $_POST, записываю их в БД (или куда ещё надо). И после этого выполняю
PHP
1
2
header("Location: http://мой сайт/скрипт.php");
exit;
В результате, браузер перенаправляется уже на эту же страницу, но без POST. И теперь если обновить, то ничего передаваться скрипту не будет.
Если уже какие-то данные были отправлены браузеру, тогда header() не сработает. Тут можно либо в самом начале скрипта выполнить
PHP
1
ob_start();
либо сделать перенаправление средствами JavaScript:
JavaScript
1
location.href="/скрипт.php";
Получится такое же перенаправление. Но первый вариант надёжнее, т.к. JS может быть выключен в браузере.
4
 Аватар для Pafos
97 / 97 / 17
Регистрация: 18.10.2009
Сообщений: 453
13.01.2011, 14:56  [ТС]
Humanoid, ща попробую, хотя мне кажется должен существувать вариант попроще...
Я помню была функция похожа на unset, не могу найти...

Добавлено через 11 минут
Юзаю Яндекс, нашел такие же темы как у меня, решении одни, как сказал Humanoid, после добавления делать переадресацию на страницу...
Ладно, не буду заморачиваться, буду реализовать это так:
Цитата Сообщение от Humanoid Посмотреть сообщение
PHP
1
2
header("Location: http://мой сайт/скрипт.php");
exit;
Humanoid, спасибо за помощь!
0
mr.Greed
21.03.2011, 13:18
А почему не использовать
PHP
1
unset($_POST);
?
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
21.03.2011, 14:10
mr.Greed, а как определить, был ли этот $_POST нужным или это обновление страницы?
0
mr.Greed
23.03.2011, 06:37
..ну так а надо?,. если я правильно понял - речь идет о ситуации когда одна и тажи страница и отправляет и получает данные.. в начале мы обработаем полученный пост ,, а потом - зачистим..без повторной отправки данных страница у нас получать ничо не будет.. я так сделал - вроде бы работает ..
84 / 84 / 8
Регистрация: 12.04.2010
Сообщений: 324
23.03.2011, 07:26
Если сессии используются на сайте то можно записать информацию об отправке в сессию... не делал так, но думаю тоже варант
1
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 829
Регистрация: 09.09.2009
Сообщений: 29,554
17.06.2013, 19:01
думаю сделать так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
session_start();
$ses_id = session_id();
if (isset($_COOKIE['myid']) and $_COOKIE['myid'] == $ses_id) {
 
    //  тут делаем что угодно, кроме записи, 
    //  т.к. есть кука в которую вписан ид сессии,
    //  и он совпал с текущим значением ид сессии
 
} else {
    // производим запись в базу, проверяем результат, 
    // и если успешно,  то пишем в куку текущий ид сессии:
 
    SetCookie("myid",$ses_id,time()+86400);
}
?>
В итоге на время действия сессии как мне кажется повторная запись в базу не произойдет...
1
Заблокирован
17.06.2013, 19:23
Цитата Сообщение от Dmitry Посмотреть сообщение
Кликните здесь для просмотра всего текста
думаю сделать так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
session_start();
$ses_id = session_id();
if (isset($_COOKIE['myid']) and $_COOKIE['myid'] == $ses_id) {
 
    //  тут делаем что угодно, кроме записи, 
    //  т.к. есть кука в которую вписан ид сессии,
    //  и он совпал с текущим значением ид сессии
 
} else {
    // производим запись в базу, проверяем результат, 
    // и если успешно,  то пишем в куку текущий ид сессии:
 
    SetCookie("myid",$ses_id,time()+86400);
}
?>
В итоге на время действия сессии как мне кажется повторная запись в базу не произойдет...
ОТКУДА ВЫ ТАКИЕ БЕРЕТЕСЬ??
0
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
17.06.2013, 19:33
Цитата Сообщение от Dmitry Посмотреть сообщение
В итоге на время действия сессии как мне кажется повторная запись в базу не произойдет...
А вдруг надо будет ещё один запрос отправить в течении этих суток?

Кстати, это не на время сессии, а на 24 часа. Что бы установить куки на сессию, третий аргумент надо пропустить или указать ноль.
Тьфу... не эту сессию имел ввиду. Ты про сессию PHP, а я про сессию куков
1
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 829
Регистрация: 09.09.2009
Сообщений: 29,554
17.06.2013, 19:41
то, что я куки ставлю на сутки, я понимаю.
Цитата Сообщение от Humanoid Посмотреть сообщение
Кстати, это не на время сессии
просто у сервера есть срок жизни именно сессии, и он меньше 24 часов.
Цитата Сообщение от Humanoid Посмотреть сообщение
А вдруг надо будет ещё один запрос отправить в течении этих суток?
тут специфика задачи такова, что в результате клиенту выдается пароль на год. Перед этой страницей (пишущей в базу и т.д.) клиент заполняет форму. И весь огород для того, чтоб не генерить ему новый пароль, не писать его в базу и не отсылать его

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от Alex_Ander Посмотреть сообщение
ОТКУДА ВЫ ТАКИЕ БЕРЕТЕСЬ??
тебе объяснение начинать с тычинок и пестиков, или эту часть можно опустить?

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.06.2013, 19:41
Помогаю со студенческими работами здесь

Переадресация при обновлении страницы
Добрый день. Есть две страницы. На одной происходит указание имени и e-mail. После нажатия на кнопку Submit - происходит перенаправление...

Показать id при обновлении страницы
Есть кнопка, нажимая на неё меняется URl без перезагрузки $('.knopka').click(function(event){ url = '?id=1'; ...

как сделать чтобы при при обновлении страницы (header('location .');) попадать на ту же позицию
Например у меня есть длинный список записей, под каждой записью кнопка удалить, когда нажимаешь на нее, то происходит удаление записи и...

При обновлении страницы исчезает сессия
Доброго времени суток!... На форме входа ввожу почту, пароль. Вход происходит, почта заносится в $_SESSION (проверял...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru