这可能是一个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');
}
答案 0 :(得分:2)
虽然我无法确定,但我会假设您在视图文件中输出了var_dump()之类的内容。在您调用视图时不会执行视图,例如:
$this->load->view('some_view');
echo "hi!";
在控制器中不会导致某些视图的内容后跟“hi”。它将导致“hi”后跟一些视图的内容。实际上,在控制器中的其他所有内容运行后输出视图。
这是您提供的信息中唯一可以想到的内容。我必须看到更多的代码来提供不同的诊断。
答案 1 :(得分:-1)
我遇到了“相同”的问题,我在代码中的循环中找到了unset()
函数。也许这会有所帮助。