第八章 PHP案例.docx
- 文档编号:3574026
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:19
- 大小:67.61KB
第八章 PHP案例.docx
《第八章 PHP案例.docx》由会员分享,可在线阅读,更多相关《第八章 PHP案例.docx(19页珍藏版)》请在冰豆网上搜索。
第八章PHP案例
第一节留言本程序实例
【视频文件:
留言本程序实例
(1)】
【视频文件:
留言本程序实例
(2)】
8.1.1需求分析
留言本是WEB开发中比较典型的应用之一。
留言本程序虽然简单,但是她包括了表单提交、数据接受、写入数据库、读出数据库、分页等数据库编程的方方面面。
能够熟练编写一个功能较全面留言本是WEB开发人员的基本功
本案例就是编写一个支持填写留言、浏览留言、管理员回复留言、删除留言等功能的留言本。
8.1.2实施步骤
1、创建数据库和表
一个数据库和2个表。
数据库名为gbook。
两个表为Message和Admin。
Message表存放用户提交的留言以及管理员的回复。
Admin用来存放管理员的用户名和密码。
两个表的字段设置和字段数据类型如下:
Admin表字段设置情况
字段名
类型
描述
Username
Varchar(20)
Userpass
Varchar(20)
Message表字段设置情况
字段名
类型
描述
Id
Int(4)自增型
按顺序为每篇留言自动分配一个唯一的ID号
Author
Varchar(20)
留言人,20字节以内
Addtime
DATETIME
留言日期时间
Content
Varchar(1000)
留言内容。
1000字节以内
Reply
Varchar(1000)
管理员回复,1000字节以内
可以使用PHPadmin工具完成数据库的操作。
或者通过MySQL控制台用命令的方式创建。
这里给出SQL语句供读者参考。
创建数据库gbook
CREATEDATABASE‘gbook’;
创建表admin
CREATETABLE‘admin’(
‘usernmame’VARCHAR(20)NOTNULL
‘userpass’VARCHAR(20)NOTNULL
)
创建表message:
CREATETABLE‘message’(
‘id’INT(4)NOTNULLAUTO_INCREMENTPRIMARYKEY,
‘author’VARCHAR(20)NOTNULL,
‘addtime’DATETIMENOTNULL,
‘content’VARCHAR(1000)NOTNULL,
‘reply’VARCHAR(1000)NOTNULL
)
2、代码编写:
一共有6个页面。
分别是:
Index.php留言本首页
Login.php管理员登陆页面
Send.php用户填写留言页面
Manage.php管理员管理页面
Reply.php管理员进行回复的页面
Logout.php注销登陆的页面
理论上讲,这几个页面的编写顺序是无关紧要的,但是为了更好的说明本程序开发的流程,可以采用下面的步骤:
1)编写send.php,宫用户提交留言,只有提交了留言才能进行后面的留言显示,留言管理等。
2)编写index.php,本页面将显示10条最近的留言,并有分页功能。
3)编写login.php供管理员登陆。
4)编写manage.php和reply.php,用来进行留言管理;
5)编写logout.php,用来注销登陆。
3、代码如下:
Send.php文档
〈?
php
$name=$_POST["name"];
//看用户是否提交了新留言,如果提交了,则写入表message
if($name!
=""){
$content=$_POST["content"];
//以下代码获取当前日期时间
$addtime=date("Y-m-dh:
i:
s");
$id=MySQL_connect("localhost","root","1234");
MySQL_select_db("gbook",$id);
$query="insertintomessage(author,addtime,content,reply)values('$name','$addtime','$content','')";
MySQL_query($query,$id);
MySQL_close($id);
echo"〈scriptlanguage=javascript〉alert('留言成功!
点击确定查看留言.');location.href='index.php';〈/script〉";
exit;
}
?
〉
〈?
php
$name=$_POST["name"];
if($name!
=""){
$content=$_POST["content"];
$addtime=date("Y-m-dh:
i:
s");
$id=MySQL_connect("localhost","root","1234");
MySQL_select_db("gbook",$id);
$query="insertintomessage(author,addtime,content,reply)values('$name','$addtime','$content','')";
MySQL_query($query,$id);
MySQL_close($id);
echo"〈scriptlanguage=javascript〉alert('留言成功!
点击确定查看留言.');location.href='index.php';〈/script〉";
exit;
}
?
〉
以上部分为PHP代码,作用是将用户输入的表单数据接收并存入数据库。
下面的部分为HTML代码:
〈HTML〉
〈HEAD〉
〈TITLE〉欢迎使用简约不简单-我的留言本〈/TITLE〉
〈/HEAD〉
〈BODY〉
〈tableborder=1cellspacing=0cellspadding=0style="border-collapse:
collapse"align=centerwidth=400bordercolor=black〉
〈tr〉〈tdheight=100bgcolor=#6C6C6C〉
〈fontstyle="font-size:
30px"color=#ffffffface="黑体"〉简约不简单-我的原创留言本〈/font〉
〈/td〉
〈tr〉〈tdheight=25〉
〈ahref=send.php〉[我要写留言]〈/a〉 〈ahref=login.php〉[管理留言]〈/a〉
〈/td〉〈/tr〉
〈tr〉〈tdheight=200〉
〈formmethod="POST"action="send.php"〉
〈tableborder="1"width="95%"id="table1"cellspacing="0"cellpadding="0"bordercolor="#808080"style="border-collapse:
collapse"height="265"〉
〈tr〉
〈tdcolspan="2"height="29"〉
〈palign="center"〉欢迎您填写留言〈/td〉
〈/tr〉
〈tr〉
〈tdwidth="32%"〉
〈palign="right"〉您的名字〈/td〉
〈tdwidth="67%"〉〈inputtype="text"name="name"size="20"〉〈/td〉
〈/tr〉
〈tr〉
〈tdwidth="32%"〉
〈palign="right"〉留言内容〈/td〉
〈tdwidth="67%"〉〈textarearows="10"name="content"cols="31"〉〈/textarea〉〈/td〉
〈/tr〉
〈tr〉
〈tdwidth="99%"colspan="2"〉
〈palign="center"〉〈inputtype="submit"value="提交"name="B1"〉〈/p〉
〈/td〉
〈/tr〉
〈/table〉
〈/form〉
〈/td〉〈/tr〉
〈tr〉〈tdheight=80bgcolor=#6c6c6calign=center〉
〈fontcolor=#FFFFFF〉版权所有:
我的工作室〈br〉E-mail:
sadslk@
〈/td〉〈/tr〉
〈/table〉
〈/body〉
〈/html〉
Index.php代码
〈HTML〉
〈HEAD〉
〈TITLE〉欢迎使用简约不简单-我的留言本〈/TITLE〉
〈styletype=text/css〉
TD{
font-size:
12px;
line-height:
150%;
}
〈/style〉
〈/HEAD〉
〈BODY〉
〈tableborder=1cellspacing=0cellspadding=0style="border-collapse:
collapse"align=centerwidth=400bordercolor=blackheight="382"〉
〈tr〉〈tdheight=100bgcolor=#6C6C6Cstyle="font-size:
30px;line-height:
30px"〉
〈fontcolor=#ffffffface="黑体"〉简约不简单-我的留言本〈/font〉
〈/td〉〈tr〉
〈tr〉〈tdheight=25〉
〈ahref=send.php〉[我要写留言]〈/a〉 〈ahref=login.php〉[管理留言]〈/a〉
〈/td〉〈/tr〉
〈tr〉〈tdheight=200〉
〈?
php
//连接到数据库,查询留言并进行分页计算
$id=MySQL_connect("localhost","root","1234");
MySQL_select_db("gbook",$id);
$query="select*frommessage";
$result=MySQL_query($query,$id);
if(MySQL_num_rows($result)〈1){
echo" 目前数据表中还没有任何留言!
";
}else{//ELSE开始
$totalnum=MySQL_num_rows($result);
$pagesize=10;
$page=$_GET["page"];
if($page==""){
$page=1;
}
$begin=($page-1)*$pagesize;
$totalpage=ceil($totalnum/$pagesize);
//输出分页信息
echo"〈tableborder=0width=95%〉〈tr〉〈td〉";
$datanum=MySQL_num_rows($result);
echo"共有留言".$totalnum."条。
";
echo"每页".$pagesize."条,共".$totalpage."页〈br〉";
//输出页码
for($j=1;$j〈=$totalpage;$j++){
echo"〈ahref=index.php?
page=".$j."〉[".$j."] 〈/a〉";
}
echo"〈br〉";
//从Message表中查询当前页所要现实的留言,并根据时间顺序
$query="SELECT*FROMmessageorderbyaddtimedesclimit$begin,$pagesize";
$result=MySQL_query($query,$id);
//循环输出所有留言,如果管理员已经回复则同时输出回复
for($i=1;$i〈=$datanum;$i++){
$info=MySQL_fetch_array($result,MySQL_ASSOC);
echo"-〉[".$info['author']."]于".$info['addtime']."说:
〈br〉";
echo" ".$info['content']."〈br〉";
if($info['reply']!
=""){
echo"〈b〉管理员回复:
〈/b〉".$info['reply']."〈br〉";
}
echo"〈hr〉";
}
echo"〈/table〉";
}//ELSE结束
MySQL_close($id);
?
〉
〈/td〉〈/tr〉
〈tr〉〈tdheight=60bgcolor=#6c6c6calign=center〉
〈fontcolor=#FFFFFF〉版权所有:
我的工作室〈br〉E-mail:
sdgf@
〈/td〉〈/tr〉
〈/table〉
〈/body〉
〈/html〉
第二节简易BBS系统的开发
【视频文件:
简易BBS系统的开发】
8.2.1需求分析
首先对网站访问者进行分类
·浏览者
·注册用户
·版主
·管理员
并对各自的权限进行说明:
浏览者有浏览任何模块、任何帖子以及回复的权限,而且可以注册成为注册用户
注册用户有浏览任何模块、任何帖子以及回复的权限,而且还有发新帖子的权利并有机会被设为某子模块版主的机会。
版主有浏览任何模块、任何帖子以及回复的权限、而且有发新帖子、回复任何帖子的权限、版主还有删除任何模块的帖子和回复的删除权限。
管理员除了有版主所有的权限之外,还有添加父模块、管理父模块、添加子模块、管理子模块、查看所有用户、删除用户、检索用户、自己密码更改等权限。
8.2.2流程设计
8.2.3数据库设计
manage_user_info(管理用户信息数据表)
user_info(用户信息数据表)
father_module_info(父板块信息数据表)
son_module_info(子板块信息数据表)
note_info(发帖信息数据表)
一、manage_user_info(管理用户信息数据表)
编号
字段名
类型
字段意义
备注
1
id
int
2
user_name
char(16)
管理用户登录名
3
user_pw
char(16)
4
二、user_info(用户信息数据表)
编号
字段名
类型
字段意义
备注
1
id
int
2
user_name
char(16)
管理用户登录名
3
user_pw
char(16)
4
time1
datetime
注册时间
5
time2
datetime
最后登陆时间
三、father_module_info(父板块信息数据表)
编号
字段名
类型
字段意义
备注
1
id
int
2
module_name
char(66)
板块名称
3
show_order
int
显示序号
4
5
四、son_module_info(子板块信息数据表)
编号
字段名
类型
字段意义
备注
1
id
int
2
father_module_id
int
隶属的大板块的id
同father_module_info中id
3
module_name
char(66)
子板块名称
4
module_cont
text
子板块简介
5
user_name
char(16)
发帖用户名
同user_info中的user_name
五、note_info(发帖信息数据表)
编号
字段名
类型
字段意义
备注
1
id
int
2
module_id
int
隶属的自板块的id
同son_module_info中id
3
up_id
int
回复帖子的id
同本表中的id
4
title
char(88)
帖子标题
5
cont
text
帖子内容
6
time
datetime
发帖时间
7
user_name
char(16)
发帖用户名
同user_info中的user_name
8
times
int
浏览次数
8.2.4代码编写
MySQL.inc
〈?
php
classMySQL{
//连接服务器、数据库以及执行SQL语句的类库
public$database;
public$server_username;
public$server_userpassword;
functionMySQL()
{//构造函数初始化所要连接的数据库
$this-〉server_username="root";
$this-〉server_userpassword="root";
}//endMySQL()
functionlink($database)
{//连接服务器和数据库
//设置所有连接的数据库
if($database==""){
$this-〉database="bbs_data";
}else{
$this-〉database=$database;
}
//连接服务器和数据库
if(@$id=MySQL_connect('localhost',$this-〉server_username,$this-〉server_userpassword)){
if(!
MySQL_select_db($this-〉database,$id)){
echo"数据库连接错误!
!
!
";
exit;
}
}else{
echo"服务器正在维护中,请稍后重试!
!
!
";
exit;
}
}//endlink($database)
functionexcu($query)
{//执行SQL语句
if($result=MySQL_query($query)){
return$result;
}else{
echo"sql语句执行错误!
!
!
请重试!
!
!
";
exit;
}
}//endexec($query)
}//endclassMySQL
?
〉
MySQL.inc
Myfunction.inc
〈?
php
classmyfunction{
/////////////////字符转换:
向数据库中插入或更新时用//////////////////////////
functionstr_to($str)
{
$str=str_replace(""," ",$str);//把空格替换html的字符串空格
$str=str_replace("〈","<",$str);//把html的输出标志正常输出
$str=str_replace("〉",">",$str);//把html的输出标志正常输出
$str=nl2br($str);//把回车替换成html中的br
return$str;
}
/////////////////////由子板块的id返回该子板块的主题数///////////////////////
functionson_module_idtonote_num($son_module_id){
$aa=newMySQL;
$aa-〉link("");
$query="select*fromnote_infowheremodule_id='$son_module_id'andup_id='0'";
$rst=$aa-〉excu($query);
returnMySQL_num_rows($rst);
}
////////////////////////////////////////////////////////////////////////////
/////////////////////由子板块的id返回该子板块的帖子数///////////////////////
functionson_module_idtonote_num2($son_module_id){
//由子板块的id返回该子板块的主题数
$aa=newMySQL;
$aa-〉link("");
$query="select*fromnote_infowheremodule_id='$son_module_id'andup_id='0'";
$rst=$aa-〉excu($query);
$num=MySQL_num_rows($rst);
while($note=MySQL_fetch_array($rst,MySQL_ASSOC)){
$query="select*fromnote_infowhereup_id='$note[id]'andmodule_id='0'";
$rst=$aa-〉excu($query);
$num+=MySQL_num_rows($rst);
}
return$num;
}
/////////////////////由子板块的id输出该子板块的最新帖子/////////////////////
functionson_module_idtolast_note($son_module_id){
//由子板块的id输出该子板块的最新帖子
$aa=newMySQL;
$aa-〉link("");
$query="select*fromnote_infowheremodule_id='$son_module_id'orderbytimedesclimit0,1";
$rst=$aa-〉excu($query);
$note=MySQL_fetch_array($rst,MySQL_ASSOC);
$query2="select*fromnote_infowhereid='$note[up_id]'";
$rst2=$aa-〉excu($query);
$note2=MySQL_fetch_array($rst2,MySQL_ASSOC);
echo$note2[title];
echo"〈br〉";
echo$note[time]." ".$note[use
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第八章 PHP案例 第八 PHP 案例