2013-08-16 4 views
1

CodeIgniter를 사용하여 등록 시스템을 구축하려고합니다. 다음 코드로 User라는 컨트롤러가 있습니다.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 값을 가져올 수있는 방법에 대한 아이디어가 있지만 사용자 이름이나 전자 메일이 이미 있는지 확인할 수있는 방법이 없습니다. 그렇다면 등록 양식에 오류를 표시하십시오. 양식에 등록 할 때 내 사이트의 활성 계정으로 사용자 이메일에 활성화를 어떻게 보내면됩니까?

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 유효성 검사 기능과 동일한 방식으로 사용할 수 있습니다. DB 물건은 모델 규칙에서 수행해야합니다. 이메일을 보내려면 이메일 도우미를 사용해야합니다. – Nishanthan

+0

@ 니스 어떻게 전자 메일 도우미를 사용하여 정품 인증을 보낼 수 있습니까? –

+0

$ CI-> load-> library ('email'); $ CI-> email-> initialize ($ CI-> config-> item ('email_config')); $ CI-> email-> from ($ from, $ fromName); $ CI-> 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]'); 
- :

<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">--> 

및 모듈 :

여기 내 등록 양식보기의 당신의 Form_validation.phpis_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 –