【发布时间】:2011-06-07 00:03:18
【问题描述】:
这可能是一个 n00b 主题,但无论如何,我在这个错误上遇到了相当困难和奇怪的时间。基本上,我正在为显示表单的页面开发一种控制器方法。基本上,我通过 var 使用 codeigniter 的 $this->input->post 函数转储表单输入来调试表单的提交数据,如下所示:
var_dump($this->input->post('first_name'));
每隔一天这都有效,但今天我发现当我将 post 变量转储到浏览器时,它会返回 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');
}
【问题讨论】:
标签: php codeigniter redirect header superglobals