2012-02-19 73 views
0

我有一個通用的create函數提交一個新的用戶到數據庫 - 這工作正常。我在哪裏被卡住是以下。控制器幫助和功能

  • 我知道我需要註冊的用戶在帳戶登錄前點擊電子郵件中的鏈接。 當我運行create函數時,如何將其實現到我的if statement

  • 我有點困惑如何設置我的錯誤,如果有任何事情是正確的或錯誤的激活過程我目前使用$this->form_validation->set_message();設置消息。 我是否需要使用set_flashdata();?以及如何迴應這些觀點?

當我create一個新的用戶我在0默認userActive字段集,也是默認組設置爲users

控制器:

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

class Users extends CI_Controller { 


    public function index() 
    { 
     $data['companyName'] = $this->core_model->companyDetails()->coreCompanyName; 
     $data['pageTitle'] = "Create User"; 
     $this->load->view('frontend/assets/header', $data); 
     $this->load->view('frontend/users', $data); 
     $this->load->view('frontend/assets/footer'); 
    } 

    public function create(){ 

     //If form validation fails load previous page with errors else do the job and insert data into db 

     if($this->form_validation->run('createUser') == FALSE) 
     { 
      $data['success'] = ""; 
     }else{ 
      $username = $this->input->post('userName'); 
      $password = $this->input->post('userPassword'); 
      $firstname = $this->input->post('userFirstName'); 
      $lastname = $this->input->post('userLastName'); 
      $email = $this->input->post('userEmail'); 

      $passwordHash = $this->encrypt->sha1($password); // Lets encrypt the password why sha1? MD5 is for tossers 

      $activateCode = $this->_activateCode(10); 

      // If the data is correct follow through with db insert 

      if($this->users_model->createUser($username,$passwordHash,$firstname,$lastname,$email,$activateCode)) 
      { 
       $data['success'] = TRUE; 

       redirect('frontend/users/create','refresh'); 

      } 

     } 
     $data['companyName'] = $this->core_model->companyDetails()->coreCompanyName; 
     $data['pageTitle'] = "Create User"; 
     $this->load->view('frontend/assets/header', $data); 
     $this->load->view('frontend/user_create', $data); 
     $this->load->view('admin/assets/footer'); 

     echo get_class($this); 
     var_dump(method_exists($this, '_activateCode')); 
    } 

    function _userRegEmail($activateCode,$email,$firstname,$lastname){ 
     $data['companyName'] = $this->core_model->companyDetails()->coreCompanyName; 
     $data['companyEmail'] = $this->core_model->companyDetails()->coreCompanyEmail; 
     $data['companyContact'] = $this->core_model->companyDetails()->coreContactName; 
     $data['firstName'] = $firstName; 
     $data['lastName'] = $lastname; 
     $data['email'] = $email; 
     $data['activateCode'] = $activateCode; 

     $this->email->from($this->core_model->companyDetails()->coreCompanyEmail, $this->core_model->companyDetails()->coreCompanyName); 
     $this->email->to($email); 
     $this->email->subject($this->core_model->companyDetails()->coreCompanyName, 'User Registration Confirmation'); 

     $messageContent= $this->load->view('email_templates/userReg','', TRUE); 

     $this->email->message($messageContent); 

     //$this->email->send(); 
    } 

    function usersconfirm(){ 

     $activateCode = $this->uri->segment(3); 

     if($activateCode == '') 
     { 
      $this->form_validation->set_message('userConfirmError', 'Sorry you did not have a correct Activation Code.'); 
     } 
      $userConfirmed = $this->users_model->confirm_user($activateCode); 

      if($userConfirmed){ 
       $this->form_validation->set_message('userConfirmed', 'Thanks your account is now active you may login!'); 
      }else{ 
       $this->form_validation->set_message('userRecord', 'I am sorry we do not have any details with that Activation Code'); 
      } 
    } 

    function _username_check($username) 
    { 
     if($this->users_model->username_taken($username)) 
     { 
      $this->form_validation->set_message('username_check', 'Sorry the username %s is taken!'); 
      return FALSE; 
     }else{ 
      return TRUE; 
     } 
    } 

    function _email_check($email) 
    { 
     if($this->users_model->email_check($email)) 
     { 
      $this->form_validation->set_message('email_check','Sorry there is already a user with this %s'); 
      return FALSE; 
     }else{ 
      return TRUE; 
     } 

    } 

    function _activateCode($length) 
    { 
     return random_string('alnum', $length); 
    } 

} 

/* End of file users.php */ 
/* Location: ./application/controllers/users.php */ 

回答

0

你可以通過在if語句中檢查數據庫中的userActive來確定用戶是否點擊了激活鏈接。

當然可以使用閃存數據。您可以通過以下方式檢索閃存數據: $this->session->flashdata('item');可以回顯到視圖。

http://codeigniter.com/user_guide/libraries/sessions.html>閃存數據

+0

謝謝,我似乎有,我仍然被添加到數據庫中沒有電子郵件的任何跡象的問題。即使通過我設置的回調函數來檢查用戶,它也在添加 – 2012-02-21 00:11:58

+0

這是可以預料的:用戶在註冊時被添加到數據庫!當他們點擊鏈接時,電子郵件將他們的帳戶設置爲ACTIVE。除非用戶帳戶處於ACTIVE狀態,否則不會讓用戶進入該網站。因此,註冊 - >用戶在DB與account_active = 0;郵件已發送;點擊鏈接 - > account_active = 1 – stormdrain 2012-02-21 13:15:17

+0

我知道,但它仍然添加,即使用戶名管理存在,我沒有回電,但我得到驗證時,窗體是「必需」,但沒有超過。 – 2012-02-21 20:25:47