2012-12-14 42 views
0

我是CI中的新學習者,並且在我的項目中遵循此CI簡單登錄庫(see here),除了如果我想在數據庫中添加更多字段,一切工作都很好,表,我如何創建和獲取新添加的字段?Codeigniter在simplelogin庫中添加字段

這個圖書館的出處只有'id','username','email'和'password'字段,如果我想添加諸如'address'這樣的字段,並且使它在創建用戶時可用$this->simplelogin->create('user', '[email protected]', 'password', 'address', true);並取$this->simplelogin->get_data_user('address');

謝謝。

回答

1

您可以更改:

  • 添加屬性

    private $ address_field ='address';在數據庫//地址

//確保在你的數據庫必須有場address

長葛函數來創建():

function create($user = '', $email = '', $password = '', $address = '', $auto_login = TRUE) 
{ 
     // Check data is set 
     if ($user == '' || $password == '' || $email == '') 
      return FALSE; 

     // Email or User already exists | Probably will not need to check the `address` 
     $this->CI->db->where($this->user_field, $user); 
     $this->CI->db->or_where($this->email_field, $email); 
     $query = $this->CI->db->get($this->user_table); 
     if ($query->num_rows() > 0) 
      return FALSE; 

     // Create user into the database 
     $data = array($this->user_field=>$user, $this->email_field=>$email, $this->password_field=>crypt($password, $this->salt), $this->address_field=>$address); 
     if (!$this->CI->db->insert($this->user_table, $data)) 
      return FALSE; 

     // Automatically login to created account 
     if ($auto_login) {   
      $this->CI->session->sess_destroy(); 
      $this->CI->session->sess_create(); 
      $this->CI->session->set_userdata(array('username'=>$user, 'email'=>$email,'address'=>$address)); 
     } 

     return TRUE; // Created! 
    } 

長葛功能get_data_user():

function get_data_user($param = 'username') { // default is get session username 
     $sess = $this->CI->session->userdata($param); 
     if (!$sess) 
      return ''; 

     return $sess; 
    } 

更改登錄功能中的第106行:

$this->CI->session->set_userdata(array('username'=>$row[$this->user_field], 'email'=>$row[$this->email_field],'address'=>$row[$this->address_field])); // Set session data 
+0

這是非常靈活的方式來擴展您提供的示例中的字段,非常感謝。 – conmen

0

恐怕沒有簡單的方法來做到這一點

您需要修改庫Simplelogin.php以類似的東西 記裸您需要的地址字段添加到表

<?php 

if (!defined('BASEPATH')) 
    exit('No direct script access allowed'); 
/* 
    SimpleLogin 0.0.3 https://launchpad.net/simplelogincodeigniter 
    A CodeIgniter 2.X library for do a login system simple 
    Author: costales http://launchpad.net/~costales 
    Based on Anthony Graddy & Alex Dunae & Hitesh Ubharani's versions 
    Licensed under LGPL3 
*/ 

class Simplelogin { 

    private $CI; 
    private $user_table  = 'users'; 
    private $user_field  = 'username'; 
    private $email_field = 'email'; 
    private $address_field = 'address'; // add the name of the field in the database 
    private $password_field = 'password'; 
    private $salt   = '$2a$07$R.gJbYU2N.FmA4hPp1y2CN$'; 

    public function __construct() { 
     $this->CI = & get_instance(); 
    } 

    /* Create a user account 
    * 
    * @access public 
    * @param string 
    * @param string 
    * @param string 
    * @param bool 
    * @return bool 
    */ 

    function create($user = '', $email = '', $password = '', $address = '', $auto_login = TRUE) { 
     // Check data is set 
     if ($user == '' || $password == '' || $email == '') 
      return FALSE; 

     // Email or User already exists 
     $this->CI->db->where($this->user_field, $user); 
     $this->CI->db->or_where($this->email_field, $email); 
     $query = $this->CI->db->get($this->user_table); 
     if ($query->num_rows() > 0) 
      return FALSE; 

     // Create user into the database 
     $data = array(
      $this->user_field  => $user, 
      $this->email_field => $email, 
      $this->address_field => $address, 
      $this->password_field => crypt($password, $this->salt) 
     ); 
     if (!$this->CI->db->insert($this->user_table, $data)) 
      return FALSE; 

     // Automatically login to created account 
     if ($auto_login) { 
      $this->CI->session->sess_destroy(); 
      $this->CI->session->sess_create(); 
      $this->CI->session->set_userdata(array(
       'username' => $user, 
       'email' => $email, 
       'address' => $address 
      )); 
     } 

     return TRUE; // Created! 
    } 

