會員系統-上篇

Posted on 2007-10-21 19:48:41 by darkhero

一般來說,大部分的網站都會有會員系統的架構,而很多的功能也都依賴著會員系統來區分不同的使用者,還有保存使用者的設定值,個人環境設定等。
所以我們第一個內容就是建立一個簡易的會員系統。

一般會員系統通常會有以下幾個基本功能:

  1. 會員註冊
  2. 會員登入
  3. 會員登出
  4. 會員資料修改


所以我們現在要建立的基本功能就以上面這四項目為主。

首先我們從資料表開始,會員資料表我們先簡單的建立如下的資料表,只要能保存使用者的帳號,密碼,最後一次登入來源,時間,帳號建立時間。
所以我們的資料表應該會長的像是這樣:

會員資料表 members
id int,auto_increment
username varchar(20)
password varchar(50)
email varchar(100)
last_login_ip
 
varchar(15)
last_login_datetime datetime
created datetime


接著我們建立對應使用的會員 Model

<?php
class Member extends AppModel {

    var $name = 'Member';
    var $validate = array(
    'usernmae' => VALID_NOT_EMPTY,
    'password' => VALID_NOT_EMPTY
    );


    /**
     * 使用者登入檢查
     *
     * @param string $username
     * @param string $password
     * @return array
     */
    function login($username,$password){
        $login_data = array('username'=>$username,
            'password' => md5($password)
        );
        $rows = $this->find($login_data);
        if (count($rows) > 0) {
            $this->id = $rows['id'];
            $rows['last_login_ip'] = $_SERVER['REMOTE_ADDR'];
            $rows['last_login_datetime'] = date('Y-m-d H:i:s');
            $this->save($rows);
            return $rows;
        }else{
            return false;
        }
    }
   
    /**
     * 保存一名註冊的新使用者
     *
     * @param array $data
     * @return bool
     */
    function registe_new($data){
        $this->create();
        return $this->save($data);
    }
   
    /**
     * 更新一名使用者的資料
     *
     * @param array $data
     * @return bool
     */
    function update_user_data($data){
        return $this->save($data);
    }
}
?>

以上的資料,我們基本都用 CakePHP 內建的功能完成。

接著是 Contoller 的部份,也就是負責邏輯流程的部份。

<?php
class MembersController extends AppController {
    var $name = 'Members';

    function modify(){
        if (!empty($this->data)) {
            $this->cleanUpFields();
            if ($this->Member->update_user_data($this->data)) {
                $this->Session->setFlash('您的資料已經更新完成!');
                exit;
            }else{
                $this->Session->setFlash('更新資料失敗,請檢查資料是否有錯誤。');
                $this->render('modify');
                exit;
            }
        }else{
            $this->render('modify');
            exit;
        }
    }
   
    /**
     * 使用者註冊表單。
     *
     */
    function register(){
        if (!empty($this->data)) {
            $this->cleanUpFields();
            if ($this->Member->save($this->data)) {
                if ($this->params['ret_url']) {
                    $ret_url = $this->params['ret_url'];
                    $this->flash('您已經註冊完成!',$ret_url,5);
                }else {
                    $this->flash('您已經註冊完成!','/',5);
                }
                exit;
            }else{
                $this->Session->setFlash('註冊失敗,請檢查您輸入的資料。');
                $this->render('register_form');
                exit;
            }
        }else{
            $this->render('register_form');
        }
    }

    /**
     * 使用者註冊功能,若是沒有 Post 資料進來,就直接秀出登入表單
     *
     */
    function login(){
        if (!empty($this->data)) {
            $this->cleanUpFields();
            if ($member_data = $this->Member->login($this->data['username'],$this->data['password'])) {
                if ($this->params['ret_url']) {
                    $ret_url = $this->params['ret_url'];
                    $this->redirect($ret_url);
                }else {
                    $this->flash('您已經登入完成!','/',5);
                }
                exit;
            }else{
                $this->render('login_form');
                exit;
            }
        }else{
            $this->render('login_form');
        }
    }

    /**
     * 使用者登出功能,只要刪除Session中的使用者資料即可。
     * 完成後導回首頁。
     *
     */
    function logout(){
        $this->Session->del('memberInfo');
        $this->flash('您已經登出,感謝您的使用!','/');
    }
}
?>

下篇我們將繼續view的部份的說明.

Tags: CakePHP

加入書籤: 收藏這篇文章到HEMiDEMi

迴響

怎麼沒有下篇阿?? Post By FUNction at 2008-05-11 10:53:28
我是個CakePHP 新手
或者說是剛看完http://www.ezluk.org/ 的人
期待你的下篇
如果沒有也沒關係啦~~就問問給你鼓勵而已
畢竟我知道你應該也很忙 :-)

我要留言!

壹拾 加 捌 等於