codeigniter的重定向功能有问题

时间:2011-06-07 00:03:18

标签: php codeigniter redirect header superglobals

这可能是一个n00b主题,但是,无论如何,我一直有一个相当困难和奇怪的时间与这个错误。基本上我正在为显示表单的页面开发控制器方法。基本上,我是通过var使用codeigniter的$this->input->post函数转储表单输入来调试表单的提交数据,如下所示:

var_dump($this->input->post('first_name'));

每隔一天这都有效,但今天我发现当我将post变量转储到浏览器时,它会返回false,好像它们没有值,即使它们在我提交表单时确实有值。然后我尝试直接通过PHP的POST超全局数组访问变量:

var_dump($_POST['first_name']);

并返回空,所以我尝试像这样转储整个post数组:

var_dump($_POST);
尽管我填写了整个表格,但它仍然是空的。然而,我的MySQL数据库中的记录正在更新(这意味着即使我的$ _POST变量显示为空,表单也在提交)。

另外,我推断通常情况下,如果我在重定向函数调用之前将控制器函数中的var转储变量,它应该给我一个'Headers already sent'错误,但它从未这样做过。它只是将我重定向到所谓的成功页面而不是转储我的变量。

因此,在大约2个小时内,我认为我的POST数据没有被发送并重新检查代码是否有错误,并开始逐个注释掉语句,直到我可以在我的脚本中找到罪魁祸首语句。

最后,我注释掉了一大堆代码,它们将成功消息设置为重定向,如下所示:

/*
if($record_updated_successfully)
{
    $this->session->set_flashdata('success', $this->lang->line('record-updated-successfully'));
}
redirect('admin/success_page');
*/

然后脚本开始使用codeigniter的$this->input->post函数以及$_POST超全局数组开始转储所有以前的变量转储。

好吧,如果脚本确实重定向我,尽管在发送标头之前发送输出变量转储,那么我可以看到为什么$ _POST变量显示为空。

那么真正的问题是为什么尽管我在发送标题之前发送输出,脚本仍会重定向?有没有人经历过这个?

对此有任何帮助将不胜感激。

编辑:关于加载视图这里是我的脚本的简化版本 使用debugging var dump语句:

function some_controller_method() {
    var_dump($this->input->post());
    var_dump($_POST);

    // some code

    if($this->input->post('form_action') == 'update record') {
        // code that runs when the form is submitted
        /*
         * ...
         */

        if($record_updated_successfully)
        {
            $this->session->set_flashdata('success', $this->lang->line('record-updated-successfully'));
        }
        redirect('admin/success_page');
    }

    $this->load->view('my-view-file.php');
}

2 个答案:

答案 0 :(得分:2)

虽然我无法确定,但我会假设您在视图文件中输出了var_dump()之类的内容。在您调用视图时不会执行视图,例如:

   $this->load->view('some_view');
   echo "hi!";

在控制器中不会导致某些视图的内容后跟“hi”。它将导致“hi”后跟一些视图的内容。实际上,在控制器中的其他所有内容运行后输出视图。

这是您提供的信息中唯一可以想到的内容。我必须看到更多的代码来提供不同的诊断。

答案 1 :(得分:-1)

我遇到了“相同”的问题,我在代码中的循环中找到了unset()函数。也许这会有所帮助。