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 相关文章推荐
php_xmlhttp 乱码问题解决方法
Aug 07 PHP
解析php中eclipse 用空格替换 tab键
Jun 24 PHP
PHP实现根据时间戳获取周几的方法
Feb 26 PHP
PHP记录页面停留时间的方法
Mar 30 PHP
提交表单后 PHP获取提交内容的实现方法
May 25 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
Nov 25 PHP
Zend Framework过滤器Zend_Filter用法详解
Dec 09 PHP
PHP chr()函数讲解
Feb 11 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
Mar 01 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
Apr 10 PHP
php利用ZipArchive类操作文件的实例
Jan 21 PHP
php解析非标准json、非规范json的方式实例
Dec 10 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 快速生成 Flash 动画的方法
2007/03/06 PHP
fetchAll()与mysql_fetch_array()的区别详解
2013/06/05 PHP
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
javascript与webservice的通信实现代码
2010/12/25 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
2013/06/18 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
2013/08/27 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
2013/11/07 Javascript
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
nodejs结合socket.io实现websocket通信功能的方法
2018/01/12 NodeJs
泛谈JS逻辑判断选择器 || &amp;&amp;
2019/05/24 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
Python之列表实现栈的工作功能
2019/01/28 Python
Python对接支付宝支付自实现功能
2019/10/10 Python
Python文字截图识别OCR工具实例解析
2020/03/05 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
python用opencv完成图像分割并进行目标物的提取
2020/05/25 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
2021/03/03 Python
HTML5 常用语法一览(列举不支持的属性)
2010/01/26 HTML / CSS
html5自定义video标签的海报与播放按钮功能
2019/12/04 HTML / CSS
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
妈妈的账单教学反思
2014/02/06 职场文书
商场开业庆典策划方案
2014/06/02 职场文书
公司员工手册范本
2015/05/14 职场文书
看看如何用Python绘制小米新版天价logo
2021/04/20 Python
对Keras自带Loss Function的深入研究
2021/05/25 Python
浅谈Redis位图(Bitmap)及Redis二进制中的问题
2021/07/15 Redis
python运行脚本文件的三种方法实例
2022/06/25 Python