2016-03-01 136 views
1

因此,我正在做一些关于这个话题的研究,你会认为会有答案,但没有,或者我正在寻找错误的领域。htaccess和POST变量与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 

可能的原因

当使用笨和坐在主页,你得到这个网址:

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']变量为null,这是问题源于的地方。所以我在表单的动作中添加了index.php到我的url的开头,并且它通过了。

不应该htaccess的重写处理这个问题,并将其发送到它应该去的地方,我在表单的操作URL的index.php与否?

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

如果您需要更多信息,请让我知道,但我们只是想弄清楚为什么会发生在这里,这有点尴尬。先谢谢你!

回答

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)你一定要使用表格帮手。

+0

你能否展示你上面提到的设置步骤的样本? –

+0

1.下载CI安装文件,2.解压到web根目录,3.打开application/config/config.php,3.添加$ config ['base_url'],从$ config ['index_page']擦除index.php,在相同的文件中添加加密密钥。 4.在index.php所在的目录中创建.htaccess。 – cssBlaster21895

+0

一旦我记得由于命名我的输入名称name =“name”而有问题,但不记得是什么问题,现在我没有这样的问题 – cssBlaster21895

-1

/形式/ form_processor /”方法= 'POST' ID = '了testForm'>在表单动作

使用基本URL。 如果不工作,那么在基本URL之后使用index.php。

+0

这已经是一个已知的问题。我在我的问题中解释了这一点。 –

+0

您不使用表单中的方法。你使用action =“post”。 –

+0

哦,这是一个错字 –