Как удалить определенную переменную $_GET из URL-адреса

StackOverflow https://stackoverflow.com/questions/1209903

  •  06-07-2019
  •  | 
  •  

Вопрос

У меня есть веб-сайт, созданный на 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-адресе.Ваши мысли?

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

Это было полезно?

Решение

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

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

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
}

Другие советы

Да, есть способ удалить specific $_GET из PHP...

      varToRemove = "anyVariable";

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

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

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

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

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

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

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

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

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

Разве такой подход не сработал бы?

<?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>

у меня была такая же проблема
попробуй : 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']."\" >";

}

у меня это работает идеально.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top