Codeigniter $ this-> input-> post()为空,而$ _POST正常工作

时间:2012-09-11 19:02:44

标签: php codeigniter post

在codeigniter安装上,我尝试使用内置的$this->input->post('some_data')函数,但是$this->input->post()是一个空数组。

print_r($_POST)是否完全正确地提供了所有变量?

根据codeigniter文档,输入类“由系统自动初始化,因此无需手动执行”,让我想知道我还有什么意思。

关于我应该如何努力让它发挥作用的任何想法?

谢谢!

14 个答案:

答案 0 :(得分:26)

如果你的观点看起来像这样(正确),你可以检查:

<form method="post" action="/controller/submit/">

vs(不起作用):

<form method="post" action="/controller/submit">

这里的第二个是不正确的,因为它重定向而没有携带过去的变量。

<强>解释

当url最后没有斜杠时,表示这指向文件。

现在,当Web服务器查找文件时,它会看到,这实际上是一个目录,并在最后用斜杠向浏览器发送重定向。

浏览器使用斜杠对新URL进行新查询,但不发布表单内容。这就是表单内容丢失的地方。

答案 1 :(得分:4)

使用$this->input->post()初始化表单助手。您可以在配置中默认执行此操作。

答案 2 :(得分:3)

试试这个,改变

$config['base_url'] = 'http://mywebsite.cl/';

$config['base_url'] = 'http://www.mywebsite.cl/';

某些提供商自动将www,https等添加到您的网址,大多数情况下会导致此问题

答案 3 :(得分:1)

你可以寻找一些帮助来解决这个问题。

  1. 核心CodeIgniter文件中有任何更改或扩展。检查system/core/Input.php是原始副本以及application/libraryapplication/core的内容以获取其他文件

  2. 其他输入法是否有效?在print_r电话旁边运行时,结果是什么?

    echo $this->input->user_agent();

  3. print_r输出哪些数据?在application/config/config.php中查找第$config['global_xss_filtering']行。这设置为TRUE还是FALSE?如果TRUE可能跨站点脚本过滤器对您发布的数据有问题(我认为这不太可能)

答案 4 :(得分:1)

您是否在/applicaiton/config/config.php启用了csrf保护?

如果是,$this->input->post()将显示为空。您可以尝试执行不应为空的$this->input->post('submit')

答案 5 :(得分:1)

我的问题是ajax调用。我正在使用它:

type: 'posts',

而不是

type: 'post',

语法,D&#39;哦!

答案 6 :(得分:1)

从2.2.x升级到3.0.x - 原因post方法失败。 如果要升级CI 3.x,则需要将index_page保留在配置文件中。 还要检查.htaccess文件中的mod_rewrite。 CI_3.x

$config['index_page'] = ''; // ci 2.x
$config['index_page'] = 'index.php'; // ci 3.x

我的.htaccess

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule . /index.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
 ErrorDocument 404 /index.php
</IfModule>

答案 7 :(得分:1)

更改表单操作

由此:

<form method="post" action="<?=base_url()?>yourprocess">

进入这个:

<form method="post" action="<?=base_url()?>index.php/yourprocess">

基本上,您只需要在base_url()之后添加“index.php”:

  

行动= “http://www.yourdomain.com/index.php/yourprocess”

答案 8 :(得分:0)

终于在今天解决了这个问题。问题出在 .htaccess 文件中。

向自己学习:MUST READ THE CODEIGNITER DOCUMENTATION更彻底。

答案 9 :(得分:0)

使用

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

请看屏幕截图。 Here I am priniting all the post array value

答案 10 :(得分:-1)

您缺少父级构造函数。 加载控制器后,您必须 在控制器构造函数中调用父CI_Controller类构造函数

答案 11 :(得分:-2)

问题是$this->input->post()不支持获取所有POST数据,只支持获取特定数据,例如$this->input->post('my_post_var').这就是var_dump($this->input->post());为空的原因。

一些解决方案,坚持使用$ _POST检索所有POST数据,或者从每个需要的POST项目中分配变量,例如:

// variables will be false if not post data exists
$var_1 = $this->input->post('my_post_var_1');
$var_2 = $this->input->post('my_post_var_2');
$var_3 = $this->input->post('my_post_var_3');

但是,由于上面的代码不是很干,我喜欢这样做:

if(!empty($_POST)) 
{
    // get all post data in one nice array
    foreach ($_POST as $key => $value) 
    {
        $insert[$key] = $value;
    }
}
else
{
    // user hasen't submitted anything yet!
}

答案 12 :(得分:-2)

解决如下:

以下是否会排除将运行$ this-&gt;的.htacess重定向。输入 - &gt;在控制器上发布('name'),在我看来它完美无缺。

ABS, JoséCamargo]

答案 13 :(得分:-3)

要查看所有帖子值,请尝试var_dump($this->input->post(ALL));