首 页 ┆ 源码下载 ┆ IT学院 ┆ 字体下载 ┆ 模板下载 ┆ 源码发布 ┆ 广告合作 ┆ 网站地图 ┆ 虚拟主机 ┆ 中文域名
► 设为首页
► 加入收藏
► 联系我们
源码下载 >> ASP源码 | PHP源码 | ASP.net源码 | JSP源码 | CGI源码 | VC/C++源码 | VB源码 | Delphi源码 | Flash源码
文章学院 >> 网络编程 | 网页设计 | 图形图象 | 数据库 | 服务器 | 网络媒体 | 网络安全 | 操作系统 | 办公软件 | 软件开发 | 黑客知识
字体下载 >> 精制字体 | 非英字体 | 艺术字体 | 著名字体 | 哥特式 | 简单字体 | 手写体 | 节假日 | 图案字体 | 精度像素 | 中文字体
模板下载 >> 企业门户 | 数码网络 | 休闲娱乐 | 影视音乐 | 旅游名胜 | 文化艺术 | 电子商务 | 个性展示 | 登陆导航 | Flash模板
►►您当前的位置:源码园 → IT学院 → 网络编程 → PHP专区 → 文章内容

教程连载1:PHPChina留言本实例

作者:佚名  来源:转载  发布时间:2007-12-24 13:37:44

  在第一期中,我们来一步一步实现一个最基本的留言本。以后每一期都会在PHP专区及phpchina论坛贴出来,以便大家学习交流。

  留言信息包括留言者,留言内容,留言时间,留言者IP。(本文假设你已对HTML以及PHP语法比较熟练了)

  第一步:设计数据库

  新建一个数据库,打开phpMyAdmin,新建一个数据库gb,下面整理选择utf8_general_ci,然后在数据库中建一个表 message,字段数为5:



  然后下面数据库类型选择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。


  第二步:设计界面

  在这我们直接偷蓝色理想的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显示数据库错误信息,并终止脚本

  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文件。具体代码:



  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()函数输出错误信息,并结束整个代码。

  如果没有错误,则用while循环取得信息(一条留言循环一次)。在循环中,先定义一个空数组 $message_array = array();,然后每循环一次,往这个数组中插入另一个数组,组成一个二维数组。存的都是留言信息。

  循环完后$smarty->assign('message' , $message_array); 即把$message_array变量赋予smarty中的message,用来做模板里的替换(即把模板里的$message部分替换为$message_array变量的值)。

  最后return $smarty->fetch('message.tpl'); 即取得message.tpl模板的信息,替换模板变量后并返回。

  打开template/bxna/message.tpl 文件可以发现



  这样一段代码,它的意思即循环输出,$message不是一个数组么,即循环输出这个数组。

  其中[##$message[k].u

[1] [2]  下一页

[] [返回上一页] [打 印]
  • 上一篇文章:Zend Studio 5.5 Zend公司新骄傲
  • 下一篇文章:抛砖引玉系列 -- smarty缓存控制

  • 相关文章:
  • [组图]教程连载1:PHPChina留言本实例
  • 用Perl制作留言本实例之四
  • 用Perl制作留言本实例之三
  • 用Perl制作留言本实例之二
  • 用Perl制作留言本实例之一
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 源码发布
Copyright © 2003-2009 Ymyasp.Com. All Rights Reserved .
备案序号:粤ICP备07029071号