zoukankan      html  css  js  c++  java
  • 详细讲解:使用tp3.2.3完成简单的注册登录功能

      使用3.2.3进行了一个简单不过的注册登录功能,界面介绍:

    1、注册:

    2、登录:

    3、登录成功后:

     

    没错,就是简单的让你特别容易上手,上面运用到的知识有:

    (1)自动验证、自动完成

    (2)session保存登录名(目的,为了最后显示欢迎界面)

    目录:

     实现步骤:

    1、在ApplicationHome下创建上面的目录文件

    2、在数据中创建一个名为think_login的数据库,此数据库中存在一个think_user表,表里有以下字段

    3、在HomeConfigconfig.php中进行连接数据库

    代码:

    <?php
    return array(
        //'配置项'=>'配置值'
        //连接数据库
        'DB_TYPE'      => 'mysql',//数据类型
        'DB_HOST'      => 'localhost',//服务器
        'DB_NAME'      => 'think_login',//数据库名
        'DB_USER'      => 'root',//连接数据库用户名
        'DB_PWD'       => 'root',//密码
        'DB_PREFIX'  => 'think_',//表前缀
        'DB_CHARSET' => 'utf8',//编码
    );

    3、在loginController.class.php中定义两个方法,一个是注册功能(register),一个登录功能(login):

    (1)注册功能:

     注册界面的访问地址为:index.php?c=login&a=register

    控制器中:loginController.class.php中的register方法

    代码:

    /**
         * 用户注册
         */
        public function register()
        {
            # 判断提交方式 做不同处理
            if (IS_POST) {
                # 实例化User对象
                $user = D('user');
    
                # 通过create()调用对应的模型进行自动验证 创建数据集
                if (!$data = $user->create()) {
                    # 防止输出中文乱码
                    header("Content-type: text/html; charset=utf-8");
                    # 输出对应的错误
                    # 例如:用户没有输入用户名,就提示
                    # 用户名不能为空
                    exit($user->getError());
                }
                
                //如果用户输入的都符合条件的话
                //插入数据库
                if ($id = $user->add($data)) {
    
                    $this->success('注册成功', 'index.php?c=user&a=userlist', 1);
                } else {
                    $this->error('注册失败');
                }
            } else {
                // 不带任何参数 自动定位当前操作的模板文件
                $this->display();
            }
        }
    View Code

    对应模型:UserModel.class.php

    注意:校验中的变量名对应的是视图中的name名,不是数据库中的字段哦

    代码:

    <?php
    namespace HomeModel;
    use ThinkModel;
    class UserModel extends Model {
        /**
         * 用户注册自动验证(静态验证:$_validate)
         * self::EXISTS_VALIDATE 或者0 存在字段就验证(默认)
         * self::MUST_VALIDATE 或者1 必须验证
         * self::VALUE_VALIDATE或者2 值不为空的时候验证
         */
        protected $_validate = array(
            array('user_name', 'require', '用户名不能为空'),
            array('user_name', '', '该用户已经被注册', 0, 'unique', 1),
            array('user_pwd', 'require', '密码不能为空'),
            # 用正则表达式验证密码, [必须包含字母+数字,且长度6~20字节]
            array('user_pwd', '/^(?=.*[A-Za-z])(?=.*[0-9])[A-Za-z0-9]{6,20}$/', '密码格式不对:必须包含字母+数字,且长度6~20字节', 0),
            array('user_repwd', 'require', '确认密码不能为空'),
            # 验证两次输入密码是否一致
            array('user_repwd', 'user_pwd', '两次密码不一致', 0, 'confirm'),
        );
    
        /**
         * 自动完成(用户注册成功之后)
         * @auther_start    小仓鼠
         * @auther_end      2018.04.15  小仓鼠
         * @return      无
         */
        protected $_auto = array(
            # 对password字段在新增和编辑的时候使md5函数处理
            array('user_pwd', 'md5', 3, 'function'),
        );
    }

    对应视图中:register.html

    代码:

    <html>
        <head>
            <meta charset="UTF-8">
            <title>新用户注册</title>
        </head>
    
        <body>
            <h2>注册用户界面</h2>
            <form method="POST" style="border:1px solid #000; text-align:center; 300px">&nbsp;户&nbsp;名:
                <input type="text" name="user_name" placeholder="请输入用户名">
                <br/>
                <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码:
                <input type="password" name="user_pwd" placeholder="请输入密码">
                <br/>
                <br>
                确认密码:
                <input type="password" name="user_repwd" placeholder="请确认">
                <br/>
                <br/>
                <input type="submit" value="注册">
                <a href="index.php?c=login&a=login">已经注册,直接登录</a>
            </form>
        </body>
    </html>

    (2)登录功能: 

    登录界面的访问地址为:index.php?c=login&a=login

    控制器中:loginController.class.php中的login方法

    代码:

     /**
         * 用户登录
         */
        public function login()
        {
            # 清空session之前保留的数据
            session('uname',null);
    
            # 判断提交方式
            if (IS_POST) {
                # 实例化Login对象
                $login = D('login');
                
                # 通过create()调用对应的模型进行自动验证 创建数据集
                # $data = 获取用户输入的信息
                if (!$data = $login->create()) {
                    # 防止输出中文乱码
                    header("Content-type: text/html; charset=utf-8");
                    # 输出对应的错误
                    # 例如:用户没有输入用户名,就提示
                    # 用户名不能为空
                    exit($login->getError());
                }
    
                // 组合查询条件
                $where = array();
                # $where['user_name']:数据库中的user_name字段
                # $data['user_name':与此模型同名视图下的name名
                $where['user_name'] = $data['user_name'];
                $where['user_repwd'] = $data['user_repwd'];
                # 相当于:
                # select * from think_user where user_name=用户输入的user_name and user_repwd=用户输入的密码;
                # result输出为一个二维数组
                $result = $login->where($where)->select();
    
                if ($result) {  
                    # 保存session
                    # 将$result['user_name']值赋值给session,名字叫uname               
                    session('uname', $result[0]['user_name']);
                             
                    $this->success('登录成功,正跳转至用户列表...','index.php?c=user&a=userlist', 1);
                } else {
                    $this->error('登录失败,用户名或密码不正确!');
                }
            } else {
                $this->display();
            }
        }
    View Code

     对应的模型:loginModel.class.php

    代码:

    <?php
    namespace HomeModel;
    use ThinkModel;
    class LoginModel extends Model{
        //重新定义表
        protected $tableName = 'user';
    
        /**
         * 自动验证(静态验证用:$_validate)
         * 手册中:模型->自动验证、自动完成
         * self::EXISTS_VALIDATE 或者0 存在字段就验证(默认)
         * self::MUST_VALIDATE 或者1 必须验证
         * self::VALUE_VALIDATE或者2 值不为空的时候验证
         */
        protected $_validate = array(
            array('user_name', 'require', '用户名不能为空'),
            array('user_pwd', 'require', '密码不能为空'),
            array('user_repwd', 'require', '确认密码不能为空'),
            # 验证两次输入密码是否一致
            array('user_repwd', 'user_pwd', '两次密码不一致', 0, 'confirm'),
        );
    
        /**
         * 自动完成
         * 静态方式:在模型类里面通过$_auto属性定义处理规则。
         */
        protected $_auto = array(
            /* 登录时自动完成 */
            # 对password字段使用md5函数处理
            array('password', 'md5', 3, 'function'),
        );
    }

     对应视图中:login.html

    代码:

    <html>
            <head>
                <meta charset="UTF-8">
                <title>登录</title>
            </head>
        
            <body>
                <h2>登录用户界面</h2>
                <form method="POST" style="border:1px solid #000; text-align:center; 300px">&nbsp;户&nbsp;名:
                    <input type="text" name="user_name" placeholder="请输入登录用户名">
                    <br/>
                    <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码:
                    <input type="password" name="user_pwd" placeholder="请输入登录密码">
                    <br/>
                    <br>
                    确认密码:
                    <input type="password" name="user_repwd" placeholder="请确认登录密码">
                    <br/>
                    <br/>
                    <input type="submit" value="登录">
                    <a href="index.php?c=login&a=register">还没有注册,去注册</a>
                </form>
            </body>
        </html>

    (3)登录成功后控制器:UserController.class.php

    以上就是整个简单的注册登录全部代码了,在实现功能中,当你对某个方法的最终显示效果不确定的时候,记得去打印出来看看,有必要的话必须要查看手册,手册上写的一清二楚,所以不要靠猜,只要你不确定这个方法的实际操作,一定要看手册哦,答应我!

  • 相关阅读:
    SQL Server 2008 如何查看与创建约束
    Hibernate的主键生成策略
    sql server的id字段设置为自动生成的,那么该怎么写insert语句呢?
    org.hibernate.AnnotationException: Collection has neither generic type or OneToMany.targetEntity() defined: com.bjsxt.model.Student.courses
    INSERT 语句与 FOREIGN KEY 约束"XXX"冲突。该冲突发生于数据库"XXX",表"XXX", column 'XXX。
    在排序数组中查找符合条件的数
    求二叉树中节点的最大距离
    设计包含min 函数的栈
    寻找链表的倒数第K个节点
    翻转句子中单词的顺序
  • 原文地址:https://www.cnblogs.com/finalanddistance/p/8847947.html
Copyright © 2011-2022 走看看