没有合适的资源?快使用搜索试试~ 我知道了~
PHPChina 留言本实例
3星 · 超过75%的资源 需积分: 10 38 下载量 2 浏览量
2009-04-01
15:55:23
上传
评论
收藏 1.85MB PDF 举报
温馨提示
试读
19页
Web 程序有很多东西都是相通的,留言本中很多原理都是相当用有的。你在加入管理员回复后 如果能加入任何会员也能回复,那就是一个小型论坛了;如果你加入一些RSS,最后评论列表,那 就是一个BLOG 了,呵呵。他们其中很多原理都是差不多的,只是对程序要求的功能不同,最后设 计出来的数据结构,代码结构有所不同,数据展示出来的形式不同而已。
资源推荐
资源详情
资源评论
教程连载
http://www.phpchina.com
50
教程连载 1:PHPChina 留言本实例
周路明
在第一期中,我们来一步一步实现一个最基本的留言本。留言信息包括留言者,留言内容,
留言时间,留言者 IP。(本文假设你已对 HTML 以及 PHP 语法比较熟练了)
第一步:设计数据库
新建一个数据库,打开
phpMyAdmin,新建一个数据库 gb,下面整理选择 utf8_general_ci,
然后在数据库中建一个表
message,字段数为 5:
字段名 类型 长度 属性 额外 其他
id int 10 unsigned auto_increment
主键
username char 100
content text
time int 10 unsigned
ip char 15
然后下面数据库类型选择 MyISAM(各个类型的优缺点请查看 MYSQL 手册),整理选择
utf8_general_ci(MYSQL 版本在 4.1 以下则不用选择,没有编码问题)。
每个字段的含义:
id -- 留言的编号,类型为整数型,长度是 10,属性选择为 unsigned 是表明这个字段
是无符号字段,不会有负数,所以可以存取的范围会增加一倍(因为如果原来的范围是 -9 到
10,那么设置为 unsigned 后范围则变为 0 到 19),额外设置为 auto_increment,表明
这个字段是自动增加的,我们不用管插入数据时它是啥值,它会自动在最大的 id 的基础上
自动加 1,其他设置为主键。
username -- 留言者的名字,类型为字符型(关于 char 与 varchar 的区别请查看
MYSQL 手册),长度为 100(正常人用户名不可能超过 100 吧,其实应该尽量减少长度,
提高性能,节约空间)
content -- 即留言内容,类型为 text(text 和 blob 的唯一的区别在于 text 不区分大
小写,而 blob 区分大小写),text 类型可以存足够多的数据,足够存好几篇文章了,此类型
不能设置长度,否则报错。
time -- 即发布留言的时间,类型为 int,长度为 10,保存的数据格式是 UNIX 时间戳
(
即用 PHP 函数 time()得到的 10 位数字),而不存 xxxx-xx-xx 这样的格式,为何这样后
面或解释。
ip -- 即留言者的 IP,格式为 xxx.xxx.xxx.xxx,总共 15 个字符,所以长度设置为 15。
教程连载
http://www.phpchina.com
51
第二步:设计界面
在这我们直接偷蓝色理想的 BXNA 的界面(
http://blog.blueidea.com )
HTML 和 CSS 的东西就不详细讲了,不然写 10 期也写不完这个留言本了☺(在 code 文件
夹中有一个 html 文件,是单独分离出来的)
第三步:开始写程序咯
先要想好程序的整体构架,代码执行的流程等。
先说一下我们做的这个程序的整体运行流程:
程序是根据不同的 URL 参数(参数 m 和参数 a)来调用不同的模块文件里的不同函数。比如
URL 是
index.php?m=user&a=info,则程序会先包含 mod_user.php,并调用里面的函数
user_info();,这个函数会返回一段 HTML(不会直接输出,因为我们要用到 smarty,最后
一次性输出)或跳到别的页面。所有的请求都是从
index.php 这个入口开始,mod 文件不
能被直接调用。
下面开始写程序入口部分:
首先建立一些引用的文件,放在 includes 文件夹下,比如一些常量
config.inc.php,所有
函数
function.inc.php,后缀为 PHP,这样通过浏览器直接访问这些文件将看到空白(没有
输出)。
在
config.inc.php 中定义 5 个常量:
function.inc.php
用来存放自定义函数。
在这一期中总共有 3 个自定义函数。具体代码请查看文件,有详细注释。
print_mysql_error 显示数据库错误信息,并终止脚本
define('DB_HOST' , 'localhost'); //数据库地址
define('DB_USER' , 'root'); //数据库用户名
define('DB_PASSWORD' , '12345'); //数据库密码
define('DB_NAME' , 'gb'); //数据库名
define
(
'IN'
,
true
);
//
设置
一
个常量
,
可以判断
mod
文件是否被非法调用
教程连载
http://www.phpchina.com
52
get_client_ip 取得用户 IP
show_result_page 显示结果页面,返回 HTML
把
smarty 文件夹全拷过去。(在后面会讲到简单用法)
然后建立首页
index.php 文件,具体代码请看附件中的对应文件。
其中比较重要的一些地方。
$mod_list
是一个数组,包含合法的模块名(对应 URL 中的参数 m),实现根据 URL 中不同
参数调用对应的功能模块。在这一节中,我们只包含两个模块,即
main 和 add,用来显示
留言和添加留言。
根据不同的
$_GET['m'],调用不同的 mod 文件。然后根据不同的$_GET['a'],调用不同的
函数。
比如
$_GET['m'] == 'main',$_GET['a'] == 'up',则包含文件 mods/mod_main.php,并
调用这个文件里的
main_up()函数,来执行相应功能,比如显示留言。默认调用 main_page()
函数。
后面有个使用 smarty 来实现 HTML 和 PHP 的分离,这样有利于美工和程序员协同工作。
如果你没有用过 smarty 或其他模板类也不用担心,我们会在后面介绍基本的用法。但如果
你想学好它,建议去它的官方站看看,并下载一份手册。(
http://smarty.php.net )
由于针对初学者,在这我们就不使用 MYSQL 的类了,而直接使用 PHP 中自带的函数。
如果你现在直接访问
index.php,他会提示 mod_main.php 文件不存在。(因为默认是调
用这个文件)
下面开始写模块部分 ☺
建立一个文件夹名为
mods,用来存放所有模块文件。
建立我们需要的
mod_main.php 文件。具体代码:
error_reporting(E_ALL);
//打开所有错误报告,这个是为了调试时用,程序完成时可以把它设置为比较低的级别。
header("Content-Type: text/html; charset=utf-8");
//设置 http 头,因为 MYSQL4.1 以后有编码问题,没弄好的话会出乱码,在这强行定义文件编码,
和数据库设置的编码一致
教程连载
http://www.phpchina.com
53
mod_main.php
的主要流程:
if(!defined('IN')) die('Access denied');
这个用来确认该文件是否是被 index.php 文件包含(因为 index.php 包含了
config.inc.php,而 config.inc.php 里定义了常量 IN),如果 IN 常量没被定义,证明不
是被 index.php 包含的,则结束脚本,并输出 Access denied。这是一个常用的防止一个
文件被直接调用的方法。
先执行查询
SELECT * FROM `message` ORDER BY `id` DESC
意思即查找
message 表中所有数据的所有字段,并按 id 字段倒序排列。
然后判断
mysql_errno()是否为 0,不为 0 则证明有错误,则用 print_mysql_error()函数输
<?php
if(!defined('IN')) die('Access denied'); //判断是否被非法引用
function main_page() //默认调用的函数
{
global $smarty;
//查数据库
$sql = "SELECT * FROM `message` ORDER BY `id` DESC"; //查询语句
$query_id = mysql_query($sql); //执行查询
if(!mysql_errno()) //如果查询没有错误
{
$message_array = array();
while($rs = mysql_fetch_array($query_id)) //循环取出结果
{
$message_array[] = array(
'id' => $rs['id'],
'username' => $rs['username'],
'content' => $rs['content'],
'time' => date("Y-m-d H:i:s" , $rs['time']),
'ip' => $rs['ip'],
);
}
$smarty->assign('message' , $message_array); //替换模板变量
}
else
{
print_mysql_error(); //格式化输出数据库错误
}
return $smarty->fetch('message.tpl');
}
剩余18页未读,继续阅读
资源评论
- wwwsoftcom2013-07-19好,现在正在学这个东西,下来看看哈
- satech2015-06-25晕,没说清楚,我以为带源码呢,白下了。教程已经有了,差源码了。。。
xiucai315
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于FPGA实验板的多功能数字时钟 利用Quartus实现设计与仿真(课程设计含实验报告)
- 基于CNN的人体姿态和动作识别python源码+项目说明文档.zip
- tensorflow-2.3.0-cp37-none-linux.zip
- 基于VisionTransformer的图像去雾算法研究与实现python源码+项目说明+数据集.zip
- hckdydydykddgjxjgxgj
- python 数据科学手册
- Java项目之jspm网上书店销售管理系统(源码 + 说明文档)
- 基于Pytorch实现对偶生成对抗网络来实现图像去雾python源码+项目说明+代码注释.zip
- 放疗物理师上岗证考试资料
- Java项目之jspm青少年体质健康数据管理与分析系统(源码 + 说明文档)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功