编码点火器的重定向功能有问题


Problem with codeigniter's redirect function

这可能是

一个n00b主题,但无论如何,我一直在处理这个错误时遇到相当困难和奇怪的时间。基本上,我正在为显示表单的页面开发控制器方法。基本上,我通过使用 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变量显示为空,表单仍在提交(。

此外,我推断,通常,如果我在重定向函数调用之前在控制器函数中转储变量,它应该给我一个"标头已发送"错误,但它从来没有。它只是将我重定向到所谓的成功页面,而不是转储我的变量。

因此,在大约 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 变量显示为空。

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

任何这方面的帮助将不胜感激。

编辑:关于加载视图,这是我的脚本的简化版本看起来像使用调试 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');
}

虽然我不能确定,但我假设你在视图文件中输出了 var_dump(( 之类的东西。视图在您调用时不会执行,例如:

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

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

这是您提供的信息唯一想到的事情。我必须看到更多的代码来提供不同的诊断。

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