powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / как бороться с обновлением страницы
10 сообщений из 10, страница 1 из 1
как бороться с обновлением страницы
    #38583984
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый всем день.

вопрос следующий:
вот есть элементарный скриптец
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<?php

require_once('cfg.php');  

if isset($_REQUEST['VALUE']) {
$db->query("insert test (text) values(?)",array($_REQUEST['VALUE']));
}
echo('<form>');
echo('<input type="text" name="VALUE">');
echo('<input type="submit" name="OK">');

echo('</form>');

?>




работает понятно как : пользователь вводит в поле значение , по кнопке OK происходит сабмит, значение прописывается в базу.
Всё хокей, но как я должен модифицировать скрипт , чтобы предотвратить insert после обновления странички , то есть при нажатия Ctrl + r или Ctrl + F5 . Даже не знаю как подступиться к проблеме.

То есть если мы введём скажем в наше поле значение Репка, нажмем сабмит, то это значени пропишется в базу.
А потом если нажимать Ctrl + r или trl + F5 Репка будет прописывать всякий раз.
...
Рейтинг: 0 / 0
как бороться с обновлением страницы
    #38584003
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

header('Location');
а также можно сделать токен для формы.
...
Рейтинг: 0 / 0
как бороться с обновлением страницы
    #38584008
andron81,

Здесь, чтобы предотвратить двойную запись на до пользоваться CSRF

Ну, а в более общем случае браузер всегда спрашивает, нужно ли отправить данные повторно. Даже IE
...
Рейтинг: 0 / 0
как бороться с обновлением страницы
    #38584011
r u
header('Location');
а также можно сделать токен для формы.

заставлять браузер грузиться дважды - немного накладно ИМХО
...
Рейтинг: 0 / 0
как бороться с обновлением страницы
    #38584017
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Седоченкозаставлять браузер грузиться дважды
чего?
...
Рейтинг: 0 / 0
как бороться с обновлением страницы
    #38584028
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Седоченкоandron81,

Здесь, чтобы предотвратить двойную запись на до пользоваться CSRF



А поподробнее ?
...
Рейтинг: 0 / 0
как бороться с обновлением страницы
    #38585933
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r uandron81,

header('Location');
а также можно сделать токен для формы.


я так понимаю это 2 разных способа. поясните поподробнее плз
о каждом
...
Рейтинг: 0 / 0
как бороться с обновлением страницы
    #38586313
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

Вариантов уйма:
1. обычный location (заставляя браузер перегрузить страницу, потому обновление на ctrl+f5 не будет отправлять форму снова).

2. пишем в скрытое поле формы некое ("достаточно" уникальное) значение и переносим его в сессию. при сохранении данных удаляем из сессии значение равное значению скрытого поля. Итак, если в какой-то момент оказывается ,что в сессии нету нужного значения, значит мы его уже удалили, а значит форма пытается пересохраниться. Не круть в методе то, что даже когда форма сохраняться больше не будет, браузер всёровно будет спрашивать "отправить форму ещё раз?"

3. Как по мне с появлением удобного интерфейса для работы по ajax (и фреймворка jquery) это самый удобный способ: сохраняем данные через ajax, если сохранение успешное - перенаправляем на нужную страницу результата (только уже не отправляя никаких форм разумеется). Если же операция записи по некой причине провалилась - выводим соответствующую инфу пользователю. Недостаток - сложность отправки файлов, так как они отправляются только в формах и вручную небезопасный двоичный поток на сервер передать нельзя. Не знаю, может сейчас уже решили это (давно не занимался такими изворотами), но раньше это решалось просто отправкой той самой формы через iframe.

Чаще всего используют первый и третий вариант. Второй мне лично не нравится, просто видел такой :)
...
Рейтинг: 0 / 0
как бороться с обновлением страницы
    #38586441
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрandron81,

Вариантов уйма:
1. обычный location (заставляя браузер перегрузить страницу, потому обновление на ctrl+f5 не будет отправлять форму снова).



А понятно: я инсерчу и делаю header('Location'); . Недостаков я прямо-таки и не вижу :)
...
Рейтинг: 0 / 0
как бороться с обновлением страницы
    #38586777
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

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

Первый момент не значителен (не думаю что юзер заметит разницу, если в силу пинга время ожидания составит не 100-200мс, а 200-400мс). А второй, скорее высосан из пальца (но почему-то, видимо из-за полного невежества некоторых особей, в некоторых источниках это пишется с "!!!")
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / как бороться с обновлением страницы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]