Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / как бороться с обновлением страницы / 10 сообщений из 10, страница 1 из 1
12.03.2014, 13:56
    #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
12.03.2014, 14:08
    #38584003
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как бороться с обновлением страницы
andron81,

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

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

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

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

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



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

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


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

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

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

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

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

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



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

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

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


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