zoukankan      html  css  js  c++  java
  • ECMall注册机制简要分析

    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基础类,通过

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

    来获取app和act。

    如果是注册,act=member那么

    1 $app_class_name = ucfirst($app) . 'App';
    2 /* 实例化控制器 */
    3 $app = new $app_class_name();

    这里的$app = new MemberApp,调用MemberApp类里面的register方法。而在register方法里面,获取注册信息。通过global.lib.php中的ms方法。

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

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

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

    包含了default.passport.php中的DefaultPassport类,而他又继承了BasePassport,他有几行代码

    1 $user_class_name = ucfirst($this->_name) . 'PassportUser';
    2 $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)方法来进行数据库处理。从而完成了注册功能。

    01 /**
    02  *  添加一条记录
    03  *
    04  *  @author Garbin
    05  *  @param  array $data
    06  *  @return mixed
    07  */
    08 function add($data, $compatible = false)
    09 {
    10     if (empty($data) || !$this->dataEnough($data))
    11     {
    12         return false;
    13     }
    14  
    15     $data = $this->_valid($data);
    16     if (!$data)
    17     {
    18         $this->_error('no_valid_data');
    19         return false;
    20     }
    21     $insert_info = $this->_getInsertInfo($data);
    22     $mode = $compatible ? 'REPLACE' : 'INSERT';
    23  
    24     $this->db->query("{$mode} INTO {$this->table}{$insert_info['fields']} VALUES{$insert_info['values']}");
    25     $insert_id = $this->db->insert_id();
    26     if ($insert_id)
    27     {
    28         if ($insert_info['length'] > 1)
    29         {
    30             for ($i = $insert_id; $i < $insert_id + $insert_info['length']; $i++)
    31             {
    32                 $id[] = $i;
    33             }
    34         }
    35         else
    36         {
    37             /* 添加单条记录 */
    38             $id = $insert_id;
    39         }
    40     }
    41  
    42     return $id;
    43 }

    登录机制

    ecmall电子商务系统的登陆,过程其实非常复杂。首先他是通过调用malldefaultlogin.html来调用登陆页面,调用的程序是通过appfrontend.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();这里就是来声明登陆对象的.

  • 相关阅读:
    PHP字符串操作
    设置WINDOWS SERVER 2008修改远程桌面连接数
    ThinkPHP小知识点
    thinkphp5 url传参
    炫酷:一句代码实现标题栏、导航栏滑动隐藏。ByeBurger库的使用和实现
    数学API Math.atan() 和Math.atan2() 三角函数复习
    自定义view实现水波纹效果
    Android仅2步实现 滚粗 汉堡导航栏效果~ 全新底部导航交互(滑动隐藏)
    安卓开发遇到Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
    在安卓代码中dp 和 sp 换算px
  • 原文地址:https://www.cnblogs.com/farcall/p/3765044.html
Copyright © 2011-2022 走看看