【问题标题】:CodeIgniter can't read any POSTCodeIgniter 无法读取任何 POST
【发布时间】:2015-02-03 09:59:57
【问题描述】:

无论我在 CodeIgniter 中通过 HTML 表单发布什么/无论如何 - 我的 $_POST$_REQUEST 数组都是空的。但是,当方法设置为get 时,一切看起来都很好。

我知道我的问题与 Apache / .htaccess 或 URI 设置有关。我在 Windows 7 上运行 XAMPP。

<form method='post' action='auth/login'>
    <input type='submit' name='login' value='TEST' />
</form>

现在在控制器auth 函数login 应该返回我

Array( 'login' => 'TEST' );

我得到的是

Array( );

我已经尝试过什么让它读取$_POST

  • 我已尝试设置我的 ALL uri_protocol 设置。
  • '''index.php' 上尝试了CodeIgniter 配置index_page
  • 尝试了很多不同的 .htaccess 方法。
  • 检查了我的 apache mod_rewrite 是否包含/允许,并且是。
  • 检查允许重写设置为All apache/conf/httpd.conf 中的任何地方
  • 尝试用$this-&gt;input-&gt;post()读取$_POST
  • 将动作路径设为绝对,还是什么都没有。
  • 试图从外部脚本发布到 CodeIgniter index.php

一切都没有结果。而且我知道问题必须与 Apache 设置有关,导致所有其他没有 .htaccess 的 文件夹/项目 都可以正常工作。

所以这里是我尝试过的确切 .htaccess 内容,它在 4me 中效果最好:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L] # returns 404 everywhere.

RewriteRule .* index.php/$0 [PT,L]  # Pages work good!

^^ 这效果最好(至少我让网页运行)但不是$_POST

对于那些想查看控制器(auth.php)代码的人:

class auth extends CI_Controller {
    function __construct() {
        # Parent constructor.
        parent::__construct();
    }    

    function login() {
        # Trying to read post
        print_r($_POST);
        print_r($this->input->post());

        # Loading form.
        $this->load->view('login_page');
    }
}

【问题讨论】:

  • 尝试使用 form_open('auth/login') CI 表单辅助方法或
    '> 和检查
  • 对于 post 不需要任何 htaccess 或删除 index.php 这是用于 preety url
  • @umefarooq 我现在尝试了你的解决方案,它最终在action 中创建了绝对路径,即localhost/auth/login,我仍然没有得到任何结果。
  • 也给你发布控制器代码
  • @RakeshSharma 我现在做了,你现在想看看更新的问题 :)

标签: php apache .htaccess codeigniter mod-rewrite


【解决方案1】:

试试这个删除你的操作并添加 enctype

<form name="login" id="login" action="" method="post" enctype="multipart/form-data">
    <input type='submit' name='login' value='TEST' />
</form>

在你的控制器中

在当前操作中添加以下代码。

 if($this->input->post()){
    echo "<pre>";print_r($this->input->post());die;
    }

【讨论】:

  • 我只是按照你的要求做了。当我查看源代码时,我在 HTML 代码中没有看到任何 &lt;pre&gt; 标记,所以我建议 if($this-&gt;input-&gt;post()){ 没有触发。我确定问题出在将我的$_POST 路由到服务器本身(在我的本地计算机上)导致网络上的虚拟主机/服务器上没有人遇到过这个问题(当我用谷歌搜索时)当地人有这个问题没有解决方案)
【解决方案2】:

好的,这就是我的解决方案:

我对 CI_Model 进行了覆盖,以始终检查是否存在 $this-&gt;input-&gt;post('login'),如果存在,请检查发布的用户和通过是否验证。如果它不验证redirect 登录页面。 redirect 正在清除我的所有帖子。

感谢所有试图提供帮助的人,我深表歉意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-19
    • 2014-12-06
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2016-10-21
    • 2015-08-31
    • 1970-01-01
    相关资源
    最近更新 更多