[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Защита POST от обновления страницы
SnowWind
Всем привет.

Форма отправляет данные в скрипт
Скрипт обрабатывает и записывает в базу
После чего выводит сообщение об обновлённых данных и ссылку для перехода на новую страницу в виде формы

$massage = '<h3>Начальные параметры установлены</h3>
<p>Ловкость - '
.$dexterity.'</p>
<p>Сила - '
.$power.'</p>
<p>Навык - '
.$skill.'</p>
<form action="'
.$link.'" method="post">
<input type="submit" value="Старт">
</form>'
;


Что бы защитить БД от повторного обновления, решил сделать переадресацию
header("Location: ".$_SERVER['REQUEST_URI']);
die();


Но в этом случае сообщение об обновлённых значениях не выводится, как его передать методом post в момент переадресации?

Пробовал get
header("Location: ".$_SERVER['REQUEST_URI']."?massage=".$massage);

но он не отправляет столько символов
Valick
Цитата (SnowWind @ 3.04.2016 - 11:18)
как его передать методом post в момент переадресации?

используй сессию

_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
Цитата (SnowWind @ 3.04.2016 - 12:18)
Но в этом случае сообщение об обновлённых значениях не выводится, как его передать методом post в момент переадресации?

Пробовал get

header("Location: ".$_SERVER['REQUEST_URI']."?massage=".$massage);

Используй header( 'Refresh: .....' ) http://php.net/manual/ru/function.header.php (ищи по слову refresh). Указав время до обновления, ты имеешь возможность вывести сообщение и даешь возможность человеку прочитать его. Можно также сделать ссылку для перехода, чтобы можно было ее кликнуть, не дожидаясь автоматического перехода. Можно также сделать на JS таймер обратного отсчета... Короче говоря, можно "сделать конфетку" smile.gif
Кстати говоря, именно эта методика используется на этом форуме при отправке или редактировании сообщений.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Valick
Цитата (sergeiss @ 3.04.2016 - 12:13)
Кстати говоря, именно эта методика используется на этом форуме

ага, и жутко бесит

_____________
Стимулятор ~yoomoney - 41001303250491
SnowWind
Нет header( 'Refresh: .....' ) не подходит, т.к всё равно пользователь может нажимать f5 и данные будут переопределяться
sergeiss
Цитата (SnowWind @ 3.04.2016 - 13:46)
Нет header( 'Refresh: .....' ) не подходит, т.к всё равно пользователь может нажимать f5 и данные будут переопределяться

Значит, ты неправильно используешь эту фичу. Эта хрень как раз позволяет избежать проблем с обновлением.
Показывай свой код, использующий refresh, будем думу думать smile.gif

Цитата (Valick @ 3.04.2016 - 13:24)
ага, и жутко бесит

Чем именно бесит?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
SnowWind
if (isset($start))
{

// Запись в базу

$massage = '<h3>Начальные параметры установлены</h3>
<p>Ловкость - '
.$dexterity.'</p>
<p>Сила - '
.$power.'</p>
<p>Навык - '
.$skill.'</p>
<form action="'
.$link.'" method="post">
<input type="submit" value="Старт">
</form>'
;
echo $massage;
header("refresh:5;url==".$link);
die();
}
Valick
Цитата (sergeiss @ 3.04.2016 - 13:10)
Чем именно бесит?

излишнее переморгивание страниц

SnowWind, есть такая штука как логирование, писать лог можно не только ошибок, но и других действий. Нет ничего проще при перенаправлении передать параметром гет статус операции и достать из лога нужную информацию для отображения на странице.
А еще спецом для таких раздражительных как я был придуман AJAX и тому подобные технологии.
___
будь моя воля, я бы за рефреш расстреливал бы деревянными пулями.

_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
Цитата (SnowWind @ 3.04.2016 - 14:28)
header("refresh:5;url==".$link);

Если ты внимательно посмотришь по ссылке на хэлп, что я дал, то увидишь, что там не 2 знака равно, а один.

Цитата (Valick @ 3.04.2016 - 15:15)
Цитата (sergeiss @ 3.04.2016 - 13:10)
Чем именно бесит?

излишнее переморгивание страниц

Ну дык... Если правильно использовать, то не будет моргать, а будет что-нибудь красивое показывать smile.gif Опять же, можно по ссылке кликнуть - если её предоставили, естественно.

Цитата (Valick @ 3.04.2016 - 15:15)
А еще спецом для таких раздражительных как я был придуман AJAX и тому подобные технологии.

Для начала человек пусть поймет, как без аякса сделать. С ним потом разобраться успеет.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
SnowWind
Хорошо
header("refresh:5;url=".$link);

так тоже, до переадресации, если нажимать f5, то данные обновляются
bestxp
Вообще все просто

Сессия и в ней например массив сообщений

ты можешь туда положить и сделать Header( Location )
на целевой странице достаешь все сообщения и стираешь их сразу на целевой странице
в итоге у тебя защита от F5 и выведено сообщение =)
sergeiss
Цитата (SnowWind @ 4.04.2016 - 10:54)
так тоже, до переадресации, если нажимать f5, то данные обновляются

Насколько часта ситуация, что юзер нажимает кнопку "Отправить" и тут же, в течение нескольких секунд, жмякает Ф5? Если таких много, то используй сессию или аякс smile.gif Но мне что-то так кажется, что это чрезвычайно редкая ситуация.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
SnowWind
в той специфике где будет работать скрипт, только юзер узнает об этом, будет жмакать до посинения smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.