## 登录/注册

### 创建登录控制器

```php

php think make:controller admin/Login --plain

```

> —plain是为了创建控制器更纯净,没有先创建好的一些方法

### 下载验证码插件

这是配合ThinkPHP 5.1版本的

```composer

composer require topthink/think captcha=2.0.*

```

在`Login`控制器里添加`verify()`方法用于验证码

```php

public function verify()

{

$config = [

// 验证码字体大小

'fontSize' => 16,

'length' => 3,

// 关闭验证码杂点

'useNoise' => false,

'useCurve' => false,

];

$captcha = new Captcha($config);

return $captcha->entry();

}

```

在*html*页面中引入

```php+HTML

```

#### 点击验证码图片随机变换的JS

```javascript

$(function () {

var verifyimg = $(".reloadverify").attr("src");

$(".reloadverify").click(function () {

if (verifyimg.indexOf('?') > 0) {

$(".reloadverify").attr("src", verifyimg + '&random=' + Math.random());

} else {

$(".reloadverify").attr("src", verifyimg.replace(/\?.*$/, '') + '?' + Math.random());

}

});

});

```

> 这里的`reloadverify`必须要在`img`中进行定义**class**

### 登录使用Ajax进行登录

> 必须引入jQuery,在配合layui的layer.js进行弹窗效果提示

>

> 在input框中必须输入对应的name值

js代码:

```javascript

$(function () {

$('#login').click(function () {

$.ajax({

url: "{:url('admin/Login/login')}",

type: 'post',

data: $('form').serialize(),

dataType: 'json',

success: function (data) {

if (data.code == 1) {

layer.msg(data.msg, {

icon: 6,

time: 1000

}, function () {

location.href = "{:url('admin/Index/index')}";

})

} else {

layer.open({

title: '登录失败',

content: data.msg,

ico: 5,

anim: 6

})

}

}

});

return false;

});

});

```

### 用Ajax进行注册

```javascript

$(function () {

$('#register').click(function () {

$.ajax({

url: "{:url('admin/Register/register')}",

type: 'post',

data: $('form').serialize(),

dataType: 'json',

success: function (data) {

if (data.code == 1) {

layer.msg(data.msg, {

icon: 6,

time: 1000

}, function () {

location.href = "{:url('admin/Login/index')}";

})

} else {

layer.open({

title: '注册失败',

content: data.msg,

ico: 5,

anim: 6

})

}

}

});

return false;

});

});

```

## 创建模型

我会将模型创建在`application`下的`common`目录,属于前台和后台的公共使用

```php

php think make:model common/Manager

```

用模型进行处理数据

```php

use SoftDelete;

// 自动引入时间戳

protected $autoWriteTimestamp = true;

// 用户登录验证

public static function login($data)

{

$validate = new LoginValidate();

if (!$validate->scene('login')->check($data)) {

return json(['code' => 0, 'msg' => $validate->getError()]);

}

$res = self::get(['username' => $data['username']]);

if (!$res) {

return json(['code' => 0, 'msg' => '账号不存在']);

}

if (!$res['status']) {

return json(['code' => 0, 'msg' => '账号禁用']);

}

if (md5($data['password']) == $res['password']) {

session('adminid', $res['id']);

session('username', $res['username']);

session('nickname', $res['nickname']);

return json(['code' => 1, 'msg' => '登录成功']);

}

return json(['code' => 0, 'msg' => '密码不正确']);

}

// 获取所有管理员的信息

public static function getAllManager()

{

$lists = self::where('id', 'asc');

return $lists;

}

// 添加修改管理员

public static function store($data)

{

if (isset($data['id'])) {

$scene = 'edit';

$msg = '修改';

$action = "update";

} else {

$scene = 'add';

$msg = '添加';

$action = "create";

}

$data['password'] = md5($data['password']);

// 写入数据库

unset($data['confirm_password']);

$result = self::$action($data);

if (!$result) {

return json(['code' => 0, 'msg' => $msg.'失败']);

}

return json(['code' => 1, 'msg' => $msg.'成功']);

}

public static function del($id)

{

$result = self::destroy($id);

if ($result) {

return json(['code' => 1, 'msg' => '删除成功']);

}

return json(['code' => 0, 'msg' => '删除失败']);

}

```

## 创建验证器

```php

php think make:validate common/LoginValidate

```

```php

/**

* 定义验证规则

* 格式:'字段名'=>['规则1','规则2'...]

*

* @var array

*/

protected $rule = [

'username' => 'require|unique:manager',

'password' => 'require|length:6,20',

'confirm_password' => 'require|confirm:password',

'code' => 'require',

'email' => 'require|email|unique:manager'

];

/**

* 定义错误信息

* 格式:'字段名.规则名'=>'错误信息'

*

* @var array

*/

protected $message = [

'id.require' => 'id不正确',

'username.require' => '用户名不能为空',

'username.unique' => '用户名必须唯一',

'password.require' => '密码不能为空',

'password.length' => '密码长度在6~20个字符之内',

'confirm_password.require' => '确认密码不能为空',

'confirm_password.confirm' => '两次密码输入不相同',

'code.require' => '验证码不能为空',

'email.require' => '邮箱不能为空',

'email.email' => '邮箱格式不正确',

'email.unique' => '该邮箱已存在'

];

protected $scene = [

'login' => ['username' => 'require|unique:manager',"password"],

'add' => ['username', 'password', 'confirm_password', 'email'],

'edit' => ['id']

];

```

## 登录控制器

```php

/**

* 显示登录页面

* @return \think\response\View

*/

public function index()

{

return view();

}

public function login()

{

$data = input('post.');

$result = Manager::login($data);

return $result;

}

```

