1

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

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

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

var_dump($_POST['first_name']);

并且它也返回空,所以我尝试像这样转储整个帖子数组:

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');
}
4

2 回答 2

2

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

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

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

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

于 2011-06-07T00:11:46.333 回答
-1

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

于 2012-05-29T13:54:34.040 回答