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 相关文章推荐
PHP4实际应用经验篇(4)
Oct 09 PHP
攻克CakePHP系列一 连接MySQL数据库
Oct 22 PHP
php MsSql server时遇到的中文编码问题
Jun 11 PHP
使用PHP获取网络文件的实现代码
Jan 01 PHP
PHP文件上传原理简单分析
May 29 PHP
PHP函数篇之掌握ord()与chr()函数应用
Dec 05 PHP
php实现数组筛选奇数和偶数示例
Apr 11 PHP
php判断linux下程序问题实例
Jul 09 PHP
php实现基于openssl的加密解密方法
Sep 30 PHP
php无限级分类实现方法分析
Oct 19 PHP
Laravel框架自定义公共函数的引入操作示例
Apr 16 PHP
PHP中->和=>的意思
Mar 31 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
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
2013/06/29 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
2016/04/01 PHP
Javascript 去除数组的重复元素
2010/05/04 Javascript
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
jquery attr()设置和获取属性值实例教程
2016/09/25 Javascript
Angular.js中$apply()和$digest()的深入理解
2016/10/13 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
vue+element搭建后台小总结 el-dropdown下拉功能
2020/04/10 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
解决Vue项目中tff报错的问题
2020/10/21 Javascript
微信小程序实现购物车小功能
2020/12/30 Javascript
python统计cpu利用率的方法
2015/06/02 Python
python字符串中的单双引
2017/02/16 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
Djang的model创建的字段和参数详解
2019/07/27 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
CSS3属性使网站设计增强同时不消弱可用性
2009/08/29 HTML / CSS
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
伊莱克斯阿根廷网上商店:Tienda Electrolux
2021/03/08 全球购物
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
GWT (Google Web Toolkit)有哪些主要的原件组成?
2015/06/08 面试题
暑假社会实践心得体会
2014/09/02 职场文书
村党支部书记个人对照材料汇报
2014/10/26 职场文书
2014年加油站工作总结
2014/12/04 职场文书
2015毕业生自我评价范文
2015/03/02 职场文书
护士自我推荐信范文
2015/03/24 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
节约用电倡议书
2015/04/28 职场文书
如何在向量化NumPy数组上进行移动窗口
2021/05/18 Python