thinkphp实现注册登录功能.docx
《thinkphp实现注册登录功能.docx》由会员分享,可在线阅读,更多相关《thinkphp实现注册登录功能.docx(10页珍藏版)》请在冰豆网上搜索。
thinkphp实现注册登录功能
thinkphp实现注册登录功能
创建数据库:
SETFOREIGN_KEY_CHECKS=0;
------------------------------
--Tablestructureforthink_users
------------------------------
DROPTABLEIFEXISTS`think_users`;
CREATETABLE`think_users`(
`userid`mediumint(8)unsignedNOTNULLAUTO_INCREMENTCOMMENT'用户id',
`companyid`mediumint(8)unsignedNOTNULLCOMMENT'公司id',
`pid`mediumint(8)NOTNULLCOMMENT'父id',
`username`char(20)NOTNULLDEFAULT''COMMENT'用户名',
`password`char(32)NOTNULLDEFAULT''COMMENT'密码',
`nickname`char(20)NOTNULLDEFAULT''COMMENT'昵称',
`regdate`int(10)unsignedNOTNULLCOMMENT'注册时间',
`lastdate`int(10)unsignedNOTNULLCOMMENT'最后一次登录时间',
`regip`char(15)NOTNULLDEFAULT''COMMENT'注册ip',
`lastip`char(15)NOTNULLDEFAULT''COMMENT'最后一次登录ip',
`loginnum`smallint(5)unsignedNOTNULLDEFAULT'0'COMMENT'登录次数',
`email`char(32)NOTNULLDEFAULT''COMMENT'邮箱',
`mobile`char(11)NOTNULLDEFAULT''COMMENT'手机号码',
`islock`tinyint
(1)unsignedNOTNULLDEFAULT'0'COMMENT'是否锁定',
`vip`tinyint
(1)unsignedNOTNULLDEFAULT'0'COMMENT'是否会员',
`overduedate`int(10)unsignedNOTNULLCOMMENT'账户过期时间',
`status`tinyint
(1)unsignedNOTNULLDEFAULT'0'COMMENT'状态-用于软删除',
PRIMARYKEY(`userid`),
UNIQUEKEY`username`(`username`)USINGBTREE,
KEY`email`(`email`)USINGBTREE
)ENGINE=MyISAMAUTO_INCREMENT=5DEFAULTCHARSET=utf8;创建模型(用于自动验证,自动完成):
namespaceHome\Model;
useThink\Model;
classUsersModelextendsModel{
/**
*自动验证
*self:
:
EXISTS_VALIDATE或者0存在字段就验证(默认)
*self:
:
MUST_VALIDATE或者1必须验证
*self:
:
VALUE_VALIDATE或者2值不为空的时候验证
*/
protected$_validate=array(
array('nickname','require','昵称不能为空!
'),//默认情况下用正则进行验证
array('username','require','用户名不能为空!
'),//默认情况下用正则进行验证
array('username','','该用户名已被注册!
',0,'unique',1),//在新增的时候验证name字段是否唯一
array('email','','该邮箱已被占用',0,'unique',1),//新增的时候email字段是否唯一
array('mobile','','该手机号码已被占用',0,'unique',1),//新增的时候mobile字段是否唯一
//正则验证密码[需包含字母数字以及@*#中的一种,长度为6-22位]
array('password','/^([a-zA-Z0-9@*#]{6,22})$/','密码格式不正确,请重新输入!
',0),
array('repassword','password','确认密码不正确',0,'confirm'),//验证确认密码是否和密码一致
array('email','email','邮箱格式不正确'),//内置正则验证邮箱格式
array('mobile','/^1[34578]\d{9}$/','手机号码格式不正确',0),//正则表达式验证手机号码
array('verify','verify_check','验证码错误',0,'function'),//判断验证码是否正确
//array('agree','is_agree','请先同意网站安全协议!
',1,'callback'),//判断是否勾选网站安全协议
array('agree','require','请先同意网站安全协议!
',1),//判断是否勾选网站安全协议
);
/**
*自动完成
*/
protected$_auto=array(
array('password','md5',3,'function'),//对password字段在新增和编辑的时候使md5函数处理
array('regdate','time',1,'function'),//对regdate字段在新增的时候写入当前时间戳
array('regip','get_client_ip',1,'function'),//对regip字段在新增的时候写入当前注册ip地址
);
/**
*判断是否同意网站安全管理协议
*@returnbool
*/
protectedfunctionis_agree()
{
//获取POST数据
$agree=I('post.agree',0,'intval');
//验证
if($agree){
returntrue;
}else{
returnfalse;
}
}登录注册:
namespaceHome\Controller;
useThink\Controller;
/**
*ClassLoginController
*@packageHome\Controller
*/
classLoginControllerextendsController{
/**
*用户登录
*/
publicfunctionlogin()
{
//判断提交方式
if(IS_POST){
//实例化Login对象
$login=D('login');
//自动验证创建数据集
if(!
$data=$login->create()){
//防止输出中文乱码
header("Content-type:
text/html;charset=utf-8");
exit($login->getError());
}
//组合查询条件
$where=array();
$where['username']=$data['username'];
$result=$login->where($where)->field('userid,username,nickname,password,lastdate,lastip')->find();
//验证用户名对比密码
if($result&&$result['password']==$result['password']){
//存储session
session('uid',$result['userid']);//当前用户id
session('nickname',$result['nickname']);//当前用户昵称
session('username',$result['username']);//当前用户名
session('lastdate',$result['lastdate']);//上一次登录时间
session('lastip',$result['lastip']);//上一次登录ip
//更新用户登录信息
$where['userid']=session('uid');
M('users')->where($where)->setInc('loginnum');//登录次数加1
M('users')->where($where)->save($data);//更新登录时间和登录ip
$this->success('登录成功,正跳转至系统首页...',U('Index/index'));
}else{
$this->error('登录失败,用户名或密码不正确!
');
}
}else{
$this->display();
}
}
/**
*用户注册
*/
publicfunctionregister()
{
//判断提交方式做不同处理
if(IS_POST){
//实例化User对象
$user=D('users');
//自动验证创建数据集
if(!
$data=$user->create()){
//防止输出中文乱码
header("Content-type:
text/html;charset=utf-8");
exit($user->getError());
}
//插入数据库
if($id=$user->add($data)){
/*直接注册用户为超级管理员,子用户采用邀请注册的模式,
遂设置公司id等于注册用户id,便于管理公司用户*/
$user->where("userid=$id")->setField('companyid',$id);
$this->success('注册成功',U('Index/index'),2);
}else{
$this->error('注册失败');
}
}else{
$this->display();
}
}
/**
*用户注销
*/
publicfunctionlogout()
{
//清楚所有session
session(null);
redirect(U('Login/login'),2,'正在退出登录...');
}
/**
*验证码
*/
publicfunctionverify()
{
//实例化Verify对象
$verify=new\Think\Verify();
//配置验证码参数
$verify->fontSize=14;//验证码字体大小
$verify->length=4;//验证码位数
$verify->imageH=34;//验证码高度
$verify->useImgBg=true;//开启验证码背景
$verify->useNoise=false;//关闭验证码干扰杂点
$verify->entry();
}
}登录模版:
<formaction="__SELF__"method="post">
<divclass="form-grouphas-feedback">
<inputtype="text"name="username"class="form-control"placeholder="用户名"/>
<spanclass="glyphiconglyphicon-userform-control-feedback"></span>
</div>
<divclass="form-grouphas-feedback">
<inputtype="password"name="password"class="form-control"placeholder="密码"/>
<spanclass="glyphiconglyphicon-lockform-control-feedback"></span>
</div>
<divclass="form-grouphas-feedback">
<inputtype="text"name="verify"class="form-control"placeholder="验证码"style="width:
200px;"/>
<spanclass="glyphiconglyphicon-qrcodeform-control-feedback"style="right:
120px;"></span>
<imgclass="verify"src="{:
U(verify)}"alt="验证码"onClick="this.src=this.src+'?
'+Math.random()"/>
</div>
<divclass="row">
<divclass="col-xs-8">
<divclass="checkboxicheck">
<label>
<inputtype="checkbox"name="remember"value="1">记住我
</label>
</div>
</div><!
--/.col-->
<divclass="col-xs-4">
<buttontype="submit"class="btnbtn-primarybtn-blockbtn-flat">登录</button>
</div><!
--/.col-->
</div>
</form>注册模版:
<divclass="register-box-body">
<pclass="login-box-msg">注册一个新用户</p>
<formaction="__SELF__"method="post">
<divclass="form-grouphas-feedback">
<inputtype="text"name="nickname"class="form-control"placeholder="昵称"/>
<spanclass="glyphiconglyphicon-leafform-control-feedback"></span>
</div>
<divclass="form-grouphas-feedback">
<inputtype="text"name="username"class="form-control"placeholder="用户名"/>
<spanclass="glyphiconglyphicon-userform-control-feedback"></span>
</div>
<divclass="form-grouphas-feedback">
<inputtype="password"name="password"class="form-control"placeholder="密码"/>
<spanclass="glyphiconglyphicon-credit-cardform-control-feedback"></span>
</div>
<divclass="form-grouphas-feedback">
<inputtype="password"name="repassword"class="form-control"placeholder="确认密码"/>
<spanclass="glyphiconglyphicon-checkform-control-feedback"></span>
</div>
<divclass="form-grouphas-feedback">
<inputtype="email"name="email"class="form-control"placeholder="邮箱"/>
<spanclass="glyphiconglyphicon-envelopeform-control-feedback"></span>
</div>
<divclass="form-grouphas-feedback">
<inputtype="text"name="mobile"class="form-control"placeholder="手机号码"/>
<spanclass="glyphiconglyphicon-phoneform-control-feedback"></span>
</div>
<divclass="form-grouphas-feedback">
<inputtype="text"name="verify"class="form-control"placeholder="验证码"style="width:
200px;"/>
<spanclass="glyphiconglyphicon-qrcodeform-control-feedback"style="right:
120px;"></span>
<imgclass="verify"src="{:
U(verify)}"alt="验证码"onClick="this.src=this.src+'?
'+Math.random()"/>
</div>
<divclass="row">
<divclass="col-xs-8">
<divclass="checkboxicheck">
<label>
<inputtype="checkbox"name="agree"value="1">我同意<ahref="#">网站安全协议</a>
</label>
</div>
</div><!
--/.col-->
<divclass="col-xs-4">
<buttontype="submit"class="btnbtn-primarybtn-blockbtn-flat">点击注册</button>
</div><!
--/.col-->
</div>
</form>
<ahref="login.html"class="text-center">我已经注册了账户</a>
</div>