    /* Delete user 
    * 
    * @access public 
    * @param integer 
    * @return bool 
    */ 

    function delete($username = '') { 
     if ($username == '') 
      return FALSE; 

     $data = array($this->user_field => $username); 
     if ($this->CI->db->delete($this->user_table, $data)) 
      return TRUE; // Deleted 
     else 
      return FALSE; // Not deleted 
    } 

    /* Login user 
    * 
    * @access public 
    * @param  string 
    * @param  string 
    * @return bool 
    */ 

    function login($user = '', $password = '') { 
     // Data was sent 
     if ($user == '' OR $password == '') 
      return FALSE; 

     // Check if already logged in 
     if ($this->CI->session->userdata('username') == $user) 
      return TRUE; 

     // Check user exists 
     $data = array($this->user_field => $user); 
     $query   = $this->CI->db->get_where($this->user_table, $data); 
     if ($query->num_rows() != 1) 
      return FALSE; 

     // Check against password 
     $row = $query->row_array(); 
     if (crypt($password, $this->salt) != $row[$this->password_field]) 
      return FALSE; 

     $this->CI->session->sess_destroy(); // Destroy old session 
     $this->CI->session->sess_create(); // Create a fresh, brand new session 

     $this->CI->session->set_userdata(
       array(
        'username' => $row[$this->user_field], 
        'email' => $row[$this->email_field], 
        'address' => $row[$this->address_field] 
     )); // Set session data 

     return TRUE; // Login was successful 
    } 

    /* Logout user 
    * 
    * @access public 
    * @return void 
    */ 

    function logout() { 
     $this->CI->session->sess_destroy(); //Destroy session 
    } 

    /* Check if the user is logged 
    * @access public 
    * @return bool 
    */ 

    function is_logged() { 
     if ($this->CI->session->userdata('username')) 
      return TRUE; 
     else 
      return FALSE; 
    } 

    /* Get current username or email 
    * @access public 
    * @param string 
    * @return string 
    */ 

    function get_data_user($param = 'username') { 
     if ($param == 'username') 
      return $this->CI->session->userdata('username'); 
     if ($param == 'email') 
      return $this->CI->session->userdata('email'); 
     if ($param == 'address') 
      return $this->CI->session->userdata('address'); 
     return ''; 
    } 

    /* Change password for a user 
    * @access public 
    * @param string 
    * @param string 
    * @param string 
    * @return bool 
    */ 

    function change_password($user = '', $old_password = '', $new_password = '') { 
     // Check data is set 
     if ($user == '' || $old_password == '' || $new_password == '') 
      return FALSE; 

     // Check old password for this user 
     $data = array($this->user_field  => $user, $this->password_field => crypt($old_password, $this->salt)); 
     $query    = $this->CI->db->get_where($this->user_table, $data); 
     if ($query->num_rows() != 1) 
      return FALSE; 

     // Update password 
     $data = array($this->password_field => crypt($new_password, $this->salt)); 
     $this->CI->db->where($this->user_field, $user); 
     if (!$this->CI->db->update($this->user_table, $data)) 
      return FALSE; 

     return TRUE; 
    } 

    /* Change email for a user 
    * @access public 
    * @param string 
    * @param string 
    * @return bool 
    */ 

    function change_email($user = '', $new_email = '') { 
     // Check data is set 
     if ($user == '' || $new_email == '') 
      return FALSE; 

     // Update email 
     $data = array($this->email_field => $new_email); 
     $this->CI->db->where($this->user_field, $user); 
     if (!$this->CI->db->update($this->user_table, $data)) 
      return FALSE; 

     // Set new internal email 
     $this->CI->session->set_userdata(array('email' => $new_email)); 
     return TRUE; 
    } 

} 
相關問題