详细讲解:使用tp3.2.3完成简单的注册登录功能
使用3.2.3进行了一个简单不过的注册登录功能,界面介绍:
1、注册:
2、登录:
3、登录成功后:
没错,就是简单的让你特别容易上手,上面运用到的知识有:
(1)自动验证、自动完成
(2)session保存登录名(目的,为了最后显示欢迎界面)
目录:
实现步骤:
1、在Application\Home下创建上面的目录文件
2、在数据中创建一个名为think_login的数据库,此数据库中存在一个think_user表,表里有以下字段
3、在Home\Config\config.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(); } }
对应模型:UserModel.class.php
注意:校验中的变量名对应的是视图中的name名,不是数据库中的字段哦
代码:
<?php namespace Home\Model; use Think\Model; 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; width:300px"> 用 户 名: <input type="text" name="user_name" placeholder="请输入用户名"> <br/> <br> 密 码: <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(); } }
对应的模型:loginModel.class.php
代码:
<?php namespace Home\Model; use Think\Model; 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; width:300px"> 用 户 名: <input type="text" name="user_name" placeholder="请输入登录用户名"> <br/> <br> 密 码: <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
以上就是整个简单的注册登录全部代码了,在实现功能中,当你对某个方法的最终显示效果不确定的时候,记得去打印出来看看,有必要的话必须要查看手册,手册上写的一清二楚,所以不要靠猜,只要你不确定这个方法的实际操作,一定要看手册哦,答应我!