如何从URL中删除特定的$ _GET变量

时间:2009-07-30 23:15:15

标签: php error-handling get

我有一个用PHP编写的网站,任何时候用户收到错误我会将它们重定向到另一个页面(使用header(Location:...))并将错误ID放在URL中,以便我知道要显示哪个错误

E.g。如果用户尝试访问产品页面但该项目不再可用,我将重定向回他们之前查看的项目类别,并根据我在URL中指定的错误ID显示错误。

www.example.com/view_category.php?product_category_id=4&error_id=5

我不喜欢这种方法有两件事:

  1. 它会在网址中显示error_id。
  2. 如果刷新页面,则仍会显示错误。
  3. 有没有办法从URL中干净地删除特定的$ _GET变量,同时在页面加载后保留其余变量不变?

    我想也许它正在使用modRewrite或重定向回到页面本身,但是从URL中删除error_id或使用$ _SESSION变量并避免将error_id放入URL中。你的想法?

    我真的从这个社区中学到了很多东西,并且想过如果我提出一个问题,我可能会学到新的东西或得到一些不同的想法,因为我对脚本很新。

7 个答案:

答案 0 :(得分:7)

不,没有办法明确地做到这一点 - 至少在没有页面刷新的情况下,但是无论如何你都会失去数据。

最好使用临时会话变量。

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
}

答案 1 :(得分:3)

是的,有一种方法可以从PHP中删除特定的$_GET ...

      varToRemove = "anyVariable";

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

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

然后,将$ newurl放在链接中..就像这样:

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

我知道这是一个老帖子,但是,其他程序员可能会搜索它!

答案 2 :(得分:2)

首先,在数据库中记录错误:)

之后,设置cookie或会话变量,然后将用户重定向到安全页面。加载该页面时,让它检查变量,显示错误,然后从cookie或会话数组中删除变量。

答案 3 :(得分:1)

一种方法是将HTTP_REFERERSCRIPT_NAME进行比较。如果用户点击了刷新,它们将是相同的。

答案 4 :(得分:0)

快速黑客:您还可以“{1}}”关于“&amp;”在imploded()变量中操作该字符串,然后$_SERVER['QUERY_STRING']将其返回。

答案 5 :(得分:0)

这种方法不会起作用吗?

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

答案 6 :(得分:0)

我有同样的问题 尝试: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']."\" >";

}

对我来说很完美。