Подскажите, возможно ли средствами php определить - что загрузка страницы началась после нажатия на кнопку "Назад" в броузере. Заранее спасибо.
Vladislav_Yushkin И откуда чаще всего эта страница загружается? И чем она отличается от самой себя, но не после нажатия кнопки "назад"?
Дело в том, что на странице выполняются некоторые запросы с помощью формы. В результате происходят изменения в базе данных. При нажатии на кнопку "Назад" скрипт не всегда но бывают такие случаю пытается выполнить уже не возможные действия, которые приводят к путанице. Если использовать в формах post вместо get это не приводит к желаемому результату. Броузер просто спрашивает выполнить ли передачу данных снова. Вот в кратце. Запретить back я так понял не возможно, а во так узнать можно ли в php понять был ли нажат back или нет.
так бы сразу и сказал. Обычно чтобы избежать подобных казусов после обработки post-запроса используют редирект Код (Text): header('Location: result_ok.php') можно посылать его на ту же страницу с которой пришел пользователь
Я бы посоветовал: 1) переделать интерфейс таким образом, чтобы у пользователя не возникало желания нажимать кнопку "назад". 2) Сделать "промежуточную" страницу. Например, как на этом форуме - "Ваше сообщение добавлено. Что сделать - посмотреть Ваше сообщение, вернуться в тему". Или вообще редиректную, которая единственное, что делает - это редиректит на следующую страницу. Тогда при нажатии "назад" пользователь будет опять заредирекчен на новую страницу. Средствами php нельзя вычислить нажатие кнопки "назад".
Vladislav_Yushkin, решение выглядит криво, но можно, например, когда заходишь на страницу с формой ставить пользователю куку. При загрузке страницы проверять, есть ли она или нет. Что-то типа: Код (Text): Если(Гет){ Если($Кука_Дежавю){ Отправляем_в_сад; } Иначе{ Выполняем действия; } } Иначе{ Выдаем форму ввода; Чистим $Кука_Дежавю; }
RomanBush, если 2 раза быстро нажать назад, то мы окажемся таки на "нежелательной" странице, не так ли? +1
Да. Но это не все юзеры догадаются сделать. И, к тому же, если инет быстрый - то ты не сможешь так быстро нажать, чтобы не успел сработать редирект. Я уже видел/сталкивался с таким. Тогда приходится на кнопке "назад" нажимать треугольничек и в раскрывшемся списке выбирать на две страницы назад. А многие юзеры даже не знают о такой возможности. Ну и всё таки это решение лучше, чем игра с куками.
а если ещё и редиректить на "промежуточную" страницу, на которй будет написано "ваш запрос выполнен успешно" и через 5 секунд редиректить куда-нибудь дальше. Ваще жесть будет. Юзер ваще замучица вычислять, скока раз ему надо "назад" нажать.
переделать интерфейс таким образом, чтобы у пользователя не возникало желания нажимать кнопку "назад". С этим я тоже согласен, но ведь найдется тот кто начнет давить на back, а не хотелось бы ему это позволять. dAllonE насчет куков - не катит У пользователя должна быть возможность многократного изменения данных. Куком не уследишь. если 2 раза быстро нажать назад, то мы окажемся таки на "нежелательной" странице, не так ли? Ага в самую точку. А вот header('Location: result_ok.php') можно посылать его на ту же страницу с которой пришел пользователь Сейчас буду думать может поможет. Хотя мне кажется, что все равно в history останется адрес на который можно вернуться.
Да. Но это не все юзеры догадаются сделать. И, к тому же, если инет быстрый - то ты не сможешь так быстро нажать, чтобы не успел сработать редирект. Я уже видел/сталкивался с таким. Тогда приходится на кнопке "назад" нажимать треугольничек и в раскрывшемся списке выбирать на две страницы назад. А многие юзеры даже не знают о такой возможности. Да все это ясно. Но просто хочется обезопасить себя от таких юзеров Чтобы не получилось следующее например сначала пользователь послал запрос на изменение своего имени на "Вася" потом решил изменить и послал запрос "Вася Петров". И все замечательно. А потом взал и нажал кнопку назад и у него уже опять "Вася", хотя он мог нажать back просто так. Пускай был редирект, тогда он дважды нажал... Некрасиво получается.
ещё раз: сделай на странице ссылку "изменить имя ещё раз" прямо в центре экрана и тогда у пользователя не возникнет желания нажимать "назад", а он нажмёт эту ссылку.
Пользователю всё время будет написана дурацкая надпись, кнопка назад не активна, в чем проблема? PHP: <?php if (isset($_POST['name'])) { /* сохраняем данные */ header('Location: 1.php'); die; } else { echo "Ничего не выбрали?"; } ?> <hr /> <form action='1.php' method='post'> <input type='text' name='name' value='' /> <input type='submit' name='Поменяй имя!' /> </form>