2013-08-16 66 views
1

我想用CodeIgniter建立一個註冊系統。我有一個名爲用戶用下面的代碼控制器:用戶激活註冊CodeIgniter

class User extends CI_Controller{ 
    public function __construct() 
    { 
     parent::__construct(); 
     $this->load->model('user_model'); 
    } 
    public function index() 
    { 
     if(($this->session->userdata('user_name')!="")) 
     { 
      $this->welcome(); 
     } 
     else{ 
      $data['title']= 'Home'; 
      $this->load->view('header_view',$data); 
      $this->load->view("registration_view.php", $data); 
      $this->load->view('footer_view',$data); 
     } 
    } 
    public function welcome() 
    { 
     $data['title']= 'Welcome'; 
     $this->load->view('header_view',$data); 
     $this->load->view('welcome_view.php', $data); 
     $this->load->view('footer_view',$data); 
    } 
    public function login() 
    { 
     $email=$this->input->post('email'); 
     $password=md5($this->input->post('pass')); 

     $result=$this->user_model->login($email,$password); 
     if($result) $this->welcome(); 
     else  $this->index(); 
    } 
    public function thank() 
    { 
     $data['title']= 'Thank'; 
     $this->load->view('header_view',$data); 
     $this->load->view('thank_view.php', $data); 
     $this->load->view('footer_view',$data); 
    } 
    public function registration() 
    { 
     $this->load->library('form_validation'); 
     // field name, error message, validation rules 
     $this->form_validation->set_rules('user_name', 'User Name', 'trim|required|min_length[4]|xss_clean'); 
     $this->form_validation->set_rules('email_address', 'Your Email', 'trim|required|valid_email'); 
     $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]'); 
     $this->form_validation->set_rules('con_password', 'Password Confirmation', 'trim|required|matches[password]'); 

     if($this->form_validation->run() == FALSE) 
     { 
      $this->index(); 
     } 
     else 
     { 
      $this->user_model->add_user(); 
      $this->thank(); 
     } 
    } 
    public function logout() 
    { 
     $newdata = array(
     'user_id' =>'', 
     'user_name' =>'', 
     'user_email'  => '', 
     'logged_in' => FALSE, 
     ); 
     $this->session->unset_userdata($newdata); 
     $this->session->sess_destroy(); 
     $this->index(); 
    } 
} 

到目前爲止好。如果我進入註冊頁面,我會顯示註冊表單。如果我發送表單並通過表單驗證檢查,我會得到成功頁面,如果表單有錯誤,我會返回表單並返回一些錯誤消息。

現在我想要做的就是數據庫的東西。我對如何從註冊表單獲取POST值到我的數據庫有一些想法,但不知道如何檢查用戶名或電子郵件是否已經存在,如果有,請在註冊表單中顯示該錯誤。當我在表格中註冊時,如何將激活到用戶電子郵件發送到我的網站上的活動帳戶。

這裏是我的登記表視圖:

<div id="content"> 
<div class="signup_wrap"> 
<div class="signin_form"> 
    <?php echo form_open("user/login"); ?> 
     <label for="email">Email:</label> 
     <input type="text" id="email" name="email" value="" /> 
     <label for="pass">Password:</label> 
     <input type="password" id="pass" name="pass" value="" /> 
     <input type="submit" class="" value="Sign in" /> 
    <?php echo form_close(); ?> 
</div><!--<div class="signin_form">--> 
</div><!--<div class="signup_wrap">--> 
<div class="reg_form"> 
<div class="form_title">Sign Up</div> 
<div class="form_sub_title">It's free and anyone can join</div> 
<?php echo validation_errors('<p class="error">'); ?> 
    <?php echo form_open("user/registration"); ?> 
     <p> 
      <label for="user_name">User Name:</label> 
      <input type="text" id="user_name" name="user_name" value="<?php echo set_value('user_name'); ?>" /> 
     </p>   
     <p> 
      <label for="email_address">Your Email:</label> 
      <input type="text" id="email_address" name="email_address" value="<?php echo set_value('email_address'); ?>" /> 
     </p> 
     <p> 
      <label for="password">Password:</label> 
      <input type="password" id="password" name="password" value="<?php echo set_value('password'); ?>" /> 
     </p> 
     <p> 
      <label for="con_password">Confirm Password:</label> 
      <input type="password" id="con_password" name="con_password" value="<?php echo set_value('con_password'); ?>" /> 
     </p>   
     <p> 
      <input type="submit" class="greenButton" value="Submit" /> 
     </p> 
    <?php echo form_close(); ?> 
</div><!--<div class="reg_form">-->  
</div><!--<div id="content">--> 

和模塊: -

class User_model extends CI_Model { 

    public function __construct() 
    { 
     parent::__construct(); 
    } 
    function login($email,$password) 
    { 
     $this->db->where("email",$email); 
     $this->db->where("password",$password); 

     $query=$this->db->get("user"); 
     if($query->num_rows()>0) 
     { 
      foreach($query->result() as $rows) 
      { 
       //add all data to session 
       $newdata = array(
         'user_id'  => $rows->id, 
         'user_name'  => $rows->username, 
         'user_email' => $rows->email, 
         'logged_in'  => TRUE, 
        ); 
      } 
       $this->session->set_userdata($newdata); 
       return true;    
     } 
     return false; 
    } 
    public function add_user() 
    { 
     $data=array(
      'username'=>$this->input->post('user_name'), 
      'email'=>$this->input->post('email_address'), 
      'password'=>md5($this->input->post('password')) 
      ); 
     $this->db->insert('user',$data); 
    } 
} 
+0

對於用戶名或電子郵件存在驗證,你可以在你的應用程序擴展CI驗證庫/庫文件夾,然後有自己的功能。然後,您可以像使用CI驗證功能一樣使用它。數據庫的東西必須在模型規則中完成。發送電子郵件需要使用電子郵件幫手。 – Nishanthan

+0

@Nish如何使用電子郵件幫助器發送激活 –

+0

$ CI-> load-> library('email'); $ CI-> email-> initialize($ CI-> config-> item('email_config')); $($ from,$ fromName); $ CI-> email-> from($ from,$ fromName); ($ to); $ email-> to($ to); $ CI-> email-> subject($ subject); $ CI-> email-> message($ body); $ CI-> email-> send(); – Nishanthan

回答

1

變化:

$this->form_validation->set_rules('user_name', 'User Name', 'trim|required|min_length[4]|xss_clean'); 
$this->form_validation->set_rules('email_address', 'Your Email', 'trim|required|valid_email'); 

$this->form_validation->set_rules('user_name', 'User Name', 'trim|required|min_length[4]|is_unique[users.user_name]'); 

$this->form_validation->set_rules('email_address', 'Your Email', 'trim|required|min_length[4]|valid_email|is_unique[users.email_address]'); 

如果您Form_validation.php沒有is_unique()功能,然後補充:

public function is_unique($str, $field) 
{ 
    list($table, $field) = explode('.', $field); 

    if (isset($this->CI->db)) 
    { 
     $query = $this->CI->db->limit(1)->get_where($table, array($field => $str)); 
     return $query->num_rows() === 0; 
    } 

    return FALSE; 
} 
+0

謝謝,以及註冊後激活用戶怎麼樣 –

+0

users.email或users.email_address ?? –

+0

對不起,它的email_address –