1.1 留言板的原理
先让我们来看看现实生活中留言板是如何工作的,想象这样一种情况:
你说好在家等你的女友,可是临时有事情要出门,于是你决定写一个留言,以免回来时被修理。
让我们仔细分析一下事情的经过:
1 构思留言,想一个巧妙的理由
2 写下留言
3 将留言贴到门上,这样你的女友才能看到
其实在网络中,留言板也是同样工作的:
1 在页面上写好留言
2 将留言保存下来
3 在适当的时候适当的地方向适当的人显示留言
下边是这个最简单的留言板工作方式的示意图:
1.2 留言板的实现
下面让我们来考虑这几个页面的实现。
POST.PHP很简单,它只需要一个From,就OK了。
<!--
///////////////////////////////////////////////////////////
/// POST.PHP: This web will submit the data to SAVE.php ///
///////////////////////////////////////////////////////////
-->
<html>
<form method="POST" action="SAVE.PHP">
<p>
题目:<input type="text" name="texttitle" size="65"></p>
<p>内容:</p>
<p><textarea rows="9" name="textcontent" cols="70"></textarea></p>
<p><input type="submit" value="提交" name="B1">
<input type="reset" value="重置" name="B2"></p>
</form>
</html>
如果你看不懂上边的Html代码,那就说明你对Html还不够熟悉,请先温习一下Html的语法。这段代码表示了一个这样的页面:
可以看到,上边的Html代码通过Form,将“题目”和“内容”传递给了页面SAVE.PHP;在SAVE.PHP中我们可以用$texttitle和$textcontent获得它们的值。
然后让我们进行第二步,“将留言保存下来”。
问题就在于如何将POST.PHP 传过来的两个变量保存下来。要想长时间的保存变量,有两种方法:保存成文件或者放入数据库里。对一个个人留言板来说,使用数据库有些大材小用的感觉,所以我们用文件的形式来保存数据。
下边是我们要用到的几个文件操作函数:
fopen
(PHP 3, PHP 4 >= 4.0.0)
fopen -- Opens file or URL
Description
int fopen ( string filename, string mode [, int use_include_path])
flock
(PHP 3>= 3.0.7, PHP 4 >= 4.0.0)
flock -- Portable advisory file locking
Description
bool flock ( int fp, int operation [, int wouldblock])
fwrite
(PHP 3, PHP 4 >= 4.0.0)
fwrite -- Binary-safe file write
Description
int fwrite ( int fp, string string [, int length])
fclose
(PHP 3, PHP 4 >= 4.0.0)
fclose -- Closes an open file pointer
Description
bool fclose ( int fp)
关于函数的具体阐述请查阅PHP手册,如果你还没有,请到http://www.php.net/distributions/manual/php_manual_en.chm下载。现在,我们就把留言存起来:
<?php
///////////////////////////////////////////////
// This web will save the words U leave.. //
///////////////////////////////////////////////
$ft=fopen('words.txt',"a+");
flock($ft,LOCK_EX);
$data=$texttitle."\n".$textcontent;
fwrite($ft,$data);
$ok=fclose($ft);
if($ok) echo "save the txet successfully...";
?>
需要注意的是flock($ft,LOCK_EX)这一句并不是可有可无的,它在对文件进行写操作之前锁定了文件,这样就有效地避免了多个用户同时对该文件进行操作而出现的错误。看看目录里边,是不是多出来了一个名叫words.txt的文本文件呢?打开一看,果然是我们刚才存放的数据。
就这样,SAVE.PHP也实现了,接下来就是显示留言了,最简单地,你可以让ECHO.PHP直接显示words.txt,方法是使用框架或者重定向。
下面我们分别用框架和重定向的方法来实现ECHO.PHP
<!--
///////////////////////////////////////////////////////////
/// ECHO.PHP: Use a fram to show the file words.txt
///////////////////////////////////////////////////////////
-->
<html>
<head>
<title>ECHO.PHP</title>
</head>
<frameset rows="100%,*" border="0" frameborder="0" framespacing="0" framecolor="#000000">
<frame src="words.txt" scrolling="auto" ></frameset><noframes>
<body></body>
</html>
由于IE把TXT文件当作HTML文件操作,所以直接把words.txt当作一个框架网页就可以了。
Note 有人认为这是IE的一个漏洞,因为你在网上浏览文本文件时,往往会放松警惕,不会想到文本文件居然可以和HTML文件一样,可以使用脚本来进行破坏活动。
如果用重定向来实现的话就需要用到JavaSvript了:
<!--
////////////////////////////////////////////////////////////
/// ECHO.PHP: Use Javascript to show the file words.txt
////////////////////////////////////////////////////////////
-->
<script>
location="words.txt"
</script>
Note 当然重定向还有其他的方法,比如利用HTML文件的META标签来实现。
这样,我们就完成了一个最简单的留言板。