内容简介:ThinkPHP初学者:写一个简单登录页面(二)
前文链接《ThinkPHP初学者:写一个简单登录页面(一)》
首先,在UserModel中,把需要的方法定义好。
public function exists($user_name){ $SQL = "user_name='%s'"; return $this->where($SQL,$user_name)->find(); }
这个方法会用来判断用户是否存在,find()方法表示返回查询结果的第一条数据。一般而言,用户名都是唯一的,所以查询的结果应该只有一条数据,如果要确保是这样,可以修改数据表结构,把user_name字段设置为unique,操作方法如下,在 Mysql 控制台中:
alter table user add unique (user_name);
这样,再向数据库中插入数据时,如果用户名已经存在,就会失败。
然后,就可以在Controller中写具体的登录逻辑了,登录逻辑实现有两种方案:一种是HTML通过表单提交,由 PHP 来控制跳转;另外一种是通过接口的形式,HTML通过ajax等技术,使用json进行数据交换,并自己控制页面跳转等逻辑。很显然,由于登录失败的可能性很大,需要给用户友好的提示,使用方案二会更加合适。因此这里使用方案二来实现功能,方案一之后还会遇到,届时再仔细研究。
在Controller中创建一个名为login()的方法,供HTML以post的方式提交数据:
public function login() { //HTTP协议,传输json需要添加请求头 header('Content-Type:application/json; charset=utf-8'); //数据校验 if (!$_POST) { $return['code'] = 0; $return['message'] = '不支持的操作'; exit(json_encode($return)); } $user_name = $_POST["username"]; if (empty($user_name)) { $return['code'] = 0; $return['message'] = '用户名不能为空'; exit(json_encode($return)); } $user_pass = $_POST["password"]; if (empty($user_pass)) { $return['code'] = 0; $return['message'] = '密码不能为空'; exit(json_encode($return)); } $result = D("User")->exists($user_name); if (empty($result)) { $return['code'] = 0; $return['message'] = '用户不存在'; exit(json_encode($return)); } if ($result['user_pass'] != $user_pass) { $return['code'] = 0; $return['message'] = '密码错误'; exit(json_encode($return)); } $return['code'] = 1; $return['message'] = '登录成功'; echo json_encode($return); }
很显然,这个方法不是主动在浏览器调用的,而是用户点击登录按钮后,通过ajax触发。因此ajax和普通的用法也稍微有点区别,具体表现在ajax的url字段上。在TP中,请求的Url有其特定的格式:{:U(控制器名/方法名)},这样TP就可以把其解析成服务器理解的链接,从而将请求发送到正确的地方。下面给出ajax请求的示例(使用的是Jquery方法):
$.ajax({ type: "POST", url:"{:U('Index/login')}", data:$('#form').serialize(),// 序列化表单值,这里需要的是待上传的数据,若用表单就可以这样写 async: true, error: function(request) { alert("Connection error"); }, success: function(data) { if(data.code==1){ alert(data.message); // window.location.href="跳转页面" }else{ alert(data.message); } } }); });
具体代码会同步到github中,文末有链接。
现在,在浏览器中访问http://www.learn.com,先输入一个不存在的用户名:
image.png
再试下正确的用户名&错误的密码:
image.png
最后输入正确的密码:
image.png
可以看到网站很好的工作了起来,由于还没有主页,所以登录成功后也仅仅给出了提示,若要跳转,使用js的
window.location.href="跳转页面"
就可以了。
至此,一个简单的登录功能就完成了。但是实际的登录逻辑是比这要复杂一些的,比如密码的处理,以及使用session保持登录的状态等,需要在实现注册和主页时,再详细展开。
本项目源码已同步到github上,如需查看,同步下来后,配置一下数据库即可。
奉上github地址:https://github.com/LtLei/PHPLearn。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Everything Store
Brad Stone / Little, Brown and Company / 2013-10-22 / USD 28.00
The definitive story of Amazon.com, one of the most successful companies in the world, and of its driven, brilliant founder, Jeff Bezos. Amazon.com started off delivering books through the mail. Bu......一起来看看 《The Everything Store》 这本书的介绍吧!