2016-03-01 99 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

哦,這是一個錯字 –