Как удалить определенную переменную $ _GET из URL - PullRequest
4 голосов
/ 31 июля 2009

У меня есть веб-сайт, созданный на PHP, где каждый раз, когда пользователь получает ошибку, я перенаправляю его на другую страницу (используя header(Location:...)) и помещаю идентификатор ошибки в URL, чтобы я знал, какую ошибку отображать.

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

www.example.com / view_category.php? Product_category_id = 4 & ERROR_ID = 5

В этом подходе мне не нравятся две вещи:

  1. Отображает error_id в URL.
  2. Если страница обновлена, ошибка все равно будет отображаться.

Есть ли способ аккуратно удалить определенную переменную $ _GET из URL, оставив остальные переменные нетронутыми ПОСЛЕ загрузки страницы?

Я думаю, что, возможно, он использует modRewrite или перенаправление назад на саму страницу, но удаляет error_id из URL или использует переменную $ _SESSION и избегает помещения error_id в URL. Ваши мысли?

Я действительно многому учусь у этого сообщества и подумала, что, если я задам вопрос, я смогу узнать что-то новое или получить различные идеи, поскольку я довольно новичок в написании сценариев.

Ответы [ 7 ]

7 голосов
/ 31 июля 2009

Нет, это невозможно сделать явно - по крайней мере, без обновления страницы, но тогда вы все равно потеряете данные.

Вам лучше использовать временную переменную сеанса.

if ( /* error condition */ )
{
  $_SESSION['last_error_id'] = 5;
  header( 'Location: http://www.example.com/view_category.php?product_category_id=4' );
}

Затем в view_category.php

if ( isset( $_SESSION['last_error_id'] ) )
{
  $errorId = $_SESSION['last_error_id'];
  unset( $_SESSION['last_error_id'] );

  // show error #5
}
3 голосов
/ 08 марта 2011

Да, есть способ удалить специфическое $_GET из PHP ...

      varToRemove = "anyVariable";

      foreach($_GET as $variable => $value){
        if($variable != varToRemove){
           $newurl .= $variable.'='.$value.'&';
        }
      }

      $newurl = rtrim($newurl,'&');

Затем поместите $ newurl в ссылку .. вот так:

pageurl?something=something&<? echo $newurl; ?>

Я знаю, что это старый пост, но другие программисты могут его искать!

2 голосов
/ 31 июля 2009

Сначала зарегистрируйте ошибку в вашей базе данных:)

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

1 голос
/ 31 июля 2009

Один из способов - сравнить HTTP_REFERER с SCRIPT_NAME. Они будут такими же, если пользователь нажал Обновить.

0 голосов
/ 18 июня 2013

У меня была такая же проблема
попробуйте: http://www.azazia.com/kb/entry/26/

if (!empty($_GET['passvar'])) {
    unset($_GET['passvar']);
    echo "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=".$_SERVER['PHP_SELF']."\" >";

}

отлично работают для меня.

0 голосов
/ 13 июня 2013

Не подойдет ли этот подход?

<?php
    $params = array_diff($_GET, array("variable_name" => $value));
    $new_query_string = http_build_query($params);
?>
    <script>window.history.pushState('verify_email', 'Verify Email', '?<?php echo $new_query_string; ?>');</script>
0 голосов
/ 31 июля 2009

Быстрый взлом: вы можете также imploded() 'd на "&" в переменной $_SERVER['QUERY_STRING'], чтобы манипулировать этой строкой, а затем explode() вернуть ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...