程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 分析ECMall的注冊與登錄機制

分析ECMall的注冊與登錄機制

編輯:關於PHP編程

ecmall的注冊流程index.php?app=member&act=register。

首先app是member,act是register方法。

index.php中。通過ecmall的startup方法來啟動,主要包含了eccore/ecmall.php,startup方法中包含eccore/controller/app.base.php和eccore/model/model.base.php基礎類,通過

$app = isset($_REQUEST['app']) ? trim($_REQUEST['app']) : $default_app;
$act = isset($_REQUEST['act']) ? trim($_REQUEST['act']) : $default_act; 

來獲取app和act。

如果是注冊,act=member那麼

$app_class_name = ucfirst($app) . 'App';
/* 實例化控制器 */
$app = new $app_class_name();

這裡的$app = new MemberApp,調用MemberApp類裡面的register方法。而在register方法裡面,獲取注冊信息。通過global.lib.php中的ms方法。

include(ROOT_PATH . '/includes/passport.base.php');
include(ROOT_PATH . '/includes/passports/' . MEMBER_TYPE . '.passport.php'.regissword.php

而在register中ms()函數中以下程序

include(ROOT_PATH . '/includes/passports/' . MEMBER_TYPE . '.passport.php');
$class_name  = ucfirst(MEMBER_TYPE) . 'Passport';
$ms = new $class_name();

包含了default.passport.php中的DefaultPassport類,而他又繼承了BasePassport,他有幾行代碼

$user_class_name = ucfirst($this->_name) . 'PassportUser';
$this->user = new $user_class_name();

所以程序裡面的$this -> user就是這麼來的。

$user_class_name其實就是includes/passports/default.passport.php中的DefaultPassportUser類。而他又extends了BasePassportUser,他調用了BasePassportUser中的_local_add()方法。而_local_add()方法通過調用model中的 member.model.php中的初始化數據,通過eccore/model/model.base.php中的BaseModel類下的function add($data, $compatible = false)方法來進行數據庫處理。從而完成了注冊功能。

    /**
     *  添加一條記錄
     *
     *  @author Garbin
     *  @param  array $data
     *  @return mixed
     */
    function add($data, $compatible = false)
    {
        if (empty($data) || !$this->dataEnough($data))
        {
            return false;
        }
        $data = $this->_valid($data);
        if (!$data)
        {
            $this->_error('no_valid_data');
            return false;
        }
        $insert_info = $this->_getInsertInfo($data);
        $mode = $compatible ? 'REPLACE' : 'INSERT';
        $this->db->query("{$mode} INTO {$this->table}{$insert_info['fields']} VALUES{$insert_info['values']}");
        $insert_id = $this->db->insert_id();
        if ($insert_id)
        {
            if ($insert_info['length'] > 1)
            {
                for ($i = $insert_id; $i < $insert_id + $insert_info['length']; $i++)
                {
                    $id[] = $i;
                }
            }
            else
            {
                /* 添加單條記錄 */
                $id = $insert_id;
            }
        }
        return $id;
    }

登錄機制

ecmall電子商務系統的登陸,過程其實非常復雜。首先他是通過調用mall\default\login.html來調用登陸頁面,調用的程序是通過app\frontend.base.php的login方法來調用來實現的。

if (!IS_POST)程序表示登陸頁面的顯示,通過$this->display('login.html')的調用來處理。ecmall的login.html頁面主要有以下幾個變量要傳遞,user_name,password,captcha三個變量,來用用於登陸驗證。$user_name = trim($_POST['user_name'])和$password = $_POST['password']主要是用來接受用戶名和密碼的。通過連接登陸中心$ms =& ms()來調用$ms->user->auth($user_name, $password)來進行登陸驗證的。

文件includes/global.lib.php中的function &ms()就是用來連接登陸中心的。 include(ROOT_PATH . '/includes/passports/' . MEMBER_TYPE . '.passport.php'); $class_name = ucfirst(MEMBER_TYPE) . 'Passport';$ms = new $class_name();這裡就是來聲明登陸對象的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved