我是php新手,我很感激您能提供的任何帮助。我希望从URL中删除参数。我可以使用下面的代码删除它们,但我的问题是如何将结果解析到地址栏。我不想通过header("Location: index.php")
重新加载页面,因为我失去了解析变量的使用。我看过其他问题,但他们没有告诉你如何解析到完成字符串到地址栏。下面是我的代码。
<?php
if($_REQUEST["add"])
{
$message = "Item has been added";
$url = $_SERVER['REQUEST_URI'];
$url = strtok($url, '?');
}
?>
<head>
</head>
<body>
<?php
echo $message;
?>
<a href="?add=item">Click Add</a>
如果我没看错你的问题,你想只加载没有参数的页面url,同时仍然做你要求的操作。
有两种方法可以做到这一点。
—使用方法post的form
。
<form method='post'>
<input type='hidden' name='item' value='item' />
<input type='submit' name='add' value='Add Item' />
</form>
然后,在PHP中,您可以从POST变量中获取添加项的值,如下所示
if(isset($_POST['submit'])) {
//do something with $_POST['item']
}
——将值发送给会话变量并重新加载页面
if(!isset($_SESSION['added']) && isset($_GET['add'])) {
$_SESSION['added'] = $_GET['add'];
header('location: '.strtok($_SERVER['REQUEST_URI'], '?'));
}
如果想从URL中使用它们,则不能从URL中删除它们。如果你不想在URL中有这样的东西,那么尝试在POST中传递参数,或者最好将当前的"动作"存储在会话中,以对用户完全隐藏它。
例如,不把动作放在URL中你可以直接写
$_SESSION['action'] = add-item
,然后在同一页上处理会话参数。如果
if(!isset($_SESSION['action'])){//do nothing}
您很可能正在寻找Post/Redirect/Get设计模式。
您不能"更改地址栏"*。地址栏显示浏览器当前所处的URL,而浏览器所处的URL会影响服务器为产生响应所做的操作。
*尽管有HTML5 Javascript历史API