一个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()
函数。也许这会有所帮助。