0

I'm new learner in CI and follow this CI simple login library (see here) in my project, everything is work pretty fine with this simple library except of if I want to add some more fields in the database table, how can I create and fetch the new added field?

This library is origin come with 'id', 'username', 'email' and 'password' fields only, how if I want to add in field such as 'address', and make it usable in create a user $this->simplelogin->create('user', 'user@mail.com', 'password', 'address', true); and fetch $this->simplelogin->get_data_user('address'); in view?

Thanks.

4

2 回答 2

1

You can change:

  • Add property

    private $address_field = 'address'; // address in database

//Make sure that in your database must have the field address

Changge function create():

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!
    }

Changge function 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;
    }

Change line 106 in login function:

$this->CI->session->set_userdata(array('username'=>$row[$this->user_field], 'email'=>$row[$this->email_field],'address'=>$row[$this->address_field])); // Set session data
于 2012-12-14T04:33:16.300 回答
0

i am afraid there is no easy way to do it

you need to modify the library Simplelogin.php to something like that bare in mind you need to add the address field to the table

<?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;
    }

}
于 2012-12-14T04:21:41.473 回答