перенаправление пользователя на предыдущую страницу после успешного выполнения задачи

#php

#php

Вопрос:

Каким должен быть хороший способ перенаправить пользователя после успешного действия, такого как редактирование или удаление любого элемента, в состоянии удаления мы могли бы использовать $_SERVER['HTTP_REFERER'] но в случае редактирования мы показываем сначала форму редактирования, а затем пользователь нажимает обновить, поэтому, если мы используем тот же подход, пользователь будет перенаправлен на страницу редактирования, а не на главную страницу. Я надеюсь, вы поняли мое замешательство. Спасибо.

Ответ №1:

Если ‘update’ обрабатывается через сообщение формы, просто введите скрытый ввод, отражающий место посадки.

 <input type="hidden" name="next_url" value="foo.php" />
  

PHP использует значение в качестве места для перенаправления.

 <?php
  // Do operations.
  header('Location: '.$_REQUEST['next_url']);
  

Это особенно важно, потому что работа HTTP_REFERER не гарантируется. Большую часть времени это работает, но есть проблемы с использованием этого.

Ответ №2:

Я советую никогда не использовать HTTP_REFERER.

  1. Возможно, оно вообще не установлено.
  2. Это может быть что угодно, не ожидайте, что ваша предыдущая страница.

Я советую надежное решение с использованием (как упомянуто выше) скрытого поля, хранилища сеансов или просто иметь надежную маршрутизацию в вашем приложении, чтобы вы знали, какой маршрут кто-то выбрал. Выберите лучшее.

Ответ №3:

Если вы согласны с $_SERVER['HTTP_REFERER'] , вы можете просто сохранить это значение в информации о сеансе и перенаправить на него, когда редактирование будет завершено.

Например, перед отображением формы редактирования вы можете сделать:

 $_SESSION['originalReferer'] = $_SERVER['HTTP_REFERER'];
  

И после нажатия «Обновить» (в случае успеха):

 header("Location: ".$_SESSION['originalReferer']);
  

Но опять же, используйте это, только если вы доверяете $_SERVER['HTTP_REFERER'] !

Ответ №4:

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

 header('Location: '.$redirect_var);
  

Причина, по которой я бы поместил это в сеанс, а не в публикацию в форме, заключается в том, что пользователь может управлять публикацией формы, тогда как сеансы находятся на стороне сервера и полностью находятся под вашим собственным контролем.

Ответ №5:

Сохраните URL-адрес в сеансе, когда вы переходите на страницу редактирования, и при отправке просто используйте приведенный ниже фрагмент после выполнения запроса на обновление:

 header('Location: '.$_SESSION['redirect_url']);