【问题标题】:Codeigniter $this->input->post() empty while $_POST is working correctlyCodeigniter $this->input->post() 为空,而 $_POST 正常工作
【发布时间】:2012-09-04 18:28:08
【问题描述】:

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

print_r($_POST) 完整且正确地给出了所有变量?

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

对我应该如何尝试使其正常工作有什么想法吗?

谢谢!

【问题讨论】:

  • 这是在常规表单上还是您在使用 AJAX?
  • 目前只是一个常规形式
  • 什么是 var_dump($this->input->post());显示?
  • 您想将所有帖子数据作为一个数组获取,没有任何特定的key 或您的$this->input->post('some_data') 不起作用?
  • Matthew - 请发布您的控制器并查看代码。

标签: php codeigniter post


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    更改表单操作,

    从这里:

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

    进入这个:

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

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

    action="http://www.yourdomain.com/index.php/yourprocess"

    【讨论】:

      【解决方案3】:

      试试这个,改变

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

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

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

      【讨论】:

      • 好的。这实际上是我的情况!感谢您的洞察力!我最近在网站上添加了 ssl,base_url 没有 www,但我的 htaccess 强制没有 www! ://
      【解决方案4】:

      今天终于解决了。 .htaccess 文件存在问题。

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

      【讨论】:

        【解决方案5】:

        使用

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

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

        【讨论】:

          【解决方案6】:

          从 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】:

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

            type: 'posts',

            而不是

            type: 'post',

            语法,噢!

            【讨论】:

            • 这是一个完全不同的问题,因为 OP 说 print_r($_POST) 完整且正确地给出了所有变量。我会邀请您发布您自己的新问题并回答它,但 Typo 问题在 StackOverflow 上已作为题外话关闭。这篇文章应该被删除,因为它不专注于解决 OP 遇到的问题。仅仅因为标题含糊不清并不意味着所有可能的接收发布数据的失败都应该被塞进这个页面。亲爱的版主,请不要将此评论视为粗鲁 - 这是事实,旨在改善网站内容。
            【解决方案8】:

            您可以检查一下,如果您的视图看起来像这样(正确):

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

            vs(不起作用):

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

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

            说明:

            当url末尾没有斜杠时,表示this指向一个文件。

            现在,当网络服务器查找该文件时,它会发现这确实是一个目录,并在结尾处向浏览器发送一个带有斜杠的重定向。

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

            【讨论】:

            • 我正要问你在类似的问题中该怎么做,但使用 XMLHttpRequest。 //不会工作 xhr.open("POST","/controller/doRegistration",true); //照你说的做...不会工作 xhr.open("POST","/controller/doRegistration/",true); //但是...有效 xhr.open("POST",'/controller/doRegistration',true);
            • @Sobiaholic 是的!现在我正在使用类似 website.com/index.php/controller/index website.com/index.php/controller/catalog 之类的东西。
            • 我不想说使用 '/index.php/controller/catalog' 没问题。不是“/index.php/controller/catalog”。老实说不知道为什么。在 .httpaccess 文件和撇号之间我很困惑。
            • 第一个和第二个都是sme WTF
            • @rahultyagi 它们不一样——第一个最后有斜线。我在回答中添加了解释。
            【解决方案9】:

            解决如下:

            以下是否排除将在控制器上运行 $ this-> input-> post ('name' ) 的 .htacess 重定向,在我的情况下它运行良好。

            腹肌, 何塞·卡马戈]

            【讨论】:

              【解决方案10】:

              您可以寻求一些帮助来解决此问题。

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

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

                echo $this-&gt;input-&gt;user_agent();

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

              【讨论】:

              • 当要求 OP 进行澄清和诊断时,请在问题下方使用 post cmets(您不应在答案中提出任何问题)。
              【解决方案11】:

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

              【讨论】:

                【解决方案12】:

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

                【讨论】:

                  【解决方案13】:

                  问题是$this-&gt;input-&gt;post()不支持获取所有POST数据,只支持获取特定数据,例如$this-&gt;input-&gt;post('my_post_var').这就是var_dump($this-&gt;input-&gt;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!
                  }
                  

                  【讨论】:

                  • 对不起,这是完全错误的。来自关于$this-&gt;input-&gt;post() 的文档 - “返回所有 POST 项目的数组,调用时不带任何参数。” - 你所做的完全没有必要,而且它还绕过了 Codeigniter 的内置安全措施. ellislab.com/codeigniter/user-guide/libraries/input.html
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-01-08
                  • 1970-01-01
                  • 2017-07-29
                  • 1970-01-01
                  • 2017-04-11
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多