會員系統-上篇
一般來說,大部分的網站都會有會員系統的架構,而很多的功能也都依賴著會員系統來區分不同的使用者,還有保存使用者的設定值,個人環境設定等。
所以我們第一個內容就是建立一個簡易的會員系統。
一般會員系統通常會有以下幾個基本功能:
- 會員註冊
- 會員登入
- 會員登出
- 會員資料修改
所以我們現在要建立的基本功能就以上面這四項目為主。
首先我們從資料表開始,會員資料表我們先簡單的建立如下的資料表,只要能保存使用者的帳號,密碼,最後一次登入來源,時間,帳號建立時間。
所以我們的資料表應該會長的像是這樣:
| id | int,auto_increment |
| username | varchar(20) |
| password | varchar(50) |
| 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的部份的說明.






迴響
或者說是剛看完http://www.ezluk.org/ 的人
期待你的下篇
如果沒有也沒關係啦~~就問問給你鼓勵而已
畢竟我知道你應該也很忙 :-)