0

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

4

3 回答 3

2

如果我没看错你的问题,你只想加载不带参数的页面 url,同时仍然执行你请求的操作。

有两种方法可以做到这一点。

-- 使用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'], '?'));
}
于 2013-05-29T19:56:09.273 回答
0

如果要从中使用它们,则不能从 URL 中删除它们。如果您不想在 URL 中包含类似的内容,请尝试在 POST 中传递参数,或者最好将当前的“操作”存储在会话中,以将其完全隐藏在用户面前。

例如,您可以不将操作放在 URL 中

$_SESSION['action'] = add-item

然后在同一页面上处理会话参数。因此,如果

if(!isset($_SESSION['action'])){//do nothing}

否则以您需要的某种方式处理该操作。

于 2013-05-29T19:50:49.173 回答
0

您很可能正在寻找Post/Redirect/Get 设计模式

您不能“更改地址栏”*。地址栏显示浏览器当前所在的 URL,浏览器所在的 URL 会影响服务器为产生响应所做/所做的事情。

* 尽管有 HTML5 Javascript 历史 API。

于 2013-05-29T19:55:31.280 回答