ThinkPHP之用户注册登录留言完整实例
本文以实例形式讲述ThinkPHP实现的包括用户的注册、登录以及留言等功能,这里需要大家注意的是,在存在用户模型的情况下实例化一个用户类的时候使用D方法来实现。
UserActiion.class.php页面:
<?php classUserActionextendsAction{ publicfunctionadd(){ $user=D("user"); $user->create(); $result=$user->add(); if($result){ $this->assign("jumpUrl","__APP__/index/index"); $this->success('注册成功!'); }else{ //echo$user->getError(); $this->assign("jumpUrl","__APP__/user/register"); $this->error($user->getError()); } } publicfunctionregister(){ $this->display(); } publicfunctionlogin(){ $this->display(); } publicfunctionchecklogin(){ $username=$_POST['username']; $passwd=$_POST['passwd']; $user=D("user"); //$User->where('id=8')->find();这里的where语句要注意一下,如果是其他字段的话后面一定要有单引号 $userinfo=$user->where("username='$username'")->find(); if(!empty($userinfo)){ if($userinfo['passwd']==$passwd){ Cookie::set('userid',$userinfo['id'],time()+3600*24); Cookie::set('username',$username,time()+3600*24); Cookie::set('lastlogintime',time(),time()+3600*24); $this->assign("jumpUrl","__APP__/index/index"); $this->success('登陆成功!'); }else{ $this->assign("jumpUrl","__APP__/user/login"); $this->error('密码出错,请重新输入!'); } }else{ $this->assign("jumpUrl","__APP__/user/login"); $this->error('用户名不存在!'); } } publicfunctionloginout(){ Cookie::delete('username'); Cookie::delete('lastlogintime'); $this->assign("jumpUrl","__APP__/index/index"); $this->success('您已经成功退出,欢迎您的下次登录!'); } }
IndexAction.class.php页面:
<?php //本类由系统自动生成,仅供测试用途 classIndexActionextendsAction{ publicfunctioninsert(){ $content=newContentModel(); $result=$content->create(); if(!$result){ $this->assign("jumpUrl","__URL__/index"); $this->error($content->getError());//如果创建失败,表示验证没有通过,输出错误信息 }else{//验证通过,进行其他操作 $content->userid=Cookie::get('userid'); $content->add(); $this->assign("jumpUrl","__URL__/index"); $this->success('添加成功!'); } } //数据查询操作 publicfunctionindex(){ $content=newContentModel(); $list=$content->findAll(); //用户的cookie $username=Cookie::get('username'); $lastlogintime=Cookie::get('lastlogintime'); $this->assign('list',$list); $this->assign('title','我的首页'); $this->assign('username',$username); $this->assign('lastlogintime',$lastlogintime); $this->display(); } //删除操作 publicfunctiondelete(){ $content=newContentModel(); $id=$_GET['id']; if($content->where("id=$id")->delete()){ $this->assign("jumpUrl","__URL__/index"); $this->success('删除成功!'); }else{ $this->assign("jumpUrl","__URL__/index"); $this->error('删除失败!'); } } //编辑操作 publicfunctionedit(){ $content=newContentModel(); $id=$_GET['id']; if($id!='') { //$data=$content->select($id); $data=$content->where("id=$id")->select(); if(!empty($data)){ $this->assign('data',$data); }else{ echo"数据为空!"; } } $this->assign('title','编辑页面'); $this->display(); } //更新操作 publicfunctionupdate(){ $content=newContentModel(); //直接使用create(),自动会帮你进行数据的传值 /*$content->create(); $content->save();//根据条件保存修改的数据 echo"更新数据成功!";*/ //使用post传值过来,进行更新 $id=$_POST['id']; if($id!='') { $data['id']=$id; $data['title']=$_POST['title']; $data['content']=$_POST['content']; if($content->save($data))//根据条件保存修改的数据 { $this->assign("jumpUrl","__URL__/index"); $this->success('更新数据成功!'); } else{ $this->assign("jumpUrl","__URL__/index"); $this->success('更新数据失败!'); } }else { echo"保存数据失败!"; } } } ?>
ContentModel.class.php页面:
<?php classContentModelextendsModel{ /* *自动验证 *array(验证字段,验证规则,错误提示,验证条件,附加规则,验证时间) */ protected$_validate=array( array('title','require','标题必须填写!'), array('content','require','内容必须填写!'), ); /* *自动填充 *array(填充字段,填充内容,填充条件,附加规则) */ protected$_auto=array( array('addtime','time',1,'function'), ); } ?>
UserModel.class.php页面:
<?php classUserModelextendsModel{ protected$_validate=array( array('username','','帐号名称已经存在!',0,'unique',1), ); } ?>
这里需要注意的是,使用自动验证的时候实例化时要用$user=D("user")而不能用$user=M("user"),用M这种方法会报错,D函数用于实例化Model,M函数用户实例化一个没有模型的文件。
success.html页面:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"> <metahttp-equiv="refresh"content="20;url='{$jumpUrl}'"/> <title>信息提示</title> </head> <body> <divid="man_zone"> <tablewidth="40%"border="1"align="center"cellpadding="3"cellspacing="0"class="table"style="margin-top:100px;"> <tr> <thalign="center"style="background:#cef">信息提示</th> </tr> <tr> <td><p>{$message}<br/> 2秒后返回指定页面!<br/> 如果浏览器无法跳转,<ahref="{$jumpUrl}"rel="externalnofollow">请点击此处</a>。</p></td> </tr> </table> </div> </body> </html>