3.6 管理系列网络内容
大家有看很多技术手册(PHP在线技术手册等)和网络章回小说的经验。一般在网页的上方或下方有“前一页”“后一页”的链接。在大多数情况下,这些链接是固定的。如果想在那些网页中插入一页新的内容,或者调整网页的顺序,必须修改相关静态链接。如果能在数据库中管理这些内容,就自由地进行内容编辑,调整网页的顺序更是小事一桩。本节将实现一个用数据库管理系列网络内容的应用,如图所示。
本例要点
本节利用关系数据库(RDB)的“自结合”的特性来进行数据的检索,最后实现数据在画面的正确显示。
“结合”是数据库应用的一个重要特征,在RDB中,表内的记录根据被称为“主键(primary key)”的表中保持唯一性的键来管理的,通过与主键一致的外部表的列(外键foreign key)的连接,可将多个表结合在一起。主键和外键可由一列或多列组成。这样,通过各个独立表间的结合,抽出必要信息的特征,是这种数据库之所以称之为“关系”数据库的由来。
关系数据库里有各种结合方式,如“交叉结合”、“左结合”、“右结合”、“联合结合”等,可以参照各种介绍数据库的书籍理解这些概念。下面介绍一下本节所用的“自结合”。根据上面介绍的主键、外键及结合的概念,其实自结合没有多少奥妙之处。首先自结合的表中不仅有主键列,同时又自结合用的外键。其次自结合时,将对象表“重复使用”:一个作为主表,另一个作为外部表。
本节应用中用到的连接表(link),有主键id(连接ID),同时有外键nextId(下一页的连接),由主表的连接ID结合外部表的下一页的连接,完成数据的检索。
表link的数据结构如表3-12所示。
表3-12 表link的数据结构
目录结构
数据库的表结构
表3-13 文档连接表(link)
本例代码
DocNavi.php脚本根据当前的URL以及link表中的数据,生成前(后)页的导航。前(后)页不存在时,将链接到首页(下一节的index.php)。
由表的自结合取得前后页的URL。请参照本节要点中的关于自结合的解说。
请注意WHERE语句里设定的检索条件,由basename函数除去了除文件名外的绝对路径部分,因为表中只登录了文件名,如果不剔除文件名外的绝对路径将搜索不出结果。
判断结果记录是否存在,存在时11到26行生成导航条,否则不生成。
生成前一页的链接,数据不存在时链接到首页(index.php)。
生成后一页的链接,数据不存在时链接到首页(index.php)。