从URL中删除参数,并将完成的字符串粘贴到地址栏


Remove parameters from URL and paste finished string to address bar

我是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