我有一个名为action_reg_user的函数,它将数据插入数据库。我试着做通常的事情:
header('Location:page/param1/param2');
但它不起作用
<?php
if(!empty($_POST)){
$username = $_POST['uname'];
$pword = md5($_POST['pword']);
print_r($_POST);
?>
<a href="reg_user/<?php echo $username; ?>/<?php echo $pword; ?>">Continue Registration</a>
<?php } ?>
答案 0 :(得分:8)
在最终页面准备好返回浏览器之前,Kohana不会生成请求标头。如果您查看application/bootstrap.php
,您会看到最近的位置:
echo Request::instance()
->execute()
->send_headers()
->response;
所以你要做的就是到达Request对象并让它为你做重定向。通常,这应该在您的控制器中完成,而不是您的视图。在控制器中,您可以执行$this->request->redirect('kohana/path')
。如果您坚持在视图中执行此操作,则希望Request::current()->redirect('kohana/path')
重定向分层链中当前正在执行的请求。
小心并注意那些在路径URL::base
句柄中没有使用Request::redirect
,所以你只需要指定控制器/动作/参数。
答案 1 :(得分:2)
尝试使用
<?php
$this->request->redirect('url/to/redirect/');
外部操作可以使用此代码
<?php
Request::initial()->redirect('url');
答案 2 :(得分:2)
由于您的问题被标记为Kohana,我假设您正在使用它。
Kohana是一个所谓的MVC框架。视图不应包含重定向和检查$_POST
值等内容。它根本不应包含主要逻辑。视图仅适用于演示文稿。
您应该将重定向放在控制器中。这也是您应该检查$_POST
值并验证它们的地方。从控制器,您可以将$ _POST值传递给视图。
答案 3 :(得分:0)
根据我在你的问题上看到的情况,我假设你在输出一些内容后正在使用标题功能。
header()只能在将任何形式的输出发送回用户之前使用。
尝试在执行print_r之前将标题置于顶部
<?php
if(!empty($_POST)){
$username = $_POST['uname'];
$pword = md5($_POST['pword']);
action_reg_user($username,$pword);
if (/* data saved */){
header('Location: page/param1/param2');
exit;
}
}
?>
并且一旦设置了重定向,就不应运行其他代码。
我希望这是你想要完成的事情:)
答案 4 :(得分:0)
PHP header("Location: ..");
只接受绝对完整的网址,因此简单的传递page/param1/param2
将无效。
你需要:
header("Location:" . url::base() . "page/param1/param2");
甚至更好:
url::redirect('page/param1/param2');