PHP框架之CodeIgniter 第2讲 用CI写一个简单的留言板
- 格式:ppt
- 大小:154.50 KB
- 文档页数:5


PHP实现的简单留⾔板功能⽰例【基于thinkPHP框架】本⽂实例讲述了PHP实现的简单留⾔板功能。
分享给⼤家供⼤家参考,具体如下:⼊⼝⽂件⽂件名 index.php<?php// 应⽤⼊⼝⽂件// 检测PHP环境if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !');// 开启调试模式建议开发阶段开启部署阶段注释或者设为falsedefine('APP_DEBUG',True);//开发调试模式//define('APP_DEBUG',false);//⽣产模式// 定义应⽤⽬录define('APP_PATH','./Message/');// 引⼊ThinkPHP⼊⼝⽂件require './ThinkPHP/ThinkPHP.php';// 亲^_^ 后⾯不需要任何代码了就是如此简单配置⽂件⽂件名 config.php<?phpreturn array(//'配置项'=>'配置值''SHOW_PAGE_TRACE'=>true,'DB_TYPE' => 'mysqli', // 数据库类型'DB_HOST' => '127.0.0.1', // 服务器地址'DB_NAME' => 'msg', // 数据库名'DB_USER' => 'root', // ⽤户名'DB_PWD' => 'root', // 密码'DB_PORT' => '3306', // 端⼝'DB_PREFIX' => 'ms_', // 数据库表前缀);控制器⽂件名 MsgController.class.php<?phpnamespace Home\Controller;use Think\Controller;use Think\Model;class MsgController extends Controller{public function index(){$msg = D('Msg');$info = $msg->order('id DESC')->select();$this->assign('info',$info);$this->display();}public function sendMsg(){$msg = new \Home\Model\MsgModel();if (!empty($_POST)){$data = $msg->create();if($data){$data['user_hobby'] = implode(',',$data['user_hobby']);$z = $msg->add($data);if ($z){$this->redirect('Msg/sendMsg');}}else{$this->assign('errorInfo',$msg->getError());}}$this->display();}public function upd($id){$msg = D('Msg');if (!empty($_POST)){$z = $msg->save($_POST);if ($z){$this->redirect('index',array(),2,'修改成功');}else{$this->redirect('upd',array('id'=>$id),2,'修改失败');}$info = $msg->find($id);$this->assign('info',$info);$this->display();}}public function addMsg(){$msg = D('Msg');if (!empty($_POST)){$z = $msg->add($_POST);if ($z){$this->redirect('index',array(),2,'添加成功');}else{$this->redirect('addMsg',array(),2,'添加失败');}}else{$this->display();}}public function del($id){if(D('Msg')->delete($id)){$this->success('成功',U('index'),2);}else{$this->error('失败',U('index'),2);}}}模板⽂件名 MsgModel.class.php<?phpnamespace Home\Model;use Think\Model;class MsgModel extends Model{//是否批量验证protected $patchValidate = true;protected $_validate = array(array('title','require','标题不能为空!'), //默认情况下⽤正则进⾏验证array('user','require','留⾔⼈不能为空!'),array('msg','require','内容不能为空!'),);protected $_auto = array (array('status','1'), // 新增的时候把status字段设置为1array('id','NULL'),array('admin_user','ms'),array('replay','NULL'),array('update_time','time',3,'function'), // 对update_time字段在更新的时候写⼊当前时间戳 array('send_msg_time','time',3,'function'),);}视图⽂件名 addMsg.html<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><div><form action="__SELF__" method="post" ><table border="1" width="100%" class="table_a"><tr><td>留⾔时间</td><td><input type="text" name="update_time"/></td></tr><tr><td>留⾔⼈</td><td><input type="text" name="user" /></td></tr><tr><td>标题</td><td><input type="text" name="title" /></td><td>内容</td><td><input type="text" name="msg" /></td></tr><tr><td>回复</td><td><textarea name="replay"></textarea></td></tr><tr><td colspan="2" align="center"><input type="submit" value="添加"><a href="__CONTROLLER__/index" rel="external nofollow" rel="external nofollow" ><input type="button" value="返回"></a></td></tr></table></form></div></body></html>视图⽂件名 index.html<!DOCTYPE html><html xmlns="/1999/xhtml"><head><title>留⾔列表 -- HoverTree</title><style>.keleyitable {width: 800px;}.keleyitable table, td, th {border: 1px solid green;margin-top:10px;}.klytd {width:100px;text-align:right}.hvttd {width:500px}</style></head><body><div style="margin:0px auto;" class="keleyitable"><h2>留⾔列表</h2><tr><td class="klytd"><a href="__CONTROLLER__/addMsg" rel="external nofollow" >添加</a></td><td class="hvttd"></td></tr><volist name="info" id="vo"><table><tr><td class="klytd">留⾔时间:</td><td class="hvttd">{$vo.update_time|date="Y-m-d H:i:s",###}</td></tr><tr><td class="klytd">留⾔⼈:</td><td class="hvttd">{$er}</td></tr><tr><td class="klytd">标题:</td><td class="hvttd">{$vo.title}</td></tr><tr><td class="klytd">内容:</td><td class="hvttd">{$vo.msg}</td></tr><tr><td class="klytd">回复:</td><td class="hvttd">{$vo.replay}</td></tr></table><tr><td class="klytd"><a href="__CONTROLLER__/upd/id/{$vo.id}" rel="external nofollow" >修改</a></td><td class="hvttd"></td></tr><tr><td class="klytd"><a href="__URL__/del/id/{$vo.id}" rel="external nofollow" >删除</a></td><td class="hvttd"></td></tr></volist></div><div style="width:800px;margin:10px auto;font-family:Arial, Helvetica, sans-serif;text-align:center;">HoverTree © 2014 </div> <!--最近打算开发⼀个留⾔板,的开源项⽬, --></body></html>视图⽂件名 sendMsg.html<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><form action="" method="post">标 题: <input type="text" name="title"><span style="color:red;">{$errorInfo.title}</span><br><br>信 息: <input type="text" name="msg"><span style="color:red;">{$errorInfo.msg}</span><br><br>留⾔⼈: <input type="text" name="user"><span style="color:red;">{$er}</span><br><br><input type="submit" value="提交"></html>视图⽂件名 upd.html<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><div><form action="__SELF__" method="post" ><input type="hidden" name="id" value="{$info.id}"><table border="1" width="100%" class="table_a"><tr><td>留⾔时间</td><td><input type="text" name="update_time" value="{$info.update_time}" /></td></tr><tr><td>留⾔⼈</td><td><input type="text" name="user" value="{$er}" /></td></tr><tr><td>标题</td><td><input type="text" name="title" value="{$info.title}" /></td></tr><tr><td>内容</td><td><input type="text" name="msg" value="{$info.msg}" /></td></tr><tr><td>回复</td><td><textarea name="replay">{$info.replay}</textarea></td></tr><tr><td colspan="2" align="center"><input type="submit" value="修改"><a href="__CONTROLLER__/index" rel="external nofollow" rel="external nofollow" ><input type="button" value="返回"></a> </td></tr></table></form></div></body></html>⽬录结构数据库 sql语句SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";SET time_zone = "+00:00";/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101 SET NAMES utf8 */;---- 資料庫: `msg`---- ------------------------------------------------------------ 表的結構 `ms_msg`--CREATE TABLE IF NOT EXISTS `ms_msg` (`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键',`admin_user` varchar(100) NOT NULL COMMENT '管理员',`update_time` int(10) NOT NULL COMMENT '更新时间',`status` int(2) NOT NULL COMMENT '状态',`send_msg_time` int(10) NOT NULL COMMENT '留⾔时间',`user` varchar(100) NOT NULL COMMENT '留⾔⼈',`title` varchar(100) NOT NULL COMMENT '标题',`msg` varchar(200) NOT NULL COMMENT '内容',`replay` varchar(200) NOT NULL COMMENT '回复',PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='留⾔表' AUTO_INCREMENT=19 ;---- 轉存資料表中的資料 `ms_msg`--INSERT INTO `ms_msg` (`id`, `admin_user`, `update_time`, `status`, `send_msg_time`, `user`, `title`, `msg`, `replay`) VALUES (1, 'ms', 1479449110, 1, 1479449110, '1', '拉克丝的减肥', '对⽅科⽬了', 'NULL'),(7, '', 321423432, 0, 0, 'kljflwk', 'kjsdfnlk', 'nlkdsjfn', 'kljnf'),(3, 'ms', 1479451017, 1, 1479451017, '1', '轻松的发⽣我', '沃尔沃飞', 'NULL'),(8, 'ms', 1479544687, 1, 1479544687, '', 'qwe', '', 'NULL'),(9, 'ms', 1479544693, 1, 1479544693, 'qwe', 'qwe', 'qwe', 'NULL'),(10, 'ms', 1479544970, 1, 1479544970, 'qwe', 'qwe', 'qwe', 'NULL'),(11, 'ms', 1479544979, 1, 1479544979, '12', '12', '12', 'NULL'),(12, 'ms', 1479545029, 1, 1479545029, '12', '12', '12', 'NULL'),(13, 'ms', 1479546357, 1, 1479546357, '12', '12', '12', 'NULL'),(14, 'ms', 1479547163, 1, 1479547163, '12', '12', '12', 'NULL'),(16, 'ms', 1479547667, 1, 1479547667, '12', '12', '123', 'NULL'),(17, 'ms', 2147483647, 1, 1479547682, '上来昆明3', '说的了付款', '蓝⼭咖啡', '123213');/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《》。
下面我们将通讲解一个留言本实例,来帮助你更好的掌握PHPCMS V9的二次开发流程。
并在开发过程中体验PHPCMS V9。
在此我们只做基本功能的演示,更多的功能开发,期待你的继续挖掘。
4.1需求分析本实例用PHPCMS V9基础功能开发设计一个留言本管理系统,要求如下:后台:可管理、回复、删除留言信息可控制留言是否前台显示可对留言系统配置设置选项,例如是否起用验证码,默认是否显示、是否允许游客留言等配置。
模块配置信息可多站点存储。
可批量管理所有未回复留言后台管理演示效果如下图所示:前台:根据后台模块配置选项,控制是否显示在线留言填写表单。
在线提交留言,根据后台配置选项,是否显示验证码,是否需管理员审核显示。
留言列表页,需根据后台配置每页条数进行分页。
前台演示效果如下图所示:4.2数据库和数据表的设计这里使用Mysql数据库来存储信息。
首先构建一个留言信息表 guestbook ,它有12个字段,即消息编号(gid),站点ID(siteid),标题(title),内容(content),回复内容(reply),回复状态(reply_status),会员ID(uid),会员姓名(username),审核状态(passed) ,留言时间(inputtime),回复人(replyer),回复时间(replytime)。
下面是创建该表的SQL代码:CREATE TABLE `phpcms_guestbook` (`gid` smallint(5) NOT NULL auto_increment,`title` char(80) NOT NULL,`content` text NOT NULL,`reply` text NOT NULL,`userid` mediumint(8) unsigned NOT NULL default '0',`username` char(20) NOT NULL,`gender` tinyint(1) unsigned NOT NULL default '0',`head` tinyint(3) unsigned NOT NULL default '0',`email` char(40) NOT NULL,`qq` char(15) NOT NULL,`homepage` char(25) NOT NULL,`hidden` tinyint(1) unsigned NOT NULL default '0',`passed` tinyint(1) unsigned NOT NULL default '0',`ip` char(15) NOT NULL,`addtime` int(10) unsigned NOT NULL default '0',`replyer` char(20) NOT NULL,`replytime` int(10) unsigned NOT NULL default '0',PRIMARY KEY (`gid`),KEY `hidden` (`hidden`,`gid`));4.3创建模块目录PHPCMS v9框架中的模块,位于phpcms/modules目录中每一个目录称之为一个模块,如果要创建一个模块,只要在 phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了。
PHP+MySQL写留言本留言本最基本的功能就是:1:用户写留言2:把数据写入数据库3:显示所有留言下面就开始制作我的留言本首先在PHPMYADMIN下建立一guest_book数据库然后在该数据库下建立一个contents的表该表下建立两个字段分别为name 和contentSQL语句如下:CREATE TABLE `contents` (`id` int(11) NOT NULL auto_increment,`name` varchar(20) NOT NULL default '"no name"',`content` mediumtext NOT NULL,PRIMARY KEY (`id`)) TYPE=MyISAM AUTO_INCREMENT=6好了数据库建好了~~`下面开始写程序了该程序包含三个页面post.htm(留言提交页面) index.php(留言显示页面) updata.php(把数据写入数据库的页面)post.htm代码如下:<html><head><meta http-equiv="Content-Type" c><title>留言本</title></head><body><form action="updata.php" method="post" name="name1">姓名:<input type="text" name="user_name"><br>留言:<textarea name="post_contents" rows="10" cols="50"></textarea><input type="submit"></form></body></html>updata.php页面代码如下:<?$name=$_POST['user_name'];$content=$_POST['post_contents'];$conn=mysql_connect("localhost:6033", "root", "");mysql_query("set names utf-8"); //解决中文乱码问题mysql_select_db("guest_book");$exec="insert into contents (name,content) values('".$_POST['user_name']."','".$_POST['post_contents']."')";$result=mysql_query($exec);?>index.php页面代码如下:<?$conn=mysql_connect ("localhost:6033", "root", ""); //打开mysql 服务器连接mysql_select_db("guest_book"); //链接数据库mysql_query("set names utf-8"); //解决中文乱码问题$exec="select * from contents"; //sql语句$result=mysql_query($exec); //执行sql语句,返回结果while($rs=mysql_fetch_object($result)){echo "<table><tr><td>姓名:".$rs->name."</td></tr>";echo "<tr><td>留言:".$rs->content."</td></tr></table><br/>";}?>至于分页,页面转向等功能暂时不用上去.为得就是使程序尽量精简.麻雀虽小.但是留言本的核心功能全在这里了.其中还需要再多说几句$conn=mysql_connect ("localhost:6033", "root", "");这一句很重要一开始我用的是$conn=mysql_connect ("127.0.0.1", "", "");怎么弄都不见数据进数据库去~~~~但是又没报错~~后来看了半天才知道原来哪个127的地方应该在PHPMYADMIN里看服务器名一击数据库端口是什么~~~还有ROOT那里就是mysql用户名了,后面的是密码还有个问题就是汉字乱码问题在$result=mysql_query($exec); 语句前面加上mysql_query("set names gb2312");或者mysql_query("set names utf-8");可疑防止提交进数据库的汉字以乱码形式存放在数据库中以及防止从数据库中查询出来的包含汉字的数据以乱码显示有时候尽管这样设置了后还是无法正常显示汉字~~~~我就遇见了这样的情况,由于我是在本地调试的,每次都要把浏览器上的那个字符编码调到utf-8才能正常显示汉字默认的编码总是ISO-8859-1 于是google了一下`~原来是apache设置不对.于是找到httpd.conf 设置文件把default-character-set=ISO-8859-1 改为default-character-set=utf-8然后再service httpd restart 重启appache 清除所有cookies与历史记录~~~然后问题就解决了------------------------------------------------------------------------------------今天再稍微改善下加一个管理员管理留言的功能~~~这里最主要要用到$_SESSION['item'] 这个东东~~` 好了`~`先把昨天的稍微改一下再把这个功能加进去~~~首先我们在首页同时显示留言,以及留言添加框~~这样使留言者方便使用`~`不说多了`~把代码贴出来再说:index.php<html><head><meta http-equiv="Content-Type" c><title>留言本</title></head><body><a href="admin_login.htm" tagert="_blank">留言管理</a><?$conn=mysql_connect ("localhost:6033", "root", ""); //打开MySQL服务器连接mysql_select_db("guest_book"); //链接数据库mysql_query("set names GB2312"); //解决中文乱码问题$exec="select * from contents"; //sql语句$result=mysql_query($exec); //执行sql语句,返回结果while($rs=mysql_fetch_object($result)){echo "<table><tr><td>姓名:".$rs->name."</td></tr>";echo "<tr><td>留言:".$rs->content."</td></tr></table><br/>";echo ".............................................................................................................................";}mysql_close();?><br><br><br><form action="updata.php" method="post" name="name1">姓名:<input type="text" name="user_name"><br>留言:<textarea name="post_contents" rows="10" cols="50"></textarea><input type="submit" value="提交留言"></form></body></html>updata.php页再加个header("location:index.php");语句重定向到主页面`~~ updata.php<?$name=$_POST['user_name'];$content=$_POST['post_contents'];$conn=mysql_connect("localhost:6033", "root", "");mysql_query("set names GB2312"); //解决中文乱码问题mysql_select_db("guest_book");$exec="insert into contents (name,content) values('".$_POST['user_name']."','".$_POST['post_contents']."')";$result=mysql_query($exec);mysql_close();header("location:index.php");?>HOHO~~~是不是用起来有那么回事了`~~好的`~下面再加个管理功能~~那么这个留言本就更加强大了`~留言管理模块分为管理员登录页admin_login.htm ,管理员验证页admin_check.php 后台管理首页admin_index.php先农这个登录页面admin_login.htm<form action="admin_check.php" method="post" name="form2">用户名:<input type="text" name="admin_name">密码:<input type="password" name="admin_password"><input type="submit" value="进入后台管理"></form>这个简单得再简单不过了,我就不说什么了`~~admin_check.php管理员验证<?session_start();$admin_name=$_POST['admin_name'];$admin_password=$_POST['admin_password'];$conn=mysql_connect ("localhost:6033", "root", "");mysql_select_db("guest_book");$exec="select * from admin where admin_name='".$admin_name."'";$result=mysql_query($exec);if ($rs=mysql_fetch_object($result)){ if ($rs->admin_password==$admin_password){$_SESSION['admin']="OK";header("location:admin_index.php");}else echo"密码不正确";}else echo"用户名不正确";mysql_close();?>这里最主要的就是session~~~凡事要用到session的地方.在页面最开始处要加上这一句session_start();否则就无法使用~~那么session究竟是什么东东呢?由于网页的传输方式(也就是http这个东西) 不是永久连接的~~`所以服务器无法在两个不同页面之间传送变量`~~唉.我一下子也说不清楚`~~还是看看这里/read.php?wid=87上面有很详细的介绍.反正就是用这个东西来验证管理员的身分了`~~好了下面说后台管理主页面admin_index.php<?session_start();if($_SESSION['admin']=="OK"){$conn=mysql_connect ("localhost:6033", "root", "");mysql_select_db("guest_book");$exec="select * from contents";$result=mysql_query($exec);while($rs=mysql_fetch_object($result)){echo "<table><tr><td>姓名:".$rs->name."</td></tr>";echo "<tr><td>留言:".$rs->content."</td></tr></table><br/>";echo "<a href=modify.php?id=".$rs->id." >修改</a> <ahref=delete.php?id=".$rs->id." >删除</a>";}echo "<br><br><br><br><br><a href=index.php >回首页</a>";}mysql_close();?>这里最主要是这一句echo "<a href=modify.php?id=".$rs->id." >修改</a> <a href=delete.php?id=".$rs->id." >删除</a>";用来向所连接到的地址传递参数~~看看下面的就知道有什么用了modify.php<?session_start();if($_SESSION['admin']=="OK"){$conn=mysql_connect ("localhost:6033", "root", "");mysql_select_db("guest_book");$exec="select * from contents where id=".$_GET['id']; /*这里这个$_GET['id']就是取得从那个连接传递过来的参数拉*/$result=mysql_query($exec);$rs=mysql_fetch_object($result);$name=$rs->name;$content=$rs->content;$id=$rs->id;?><form action="modify2.php" method="post" name="name1">ID :<?=$id?><input type=hidden name=id value=<?=$id?> >姓名:<?=$name?><br>留言:<textarea name="post_contents" rows="10"cols="50"><?=$content?></textarea><input type="submit" value="提交修改"></form><?}mysql_close();?>这里这个<?=$id> 其实就等于echo $id再看看最终的数据修改实现页面modify2.php<?session_start();if($_SESSION['admin']=="OK"){$conn=mysql_connect ("localhost:6033", "root", "");mysql_select_db("guest_book");$exec="select * from contents where id=".$_GET['id'];$exec="update contents set content='".$_POST['post_contents']."' whereid=".$_POST['id'];$result=mysql_query($exec);}mysql_close();header("location:admin_index.php");?>最后就是删除功能的实现了delete.php<?session_start();if($_SESSION['admin']=="OK"){$conn=mysql_connect ("localhost:6033", "root", "");mysql_select_db("guest_book");$exec="delete from contents where id=".$_GET['id'];mysql_query($exec);mysql_close();header("location:admin_index.php");}?>/////////////////////////////////////////////////////////////////////////////////////////////////////////////今天用到的知识如下:1: session_start(); $_SESSION['变量名']=$变量名或者某一特定值2: <a href="#####.php?var=##">aaa</a>用这个方法来传递参数同时用$_GET['var']来接收传递过来的值3: 数据修改:$exec="update tablename set item1='".$_POST['item1']."' where ...";4: 数据删除:$exec="delete from tablename where...";。