2014-06-06 37 views
0

一個網站,我已經發表的產生當一個有效的用戶提交表單內容如下所述的錯誤將被存儲在數據庫中:笨添加內容生成故宮

Forbidden 

You don't have permission to access /index.php/user/add on this server. 

Additionally, a 404 Not Found error was encountered while trying to use an 
ErrorDocument to handle the request. 

這是一個私人網站。所有用戶都必須登錄。一些用戶可以添加內容。使用CI會話時,會添加一個0123'的字段,其中值爲0或1從用戶表中的用戶記錄中檢索,並在登錄時複製到user_data會話數組中。變量$this->session->userdata('edit')用於控制器和視圖中的if語句。值爲1時,用戶將看到會引起視圖(表單)編輯或添加內容的鏈接。

這是我如何使用變量來設置菜單項的片段:

<?php if ($this->session->userdata('edit') == 1) { ?> 
    <li><a href="<?php echo site_url().'/user/add'; ?>">Add</a></li> 
<?php }; ?> 

這是表格數據的處理的基本結構。這個功能是在控制器文件user.php

function add(){ 
    if ($this->session->userdata('logged_in')){ 
      //runs form validation 
     if ($this->form_validation->run() == FALSE) { 
      //if false, redisplays the form and data with failed fields highlghted 
     }//if 
     if ($this->form_validation->run() == TRUE) { 
      //processes the data and stores in the database 
     }//form validation run 
    } else { 
     redirect ("user/login"); 
    } //if...else 
}//add 

這些紫禁城錯誤之一,沒有數據被插入後檢查數據庫。由於驗證錯誤而重新顯示的表單也不會發生。這些因素使我相信這是一個比CodeIgniter問題更多的服務器問題。 If you look at this link它顯示了在瀏覽器中接收到的錯誤(Firefox或Chrome,尚未使用的其他瀏覽器)的屏幕截圖,它不是CI代碼中錯誤生成的錯誤的常見CodeIgniter外觀。

添加/編輯內容表單運行良好。如上所述,錯誤發生在表單提交時。同樣,它只發生在託管公司的服務器上。我已經檢查了user.php的權限,並且與其他文件一樣,它們是644。

什麼是可能的修復?如果這是一個服務器問題,我該尋找什麼或請託管公司看看?如果是CI會話問題,則在文檔CodeIgniter中聲明它使用與$ _SESSION超級全局不同的系統。將用戶數據複製到該數組並讓代碼查找來自該變量數組的數據是否明智?或者我創建一個不同的數組並將鍵保存在那裏?

修訂和解決方案 我重新測試了與該項目關聯的數據庫的連接。我可以連接。把事情做下一步,我可以選擇記錄但不能插入。我用原始,簡單的語句進行了這些測試。

檢查此用戶和數據庫的特權後,我發現雖然已選中All Privileges,但未檢查任何單個特權。 (請參閱this screen shot。)

我忽略了「所有權限」複選框並手動檢查每個其他框。進行如上所述的小測試,然後與網站上的表單進行交互,我會得到我期望的結果。

事情我不明白:

  1. 如何所有權限進行檢查,並沒有其他的複選框選中?

我已經回去嘗試檢查All Privileges,然後單獨取消選中其他人。這是不可能的。通過與該主機上的Panelbox進行交互,通常可以設置用戶並將它們與數據庫相關聯,但我知道對於上述狀態我不常見。

  1. 編程,因爲只有一個用戶,並設置有一個笨網站相關聯的特權,如何爲這個網站能夠在Forbidden錯誤之前插入5條記錄在數據庫中的管理開始被從服務器返回的?

當我第一次發佈此線程時,我沒有概述它,但Forbidden錯誤沒有立即發生,並且沒有立即從服務器上傳和運行網站。由於管理員能夠在開始接收錯誤之前完美地提交五個完成的表單,我推測這是一個Sessions問題。這個爭論也是因爲有時候刪除cookie然後登錄,我或者管理員能夠提交表單並且數據被插入到數據庫中。

感謝您花時間閱讀本文。

+0

隨時Codeigniter給了我一個禁止的錯誤,這是因爲在/application/config/config.php中啓用了全局CSRF保護 –

+0

這看起來更像是一個與會話相比的路由問題。這是默認的apache錯誤頁面,如果您嘗試訪問不存在的頁面,通常會出現這個錯誤頁面。 –

+0

@Jon /application/config/config.php中的最佳CSRF未啓用 – dwlamb

回答

0

經常測試與數據庫關聯的用戶權限。有時事情會改變。