我知道这是一个非常常见的问题,但我找不到答案
我是一个post.php,它将一个帖子表单提交给controller.php当它正确时,在控制器中它会:
header("Location: ./post?ok=1");
Run Code Online (Sandbox Code Playgroud)
邮件实际插入,它通过上面的行,但浏览器中的URL似乎永远不会改变,最后没有ok参数,
我可以使用会话变量来存储这样的成功/失败参数,但这种方式应该有效
post.php中:
<form action="controller" method="post">
<input name="test" value='test' type="text" />
<input type="submit" value="post" />
</form>
Run Code Online (Sandbox Code Playgroud)
Controller.php这样:
<?php
header("Location: ./post?ok=1");
?>
Run Code Online (Sandbox Code Playgroud)
编辑1:
header("Refresh:1;url=http://localhost/test/post?ok=1"); //doesn't work better
Run Code Online (Sandbox Code Playgroud)
编辑2:
在post.php上面我放了
debug("post l ".count($_POST));
debug("get l ".count($_GET));
Run Code Online (Sandbox Code Playgroud)
它们在提交前显示0,在0之后显示0
edit3:它有效
被阻止:
if ($success){
header("Location: ./post?ok=1");
}
header("Location: ./post");
Run Code Online (Sandbox Code Playgroud)
应该是:
if ($success){
header("Location: ./post?ok=1");
} else {
header("Location: ./post");
}
Run Code Online (Sandbox Code Playgroud)
thx all
首先你不应该使用$_SERVER['HTTP_REFERER']这是不安全的。此外,客户端也有可能不会发送此标头。现在我不知道如何做,但我确信这可能会被用来劫持您的网站以进行邪恶的事情。
更好的是,您应该知道表单数据来自哪里并将用户重定向回那里。
顺便说一句,您的重定向可能无法按预期工作,因为网址已经包含问号。所以你必须添加更多带&符号的参数。
对于重定向,我建议使用 HTTP302 Found响应状态。但你必须确保之前没有发送过任何其他内容。以下行之前不得有 HTML 输出或空行header:
header("Location: http://".$_SERVER['HTTP_HOST']."/your/source.form", true, 302);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7857 次 |
| 最近记录: |