ThinkPHP之用户注册登录留言完整实例


Posted in PHP onJuly 22, 2014

本文以实例形式讲述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>
PHP 相关文章推荐
THINKPHP+JS实现缩放图片式截图的实现
Mar 07 PHP
解析thinkphp中的M()与D()方法的区别
Jun 22 PHP
php var_export与var_dump 输出的不同
Aug 09 PHP
PHP生成不同颜色、不同大小的tag标签函数
Sep 23 PHP
yii实现图片上传及缩略图生成的方法
Dec 04 PHP
php实现在服务器端调整图片大小的方法
Jun 16 PHP
PHP图像裁剪缩略裁切类源码及使用方法
Jan 07 PHP
PHP中的随机性 你觉得自己幸运吗?
Jan 22 PHP
Yii数据读取与跳转参数传递用法实例分析
Jul 12 PHP
PHP中文字符串截断无乱码解决方法
Oct 10 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
Nov 08 PHP
LAMP环境使用Composer安装Laravel的方法
Mar 25 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
Jul 22 #PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 #PHP
async和DOM Script文件加载比较
Jul 20 #PHP
Eclipse的PHP插件PHPEclipse安装和使用
Jul 20 #PHP
php多任务程序实例解析
Jul 19 #PHP
php实现斐波那契数列的简单写法
Jul 19 #PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
Jul 19 #PHP
You might like
PHP版国家代码、缩写查询函数代码
2011/08/14 PHP
php 邮件发送问题解决
2014/03/22 PHP
php生成短网址示例
2014/05/05 PHP
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
php采用curl实现伪造IP来源的方法
2014/11/21 PHP
不用MOUSEMOVE也能滑动啊
2007/05/23 Javascript
List the UTC Time on a Computer
2007/06/11 Javascript
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
extjs表格文本启用选择复制功能具体实现
2013/10/11 Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
2015/04/06 Javascript
JavaScript的Date()方法使用详解
2015/06/09 Javascript
浅谈javascript中的三种弹窗
2016/10/21 Javascript
jquery获取easyui日期控件的值实现方法
2016/11/09 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
2017/01/04 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
JavaScript 中的 this 工作原理
2018/06/20 Javascript
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
JavaScript canvas实现跟随鼠标事件
2020/02/10 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
[42:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS OpTic
2018/03/31 DOTA
[02:31]2018年度DOTA2最具人气选手-完美盛典
2018/12/16 DOTA
python错误处理详解
2014/09/28 Python
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
2016/06/14 Python
Python中enumerate函数代码解析
2017/10/31 Python
python交互式图形编程实例(一)
2017/11/17 Python
Python selenium如何打包静态网页并下载
2020/08/12 Python
Python排序函数的使用方法详解
2020/12/11 Python
Senreve官网:美国旧金山的奢侈手袋品牌
2019/03/21 全球购物
Java编程面试题
2016/04/04 面试题
护士辞职信模板
2014/01/20 职场文书
人力资源作业细则
2014/03/03 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
审计局2014法制宣传日活动总结
2014/11/01 职场文书
运动会广播稿100字
2015/08/19 职场文书