2011-07-31 69 views
0

我試圖讓我的註冊頁面顯示驗證碼。我有一個註冊控制器和一個註冊視圖。使用CodeIgniter創建驗證碼

這裏是我的控制器指數方法:

public function index() 
{ 
    $this->load->helper('captcha'); 
    $cap = create_captcha(array(
     'img_path' => './captcha/', 
     'img_url' => 'http://localhost/captcha/', 
     'img_width' => 150, 
     'img_height' => 40 
    )); 
    $data = array(
     'captcha_time' => $cap['time'], 
     'ip_address' => $this->input->ip_address(), 
     'word' => $cap['word'] 
    ); 
    $query = $this->db->insert_string('captcha', $data); 
    $this->db->query($query); 

    $this->load->view('header'); 
    $this->load->view('register', $cap); 
    $this->load->view('footer'); 
} 

而且從我的註冊視圖中的相關位(register.php):

<h3>Security question</h3> 
<li> 
    <label for="captcha">Enter the CAPTCHA code below</label> 
    <?php echo $cap['image']; ?> 
</li> 

問題是,我得到這個錯誤:

A PHP Error was encountered 
Severity: Notice 
Message: Undefined variable: cap 
Filename: views/register.php 
Line Number: 35 

查看用戶指南後,似乎我從我的控制器傳遞給我的視圖需求的數據成爲一個數組或對象,並且唯一能讓我做我想做的事情的方式是在我的視圖文件中擁有驗證碼生成代碼,這似乎並不遵循MVC模式,是嗎?

任何人有任何提示?

+0

我不知道codeigniter,但從你寫的東西,你不能只是做'$ this-> load-> view('register',array ( '帽'=> $帽));'?然後你傳遞一個具有命名值的數組(我懷疑這是查看方法想要的) – Flambino

+0

我已經嘗試過了,我仍然收到'Undefined variable:cap'錯誤。 – Josh

+0

如果您有答案,請將其作爲答案張貼並標記爲答案 – mattumotu

回答

0

我已經看到你的代碼兩個方面的考慮:

1)我的理解是這樣的控制器功能,所以如果你想傳遞給視圖的「帽子」變量應該做的事情是這樣的:

$data['cap'] = $cap; 
$this->load->view('register', $data); 

Loadview()函數的第一個參數是函數名稱,第二個參數是包含要發送給視圖的所有參數的數組,第三個參數是如果要將視圖作爲原始參數返回字符串(默認爲false)。

2)如果你想遵循MVC模式,您應該封裝數據庫的模型調用設施笨:http://codeigniter.com/user_guide/general/models.html

在你的線條

$query = $this->db->insert_string('captcha', $data); 
$this->db->query($query); 

我知道你是想保存BBDD中的驗證碼信息,不是嗎? 所以,你應該有一個驗證碼模型更好地發送信息:

  • 創建模型的模型/ captcha_model.php:

    class Captcha_model extends CI_Model { 
         function insert_captcha($captcha){ 
         //... 
         //return true if it works; false otherwise 
         } 
        } 
    
  • 在控制器功能,您可以使用它:

    $this->load->model('captcha_model'); 
    $this->captcha_model->insert_captcha($captcha);