用文件做数据库(php留言板)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用文本文档做数据库,实现php留言板的制作(转)
写一个php留言板的程序,大都难不倒大家,但是以前听别人说可以用.txt文件做数据库,今天就像用下.txt文件做数据库,制作一个简单的留言板,一是提高自己对fopen()、file()、fwrite()等函数的掌握的程度,二是看看以后能不能真的用.txt文件做数据库做几个小项目。
在写代码前我们需要明确一点,关系型数据库比如mysql、sqlserver等数据库与txt文档存储数据的优缺点。之所以称为关系型数据库是因为每个每个表与表,字段与字段之间是存在关系的,我们可以利用这样的关系实现数据的存储与查询,而我们只需要插入几行数据,数据的大小真的是微不足道,但是还必须写在一个地方,那么我建议你使用文本文档作为你存储的载体,因为如果存储的数据不大,存储在文本文档读取速度会比数据库快的多,而且还省去了很多没必要的花费,而文本文件做数据存储的缺点在于,当数据多了,那么查询速度就会慢了。所以,我们要根据我们的项目的不同,选择合适的数据载体。好了,我们进入正题,用文本文档做数据库,写php留言板。
先写出留言板的框架:(guestBook.html)
body{margin:0;padding:0}
h1{display:block;margin-left:35px;margin-top:10px;}
li{list-style:none;padding:5px;}
#guestbook{margin-top:10px;margin-left:20px;}
ul{padding:10px;}
li span{width:100px;display:block;}
Guest Book
form表单提交到savacomment.php文件中,那么我们就来分析下,这个文件内的代码。
foreach($_POST as $_k =>$v){${$_k} =$v;}
$data =$title.’-’.$comments;
//if(!file_exists(data.txt))fopen(data.text,”W+”);
if(!$hand=@fopen(“data.txt”,”a”)){
echo ‘写入文件打开失败!’;
exit();}
if(!fwrite($hand,$data.”\r\n”)){
echo “内容插入失败!”;
exit();}
header(“LOCATION:comment.php”)
?>
分析:
foreach($_POST as $_k =>$v){${$_k} =$v;} 这句代码我是以前看dedecms 源代码的时候看到的,我们如果要调用form表单传过来的数据,比如调用title 的值一般是 $_POST['title']这样的,如果用了上面的这段代码,我们就可以直接$title了,这样就简单了很多。
然后我们就把传过来的 title和comment合并成一个变量,这样方便插入的txt 文件中去。为什么我有一段注释的代码呢?因为我当时想如果这个文档不存在怎么办,那么我们就要去创建,而创建的函数和读取的函数是一样的,都是fopen,如果这个文件不存在而你又在读取,那么它会自动创建的,所以上面那句是多余的,可以注释掉。
fopen返回的是一个文件的指针,把这个指针传给fwrite就能向txt文件中写入了。在这里遇到了一个问题,那就是怎么让每条数据分行显示呢?我用的是‘\n’,但是发现不行,还是一行显示,在网上查询了下,原来在window下,向文本文档插入换行符要使用\r\n,而在linux下\n才起作用。因为我使用的是window下搭建的LAMP环境,所以就要用\r\n了。
这样就完成了把每条数据按照行的格式插入到文本文档里面了,格式如下:
this is a tiltle-this a comments
this is a tiltleddd-this a commentsdd
标题和comment 之间用“-”隔开,方便以后数据的分离。
下面要做的任务就是显示评论了,在这里我用了header()函数,把数据的显示交给另一个文件来处理,源代码如下:
$comm=array();
$comments=file(‘data.txt’);
foreach($comments as $key=>$val){
if(!empty($val)){
$comm[]=explode(‘-’,$val);
}
}
//var_dump($comm);
?>
foreach($comm as $key=>$comment)
{echo “
?>
在这里有一个很重要的函数,那就是file()函数,他的作用是把文本文档里面的每行,放到一个数组中,数组中的每一项对应每行记录。虽然把数据弄到了,但是不是我们想要的格式呀,因为现在title和comment在一块呢,在这里我们就用explode把其分类开来,并把数据存储在一个二维数组中,数组格式如下: