本文以实例形式讲述ThinkPHP实现的包括用户的注册、登录以及留言等功能,这里需要大家注意的是,在存在用户模型的情况下实例化一个用户类的时候使用D方法来实现。
UserActiion.class.php页面:
<?php class UserAction extends Action{ public function add(){ $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()); } } public function register(){ $this->display(); } public function login(){ $this->display(); } public function checklogin(){ $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("用户名不存在!"); } } public function loginout(){ Cookie::delete("username"); Cookie::delete("lastlogintime"); $this->assign("jumpUrl","__APP__/index/index"); $this->success("您已经成功退出,欢迎您的下次登录!"); } }
IndexAction.class.php页面:
<?php // 本类由系统自动生成,仅供测试用途 class IndexAction extends Action{ public function insert() { $content = new ContentModel(); $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("添加成功!"); } } // 数据查询操作 public function index() { $content = new ContentModel(); $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(); } // 删除操作 public function delete(){ $content = new ContentModel(); $id = $_GET["id"]; if($content->where("id=$id")->delete()){ $this->assign("jumpUrl","__URL__/index"); $this->success("删除成功!"); }else{ $this->assign("jumpUrl","__URL__/index"); $this->error("删除失败!"); } } // 编辑操作 public function edit(){ $content = new ContentModel(); $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(); } // 更新操作 public function update(){ $content = new ContentModel(); //直接使用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 class ContentModel extends Model{ /* * 自动验证 * array(验证字段,验证规则,错误提示,验证条件,附加规则,验证时间) */ protected $_validate = array( array("title","require","标题必须填写!"), array("content","require","内容必须填写!"), ); /* * 自动填充 * array(填充字段,填充内容,填充条件,附加规则) */ protected $_auto = array( array("addtime","time",1,"function"), ); } ?>
UserModel.class.php页面:
<?php class UserModel extends Model{ protected $_validate = array( array("username","","帐号名称已经存在!",0,"unique",1), ); } ?>
这里需要注意的是,使用自动验证的时候 实例化时要用 $user = D("user") 而不能用 $user = M("user"),用M这种方法会报错,D函数用于实例化Model,M函数用户实例化一个没有模型的文件。
success.html页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="refresh" content="20; url="{$jumpUrl}"" /> <title>信息提示</title> </head> <body> <div id="man_zone"> <table width="40%" border="1" align="center" cellpadding="3" cellspacing="0" class="table" style="margin-top:100px;"> <tr> <th align="center" style="background:#cef">信息提示</th> </tr> <tr> <td><p>{$message}<br /> 2秒后返回指定页面!<br /> 如果浏览器无法跳转,<a href="{$jumpUrl}" rel="external nofollow" >请点击此处</a>。</p></td> </tr> </table> </div> </body> </html>