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

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

13.01.2011, 14:30. Показов 30968. Ответов 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
11557 / 4352 / 452
Регистрация: 12.06.2008
Сообщений: 12,454
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
11557 / 4352 / 452
Регистрация: 12.06.2008
Сообщений: 12,454
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 / 830
Регистрация: 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
11557 / 4352 / 452
Регистрация: 12.06.2008
Сообщений: 12,454
17.06.2013, 19:33
Цитата Сообщение от Dmitry Посмотреть сообщение
В итоге на время действия сессии как мне кажется повторная запись в базу не произойдет...
А вдруг надо будет ещё один запрос отправить в течении этих суток?

Кстати, это не на время сессии, а на 24 часа. Что бы установить куки на сессию, третий аргумент надо пропустить или указать ноль.
Тьфу... не эту сессию имел ввиду. Ты про сессию PHP, а я про сессию куков
1
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru