Codeigniter

时间:2016-03-01 18:08:17

标签: php apache .htaccess codeigniter

所以我正在对这个话题进行一些研究,你会认为会有答案但是没有,或者我可能正在寻找错误的领域。

问题

提交表单时,我的帖子变量为空。我正确地传递它们,表单到达它需要去的地方,并且变量和表单数据在标题中正确显示并带有值。我在配置中自动加载了表单助手,所以一切都应该如此。

我的开瓶器看起来像这样:

<form action='/Forms/form_processor/' method='post' id='testForm'>

在我的Forms控制器中看起来像这样:

define('BASEPATH') OR exit('No direct script access allowed');

class Forms extends CI_Controller{
    public function form_processor(){
        // get variables
        $name = $this->input->post('name');

        // ... do stuff with variable data
    }
}

我还要注意,使用htaccess文件我的配置变量是:

$config['base_url'] = 'http://example.com/';
$config['index_page'] = ''; // this is to keep index.php out of the URL

可能的原因

使用codeigniter并坐在主页时,您会收到以下网址:

http://example.com

没关系,在你转到下一页之前,你会得到这个网址:

http://example.com/index.php/page

它看起来很难看,所以为了美观和保持一致性,我创建了一个htaccess文件:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /example.com/
    RewriteCond $1 !^(index\.php|images|robots\.txt)
    RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    ErrorDocument 404 http://example.com/
</IfModule>

然后通过在基本目录中使用此htaccess文件,我得到的URL看起来像这样:

http://example.com/page

临时修正和需要回答的问题

有人向我指出,因为我的$config['index_page']变量为空,所以这就是问题源于此的地方。所以我在表单的操作中将index.php添加到了我的网址的开头,然后就可以了。

htaccess重写是否应该处理此问题,并将其发送到应该位于表单操作URL中index.php的位置?

其次,这会如何影响岗位变量?因为当我提交表单时,它仍然会到达它需要去的地方,它只是为所有变量显示null,即使它们是通过标题正确发送的。这是我最困惑的地方。

如果您需要更多信息,请告诉我,但我们只是想弄清楚为什么会发生这种情况,这有点尴尬。提前谢谢!

2 个答案:

答案 0 :(得分:2)

你的问题似乎很复杂。我认为安装步骤可能存在问题。从config中删除index.php,设置base url(也在application / config.php中),设置加密密钥(也在那里)。

检查会话设置是什么 - 你在那里做了什么改变。

同样简化htaccess(把它放在index.php的哪个地方)

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

这是本地服务器还是服务器问题?

最后 - 尝试使用表单助手,它是否会改变某些内容,控制台内部是什么?显示更多控制器。你可以检查一个功能内的帖子

class Forms extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
    }

    function form_processor()
    {
        //check if $_POST
        if ($this->input->post()) {
            $name=$this->input->post('name');
            //process and redirect
        }

        $this->load->view('forms/my_form');
    }
}

另外,如果您使用xss_filtering或csrf_protection(请在config.php中检查),您一定要使用表单助手。

答案 1 :(得分:-1)

/ forms / form_processor /'method ='post'id ='testForm'&gt;

在表单操作中使用基本URL。 如果不起作用,请在基本URL之后使用index.php。