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数组函数序列之rsort() - 对数组的元素值进行降序排序
Nov 02 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
Dec 30 PHP
PHP实现单例模式最安全的做法
Jun 13 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
Sep 10 PHP
php时间戳格式化显示友好的时间函数分享
Oct 21 PHP
详解Window7 下开发php扩展
Dec 31 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
Laravel Eloquent ORM 多条件查询的例子
Oct 10 PHP
Mac下关于PHP环境和扩展的安装详解
Oct 17 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 PHP
php 文件上传至OSS及删除远程阿里云OSS文件
Jul 04 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获取url的函数代码
2011/08/02 PHP
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
angularJS 中input示例分享
2015/02/09 Javascript
Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
2016/07/14 Javascript
AngularJS入门教程之链接与图片模板详解
2016/08/19 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
Angular4学习笔记router的简单使用
2018/03/30 Javascript
vue实现一个炫酷的日历组件
2018/10/08 Javascript
vue element-ui实现input输入框金额数字添加千分位
2019/12/29 Javascript
详解node.js 事件循环
2020/07/22 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
解决python super()调用多重继承函数的问题
2019/06/26 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
Python datetime 格式化 明天,昨天实例
2020/03/02 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
2020/03/30 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
Python从文件中读取数据的方法步骤
2020/11/18 Python
python爬取代理ip的示例
2020/12/18 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
HTML5 声明兼容IE的写法
2011/05/16 HTML / CSS
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
出纳担保书范文
2014/04/02 职场文书
婚假请假条格式及范文
2014/04/10 职场文书
活动策划求职信模板
2014/04/21 职场文书
党的群众路线教育实践活动领导班子整改方案
2014/10/25 职场文书
关于golang高并发的实现与注意事项说明
2021/05/08 Golang
CSS实现五种常用的2D转换
2021/12/06 HTML / CSS
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python
如何用H5实现好玩的2048小游戏
2022/07/23 HTML / CSS