我有一个用PHP编写的网站,任何时候用户收到错误我会将它们重定向到另一个页面(使用header(Location:...)
)并将错误ID放在URL中,以便我知道要显示哪个错误
E.g。如果用户尝试访问产品页面但该项目不再可用,我将重定向回他们之前查看的项目类别,并根据我在URL中指定的错误ID显示错误。
www.example.com/view_category.php?product_category_id=4&error_id=5
我不喜欢这种方法有两件事:
有没有办法从URL中干净地删除特定的$ _GET变量,同时在页面加载后保留其余变量不变?
我想也许它正在使用modRewrite或重定向回到页面本身,但是从URL中删除error_id或使用$ _SESSION变量并避免将error_id放入URL中。你的想法?
我真的从这个社区中学到了很多东西,并且想过如果我提出一个问题,我可能会学到新的东西或得到一些不同的想法,因为我对脚本很新。
答案 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_REFERER
与SCRIPT_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)
if (!empty($_GET['passvar'])) {
unset($_GET['passvar']);
echo "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=".$_SERVER['PHP_SELF']."\" >";
}
对我来说很完美。