这可能是一个 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');
}