## 注册控制器

```php

// 注册页面

public function index()

{

return view();

}

public function register()

{

$data = input('post.');

$validate = new LoginValidate();

if (!$validate->scene('add')->check($data)) {

return json(['code' => 0, 'msg' => $validate->getError()]);

}

$data['created_at'] = time();

$data['status'] = 1;

$result = Manager::store($data);

return $result;

}

```

## ThinkPHP5 模型时间戳设置

> 单独在模型里面设置(推荐)

```

protected $autoWriteTimestamp = true; // int 型

protected $autoWriteTimestamp = 'datetime'; // datetime 类型

protected $autoWriteTimestamp = false; // 关闭自动写入时间戳

protected $updateTime = false;       // 只关闭自动写入update_time字段

```

> 在config里添加全局设置

```

/ 开启自动写入时间戳字段(官方手册这么说,自己并没有测试出来)

'auto_timestamp' => true, // 默认为int型

'auto_timestamp' => 'datetime', // datetime类

'auto_timestamp' => false,  // 关闭全局自动写入时间字段

```

> 如果数据表字段不是默认值(假设数据库字段名为create_at和update_at)

```

// 定义时间戳字段名

protected $createTime = 'create_at';    // 默认的字段为create_time 和 update_time

protected $updateTime = 'update_at';

```

注册php tp5,TP5登录注册相关推荐

  1. java优化登录注册,Java-Web(项目)优化登录注册

    Java-Web(项目)优化登录注册 Java-Web(项目)优化登录注册 实现代码: package com.homework.dao1; public interface Login { publ ...

  2. 右侧按钮登录注册html,翻转式用户登录注册界面设计

    这是一款非常实用的翻转式用户登录注册界面设计效果.该用户登录注册界面使用纯CSS3来制作,在用户点击登录和注册两个按钮时,登录和注册界面可以以水平翻转的方式来回切换,效果非常的酷. 制作方法 HTML ...

  3. mysql登录注册留言_实现登录注册的留言板思路

    代码见 一.登录界面 1.  布局: a)      定width , height , margin:20px auto , box-shadow , border-radius b)      p ...

  4. node mysql登录注册_Node数据库入门(登录注册功能)

    const http=require('http');const mysql=require('mysql');const url=require('url');const fs=require('f ...

  5. mysql登录注册留言_能登录注册的留言板(1)——实现登录

    (一) 小白实现了登录操作,如图,代码在下面 一.登录界面 1.  布局: a)      定width , height , margin:20px auto , box-shadow , bord ...

  6. php开发之登录注册教程,PHP开发登录注册完整代码之注册PHP页面

    创建我们的 reg.php 文件 此页面完成的功能如下 代码如下<?php session_start(); header("Content-type:text/html;charse ...

  7. MySQL的ODBC驱动下载及安装 (免登录注册)

    1. 下载ODBC驱动安装包 下载地址: https://dev.mysql.com/downloads/connector/odbc/ ps:我的电脑是 64位, 但是在安装 ODBC 时报错,数据 ...

  8. 分享发现一个优秀WP插件 2022最新WordPress登录注册会员功能一体的插件LOGINUSER-CH

    手机/QQ登录注册完美代替传统登录注册会员中心,建站必备独立用户中心,功能完整(支持投稿),让你博客提升一个档次,如需充值搭配市面ErphpDown插件效果更佳.手机+社会化登录 代替早该淘汰传统邮箱 ...

  9. android servlet 登陆,Android Studio+Servlet+MySql实现登录注册

    一.Android 项目当中设置明文传输 1.设置明文传输的xml 2.引入上述创建的xml android:networkSecurityConfig="@xml/network_secu ...

最新文章

  1. BZOJ 1091([SCOI2003]分割多边形-分割直线)
  2. 命名式ACL配置实例
  3. 给求职的同学的几点建议
  4. 做折线图坐标轴数字_你做的柱状图太丑了,这些美化技巧教给你(收藏)
  5. jmeter参数化之用户参数
  6. 单片机为什么一直用C语言,不用其他编程语言?只有学过的知道!
  7. pagehelper工具类_PageHelper最佳实践
  8. ES6 的解构赋值前每次都创建一个对象吗?会加重 GC 的负担吗?
  9. 手机自动化测试的原理
  10. [原创]Kjava手机顽童模拟器
  11. 用质谱法定义 HLA-II 配体处理和结合规则可增强癌症表位预测
  12. mysql dump hbase_导入mysqldump表结构
  13. 获取路由器内的ADSL上网账号和密码或者获取电脑内的ADSL上网账号和密码教程 by 星空武哥
  14. JVM性能调优(一)(JVM参数详解、内存分析等)
  15. The Fun Of Algorithm - Day4 - 百钱百鸡问题
  16. gophish企业内部钓鱼邮件测试
  17. 电路中的VDD,DVDD,AVDD,VCC,AFVDD,DOVDD,IOVDD的区别,
  18. 史上最经典的K线买入技巧
  19. Python_爬虫_中文乱码
  20. React教程(五)——生命周期函数

热门文章

  1. .net中如何同步获取数据方式增加一样数据自动刷新列表_知客CRM如何对接微信公众号...
  2. SQL Server 2014 新建数据库
  3. C++面试题-面向对象-静态成员变量以及静态成员函数
  4. 详解机器视觉照明重点内容
  5. mybatis中#{}和${}
  6. 在文本框中插入@对象
  7. Swift的控制转移语句--continue语句
  8. 利用python解析手机通讯录
  9. Spring MVC 基于Method的映射规则(注解版)
  10. 兼容性极好的圆角边框