За последние 24 часа нас посетили 34985 программистов и 1756 роботов. Сейчас ищут 826 программистов ...

Нажатие на кнопку "Назад"

Тема в разделе "PHP для новичков", создана пользователем Vladislav_Yushkin, 28 фев 2008.

  1. Vladislav_Yushkin

    Vladislav_Yushkin Активный пользователь

    С нами с:
    19 июн 2007
    Сообщения:
    71
    Симпатии:
    0
    Подскажите, возможно ли средствами php определить - что загрузка страницы началась после нажатия на кнопку "Назад" в броузере.
    Заранее спасибо.
     
  2. Anonymous

    Anonymous Guest

    http://www.phpfaq.ru/na_tanke

    Но интуиция мне подсказывает, что в вашем случае ответ есть....
     
  3. Vladislav_Yushkin

    Vladislav_Yushkin Активный пользователь

    С нами с:
    19 июн 2007
    Сообщения:
    71
    Симпатии:
    0
    Я конечно извеняюсь, но не могли бы вы ткнуть меня носом более конкретно.
     
  4. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Что происходит после нажатия этой кнопки?
     
  5. Vladislav_Yushkin

    Vladislav_Yushkin Активный пользователь

    С нами с:
    19 июн 2007
    Сообщения:
    71
    Симпатии:
    0
    "Назад" - это имеется ввиду загрузка страницы по адресу взятому из истории т.е. history.back
     
  6. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Vladislav_Yushkin
    И откуда чаще всего эта страница загружается? И чем она отличается от самой себя, но не после нажатия кнопки "назад"?
     
  7. Vladislav_Yushkin

    Vladislav_Yushkin Активный пользователь

    С нами с:
    19 июн 2007
    Сообщения:
    71
    Симпатии:
    0
    Дело в том, что на странице выполняются некоторые запросы с помощью формы. В результате происходят изменения в базе данных. При нажатии на кнопку "Назад" скрипт не всегда но бывают такие случаю пытается выполнить уже не возможные действия, которые приводят к путанице. Если использовать в формах post вместо get это не приводит к желаемому результату. Броузер просто спрашивает выполнить ли передачу данных снова.
    Вот в кратце.
    Запретить back я так понял не возможно, а во так узнать можно ли в php понять был ли нажат back или нет.
     
  8. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    так бы сразу и сказал. Обычно чтобы избежать подобных казусов после обработки post-запроса используют редирект
    Код (Text):
    1. header('Location: result_ok.php')
    можно посылать его на ту же страницу с которой пришел пользователь
     
  9. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Я бы посоветовал:
    1) переделать интерфейс таким образом, чтобы у пользователя не возникало желания нажимать кнопку "назад".
    2) Сделать "промежуточную" страницу. Например, как на этом форуме - "Ваше сообщение добавлено. Что сделать - посмотреть Ваше сообщение, вернуться в тему". Или вообще редиректную, которая единственное, что делает - это редиректит на следующую страницу. Тогда при нажатии "назад" пользователь будет опять заредирекчен на новую страницу.
    Средствами php нельзя вычислить нажатие кнопки "назад".
     
  10. dAllonE

    dAllonE Guest

    Vladislav_Yushkin, решение выглядит криво, но можно, например, когда заходишь на страницу с формой ставить пользователю куку. При загрузке страницы проверять, есть ли она или нет.
    Что-то типа:
    Код (Text):
    1.  
    2. Если(Гет){
    3.     Если($Кука_Дежавю){
    4.           Отправляем_в_сад;
    5.     }
    6.     Иначе{
    7.           Выполняем действия;
    8.     }
    9. }
    10. Иначе{
    11.    Выдаем форму ввода;
    12.    Чистим $Кука_Дежавю;
    13. }
     
  11. dAllonE

    dAllonE Guest

    RomanBush, если 2 раза быстро нажать назад, то мы окажемся таки на "нежелательной" странице, не так ли?


    +1
     
  12. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Да. Но это не все юзеры догадаются сделать. И, к тому же, если инет быстрый - то ты не сможешь так быстро нажать, чтобы не успел сработать редирект. Я уже видел/сталкивался с таким. Тогда приходится на кнопке "назад" нажимать треугольничек и в раскрывшемся списке выбирать на две страницы назад. А многие юзеры даже не знают о такой возможности.
    Ну и всё таки это решение лучше, чем игра с куками.
     
  13. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    а если ещё и редиректить на "промежуточную" страницу, на которй будет написано "ваш запрос выполнен успешно" и через 5 секунд редиректить куда-нибудь дальше. Ваще жесть будет. Юзер ваще замучица вычислять, скока раз ему надо "назад" нажать. :)
     
  14. dAllonE

    dAllonE Guest

    RomanBush, да, аргументировано, согласен.
     
  15. Vladislav_Yushkin

    Vladislav_Yushkin Активный пользователь

    С нами с:
    19 июн 2007
    Сообщения:
    71
    Симпатии:
    0
    переделать интерфейс таким образом, чтобы у пользователя не возникало желания нажимать кнопку "назад".
    С этим я тоже согласен, но ведь найдется тот кто начнет давить на back, а не хотелось бы ему это позволять.

    dAllonE
    насчет куков - не катит
    У пользователя должна быть возможность многократного изменения данных. Куком не уследишь.

    если 2 раза быстро нажать назад, то мы окажемся таки на "нежелательной" странице, не так ли?
    Ага в самую точку.

    А вот
    header('Location: result_ok.php')
    можно посылать его на ту же страницу с которой пришел пользователь
    Сейчас буду думать может поможет. Хотя мне кажется, что все равно в history останется адрес на который можно вернуться.
     
  16. Vladislav_Yushkin

    Vladislav_Yushkin Активный пользователь

    С нами с:
    19 июн 2007
    Сообщения:
    71
    Симпатии:
    0
    Да. Но это не все юзеры догадаются сделать. И, к тому же, если инет быстрый - то ты не сможешь так быстро нажать, чтобы не успел сработать редирект. Я уже видел/сталкивался с таким. Тогда приходится на кнопке "назад" нажимать треугольничек и в раскрывшемся списке выбирать на две страницы назад. А многие юзеры даже не знают о такой возможности.

    Да все это ясно.
    Но просто хочется обезопасить себя от таких юзеров
    Чтобы не получилось следующее
    например
    сначала пользователь послал запрос на изменение своего имени на "Вася" потом решил изменить и послал запрос "Вася Петров". И все замечательно.
    А потом взал и нажал кнопку назад и у него уже опять "Вася", хотя он мог нажать back просто так. Пускай был редирект, тогда он дважды нажал... Некрасиво получается.
     
  17. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    ещё раз:
    сделай на странице ссылку "изменить имя ещё раз" прямо в центре экрана и тогда у пользователя не возникнет желания нажимать "назад", а он нажмёт эту ссылку.
     
  18. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Пользователю всё время будет написана дурацкая надпись, кнопка назад не активна, в чем проблема?
    PHP:
    1. <?php
    2. if (isset($_POST['name']))
    3. {
    4.     /*
    5.     сохраняем данные
    6.     */
    7.     header('Location: 1.php');
    8.     die;
    9. }
    10. else
    11. {
    12.     echo "Ничего не выбрали?";
    13. }
    14.    
    15. ?>
    16. <hr />
    17. <form action='1.php' method='post'>
    18.     <input type='text' name='name' value='' />
    19.     <input type='submit' name='Поменяй имя!' />
    20. </form>
     
  19. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Ха! Точно! Есть же AJAX! Можно сабмитить аяксом. И тогда не будет никаких "назад".
     
  20. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    RomanBush
    Ты еще по-грибы на танке поездий.
     
  21. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    RomanBush
    Порнокартинку повесить :lol:
     
  22. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Точно! Лучшее решение найдено.