2015-09-17 257 views
3

我目前正在使用Codeigniter。我正在嘗試創建一個註冊頁面。 註冊在視圖文件中。在填寫註冊表格後,我想將用戶的信息發送給控制器。並且在我希望它檢查信息是否有效之後(用戶名尚未使用..有效的電子郵件地址等)。如果它是真的,則將相同的信息發送到添加到數據庫的Model。如果它是假的,所以加載視圖註冊頁面。我發現很多話題都是關於如何從控制器發送變量來查看(在CodeIgniter網站上向View添加動態數據)或控制器來進行建模,但沒有發現任何有關view-> controller的有用信息。這裏是我想做的事:CodeIgniter如何將視圖中的變量傳遞給控制器​​

VIEW       CONTROLER 
    _______________    ______________________ 
    |REGISTRATION:| -----------> |Check valid argument| 
    ---------------    ---------------------- 
      /|\     |  | 
       |___________________| If it's valid information 
    (if no valid)       | 
              | 
              \/
             MODEL 
            ____________________________ 
            |Add information to database| 
            ----------------------------- 

這是我的形式:

<h1>create a new account</h1> 
<?php echo validation_errors();?> 
<?php echo form_open('index.php/add_db');?> 
    <label for='name'>Name</label> 
    <input type='text' size='20' id='name' name='name'/> 
    <br /> 
    <label for='last_name'>Last_Name</label> 
    <input type='text' size='20' id='last_name' name='last_name'/> 
    <br /> 
    <label for='username'>Username</label> 
    <input type='text' size='20' id='username' name='username'/> 
    <br /> 
    <label for='password'>Password</label> 
    <input type='password' size='20' id='username' name='password'/> 
    <br /> 
    <label for='confirmation_password'>Password confirmation</label> 
    <input type='password' size='20' id='password' name='password'/> 
    <br /> 
    <input type="submit"/> 
</form> 

這是我的控制器文件

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); 

class Add_db extends CI_Controller 
{ 
    function __construct() 
    { 
     parent:: __construct(); 
     $this->load->database(); 
    } 

    function index() 
    { 
     //check if the password does match 
     //check before if the username is not already user 
     //open the model function which add to the database :) 
    } 
} 

我不知道這是否是更好的檢查用戶在模型中的信息。因爲我知道模型處理數據庫和查詢。 否則控制器會處理計算部分,因此控制器可能更適合執行此任務。 但沒關係。是否有可能發送像view ----> controller這樣的信息? 還是讓我找到另一種檢查信息的方式? 像控制器 - >查看 - >模型?

感謝

+1

做Ajax請求控制器/法從視圖 –

+1

看到完整的工作代碼驗證,查詢,保存數據,如果表單驗證失敗,在我的個人資料鏈接,也有一個工作演示' - >' – Viral

+0

@ S7_0你檢查下面的答案 –

回答

1

嘗試使用此選項,

首先從視圖中的數據發送到控制器和控制器檢查數據是否有效(服務器端驗證),如果有效,則發送到模塊說函數名check_user_data如果該函數檢查密碼是否匹配,則用戶名不是用戶,如果發現它是ok然後調用新函數說save_user_data並插入用戶數據,如果它是不好然後從該函數返回false到控制器。

你的流程:

在您選擇的用戶數據發送到控制器,然後調用模塊函數來檢查用戶信息是否正確,如果是,則發送的數據插入到模塊。

這裏您正在對模塊進行兩次調用。

用這種方法你可以減少no。控制器和模塊之間的通話。

+0

你好, 是不是更好地調用兩個其他模塊留組織?像: 查看:前端 控制器:後端/計算器 型號:SQL查詢 –

1

你能做到這樣

function __construct() 
    { 
     parent:: __construct(); 
     $this->load->database(); 
     $this->load->helper(array('form', 'url')); 
     $this->load->library('form_validation'); 
    } 

    function index(){ 

     //first set the validation rules 
     $this->form_validation->set_rules('name', 'Name', 'required'); 
     $this->form_validation->set_rules('last_name', 'Last Name', 'required'); 
     $this->form_validation->set_rules('username', 'User Name', 'required'); 
     //re_password is the input field name of confirm password 
     $this->form_validation->set_rules('password', 'Confirm password', 'trim|required|matches[re_password]'); 

      if ($this->form_validation->run() == FALSE) { 
       //return to data form again 
       $this->load->view('myform'); 
      } 
      else{ 
       //if validation is ok, then save data in db 
       //this is the way that catch, data coming from view in the controller 
       $name  = $this->input->post('name'); 
       $last_name = $this->input->post('last_name'); 
       $username = $this->input->post('username'); 
       $password = $this->input->post('password'); 

       // then you can send these date to database 
       //to send to db using array, array keys should match with the db table column names 
       $data_to_db['name']  = $name; 
       $data_to_db['last_name'] = $last_name; 
       $data_to_db['username'] = $username; 
       $data_to_db['password'] = $password; 

       //this model should be loaded in this controller 
       //send data from controller to model 
       $this->model_name->insert($data_to_db); 

     } 
} 

在模型中,應該有插入功能

public function insert($data_to_db){ 
     $this->db->insert('table_name', $data_to_db); 
    } 
+0

謝謝!否則,在else塊中。爲了將以下變量$ name,$ last_name等發送到數據庫,我寧願在模型中執行它。 但我並沒有真正發現谷歌關於從控制器到模型的傳遞變量有趣的事情。 那麼如何將它發送到模型以將它們添加到數據庫? (我知道如何添加它們,但我不知道如何發送變量從控制器 - >型號) 謝謝 –

相關問題