#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.
- Возможно, оно вообще не установлено.
- Это может быть что угодно, не ожидайте, что ваша предыдущая страница.
Я советую надежное решение с использованием (как упомянуто выше) скрытого поля, хранилища сеансов или просто иметь надежную маршрутизацию в вашем приложении, чтобы вы знали, какой маршрут кто-то выбрал. Выберите лучшее.
Ответ №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']);