热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

当前位置 :| 主页>Linux教程>编程开发>PHP>

PHP、MySQL教程(6)

来源: 作者: 时间:2008-05-30 Tag: 点击:
迄今为止,我们已经看到了一些数据库驱动的网页:这些页面在被请求时可以显示从一个MySQL数据库中得到的信息。但是,一直到现在,我们还没看到这样的一个解决方案,那就是如何方便地管理一个诸如SitePoint.com这样复杂的大型网站。当然,我们的笑话数据库是挺不错的,但是在我们要管理目录和作者时,我们总是返回到MySQL命令行,去使用复杂的SELECT语句和INSERT语句,以及那些表名和列名。

  要将一个仅仅是显示数据库中信息的网站改造成一个完全的数据库驱动的网站,我们需要增加一个内容管理系统。这样的一个系统通常包含了一系列的网页,对这些网页的访问应该是仅供被授权可以更新的网页的用户使用。这些页面提供了一个数据库管理的界面,通过这个界面,用户可以很容易地浏览并变更数据库中存储的信息,而不用再去理会那些晦涩的SQL语法。

  实际上,我们在第四章的最后已经开始建立这样的内容管理系统了,当时我们允许网站的访问者使用一个Web的表单添加笑话并且可以通过一个“删除笑话”的连接删除笑话(如果你完成了那个挑战的话)。但是所有的这些功能是在一个对所访问者都可见的页面上的。而事实上你可能不想让任何人都可以未经你的授权就向你的网站添加一些可能是没用的材料。而且你也不希望任何人都可以从你的站点中删除笑话。

  要克服这些“危险”,你需要一个限制访问的网站管理页面,这样你就可以避免将你的数据暴露给所有人,而你仍可以不再使用SQL查询语句而直接管理数据库的内容。在这一章里,我们会扩展我们的笑话管理系统的能力来有效利用我们在第五章中对数据库作的改进。特别地,我们会允许网站的管理者来管理作者和目录,并对于相应的笑话指定作者和目录。

  正如我们在前面解释的,这些管理页面必须被一个适当的访问权限配置保护。将相应的PHP文件放置到一个包含授权用户的.htaccess文件的目录下是一种较好的方法。有关这方面的信息你可以查阅你的Web服务器的相关文档。

  从这一章开始,我们会使用一些相当大的PHP文件,由于空间的限制,我们会省略其中的一些细节。

  首页

  在第五章的结尾,我们的数据库包括了描述下面三种事物的数据表:笑话、作者和笑话目录。请注意我们假定每一个作者只有一个email地址,所以我们没有一个单独的描述email地址的数据表。因此,我们的内容管理系统的首页将包含下面三个连接来管理这三项:

<!-- admin.html -->
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>JMS</TITLE>
</HEAD>

<BODY>
<H1>Joke Management System</H1>
<UL>
<LI><A href="jokes.php">Manage Jokes</A>
<LI><A href="authors.php">Manage Authors.php</A>
<LI><A href="cats.php">Manage Joke Categories</A>
</UL>
</BODY>
</HTML>

  管理作者

  让我们从authors.php开始,这个文件可以让管理者增添新的作者、删除和编辑已经存在的作者。如果你对多功能页面的主意有兴趣,你也许会想要将所有的代码放到同一个文件authors.php中去。因为如果那样做的话,代码码将会相当长,所以在我们的例子中将这个文件分开了。

  第一件事是我们想要呈现给管理者的是一份已经存储在数据库中的所有作者的清单。从代码的角度看,这和我们列出在数据库中的所有笑话没什么两样。因为我们需要可以删除和编辑已经存在的作者,所以我们在每个作者的姓名后面包含了这些功能的连接。就象我们在第四章的最后的挑战中的“删除笑话”的连接一样,在连接中包含了这个作者的ID,这样目标程序就可以知道我们想要编辑或删除哪个作者。最后,我们还提供一个“建立新作者”的连接使其导向一个表单,这就和我们在第四章中所做的“添加笑话”一样。

<!-- authors.php -->
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>Manage Authors</TITLE>
</HEAD>

<BODY>
<H1>Mange Authors</H1>
<P align="center"><A href="newauthor.php">Create New Author</A></P>
<UL><?php
$cndbx = @mysql_connect("localhost", "root", "");
if ( !$cndbx ) {
echo("<P>Unable to connect to the database server at this time</P>");
exit();
}
if ( !@mysql_select_db("jokes", $cndbx) ) {
echo("<P>Unable to locate the joke database at this time</P>");
exit();
}
$authors = mysql_query("SELECT ID, Name FROM Authors");
if ( !$authors ) {
echo("<P>Error retrieving authors from database.<BR>
Error: " . mysql_error() . ".</P>");
exit();
}
while ( $author = mysql_fetch_array($authors) ) {
$id = $author["ID"];
$name = $author["Name"];
echo("<LI>$name [<A href='editauthor.php?id=$id'>Edit</A>|<A href='deleteauthor.php?id=$id'>Delete</A>]");
}
?>
</UL>
<P align="center"><A href="admin.html">Return to Front Page</A></P>
</BODY>
</HTML>

  删除作者

  deleteauthor.php用来从数据库中删除指定ID的作者。正如我们前面看到的,这可以很容易地通过一个DELETE命令来实现,但是这儿要稍微复杂一点。要记得我们的Jokes数据表中有一个AID列是指出该笑话的作者的。当从数据库中删除作者时,我们必须删除其它数据表中提供这个作者的地方。如果我们不这样做,下一个作者被添加时,他的ID可能和我们现在删除的作者的ID相同,而属于被删除的作者的笑话也将错误地指向新的作者。

  我们有两个选择来处理这个情况:

  在删除一个作者时,同时删除属于这个作者的所有笑话。
  当删除一个作者时,将属于这个作者的所有笑话的AID设为NULL,以标志它们没有作者。

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
栏目列表