11.2.7 实现BLOG文章的编辑功能
用户单击“编辑”链接后,进入日志文章的编辑界面。该编辑界面可以让用户修改日志文章的标题、修改文章内容,修改后提交,即可完成对日志文章的编辑。BLOG的编辑界面如图11-13所示。
(1)编辑日志文章的程序,首先应该判断用户是否登录,也就是说只有登录用户才能执行日志文章的修改操作,这可以通过使用session来完成。
(2)还需要将要编辑的日志内容显示出来,以供用户修改。编辑日志文章内容的完整程序如代码11-10所示。
代码11-10 编辑日志文章的程序edit.php
01 <?php
02 session_start();
03 $ok=false;
04
05 if(!isset($_GET['entry']))//判断是否设置了$_GET['entry']的值
06 {
07 echo'请求参数错误;';
08 exit;
09 }
10
11 if(empty($_SESSION['user'])||$_SESSION['user']!='admin')//判断是否设置了这两变量的值
12 {
13 echo'请<a href="login.php">登录</a>后执行该操作。';
14 exit;
15 }
16
17 $path=substr($_GET['entry'],0,6);//日志存储目录
18 $entry=substr($_GET['entry'],7,9);//日志文件名称
19 $file_name='contents/'.$path.'/'.$entry.'.txt';
20
21 if(file_exists($file_name))//取出原文件内容
22 {
23 $fp=@fopen($file_name,'r');
24 if($fp)
25 {
26 flock($fp,LOCK_SH);
27 $result=fread($fp,filesize($file_name));
28 }
29 flock($fp,LOCK_UN);
30 fclose($fp);
31
32 $content_array=explode('|',$result);//将文件内容存放在数组中
33 }
34
35 if(isset($_POST['title'])&&isset($_POST['content']))
36 {
37 $title=trim($_POST['title']);//获取日志主题
38 $content=trim($_POST['content']);//获取日志内容
39
40 if(file_exists($file_name))//判断文件是否存在
41 {
42 //根据用户修改时提交的内容,替换现有文件的内容,注意替换的对应关系,即标题、内容各自对应
43 做替换
44 $blog_temp=str_replace($content_array[0],$title,$result);
45 $blog_str=str_replace($content_array[2],$content,$blog_temp);
46
47 $fp=@fopen($file_name,'w');
48 if($fp)
49 {
50 flock($fp,LOCK_EX);
51 $result=fwrite($fp,$blog_str);//写入文件
52 $lock=flock($fp,LOCK_UN);
53 fclose($fp);
54 }
55 }
56
57 if(strlen($result)>0)//判断修订是否成功
58 {
59 $ok=true;
60 $msg='日志修改成功,<a href="post.php?entry='.$_GET['entry'].'">查看该日志文章</a>';
61 }
62 }
63 ?>
64
65 <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN"
66 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
67 <html>
68 <head>
69 <title>基于文本的简易BLOG</title>
70 <link rel="stylesheet"type="text/css"href="style.css"/>
71 </head>
72 <body>
73
74 <div id="container">
75 <div id="header">
76 <h1>我的BLOG</h1>
77 </div>
78 <div id="title">
79 ----I have dream……
80 </div>
81
82 <div id="left">
83 <div id="blog_entry">
84 <div id="blog_title">编辑日志</div>
85
86 <div id="blog_body">
87 <?php if($ok==false)
88 {
89 ?>
90 <div id="blog_date"></div>
91 <table border="0">
92 <form method="POST"action="edit.php?entry=<?php echo$_GET['entry'];?>">
93 <tr><td>日志标题:</td></tr>
94 <tr><td><input type="text"name="title"size="50"value="<?php echo
95 $content_array[0];?>"></td></tr>
96 <tr><td>日志内容:</td></tr>
97 <tr><td><textarea name="content"cols="49"rows="10"><?php echo
98 $content_array[2];?></textarea></td></tr>
99 <tr><td>创建于:<?php echo date('Y-m-d H:i:s',$content_array[1]);?></td></tr>
100 <tr><td><input type="submit"value="提交"></td></tr>
101 </form>
102 </table>
103 <?php}?>
104 <?php if($ok==true){echo$msg;}?>
105 </div><!--blog_body-->
106 </div><!--blog_entry-->
107 </div>
108
109 <div id="right">
110 <div id="sidebar">
111 <div id="menu_title">关于我</div>
112 <div id="menu_body">我是个PHP爱好者</div>
113 </div>
114 </div>
115
116 <div id="footer">
117 CopyRight 2011
118 </div>
119 </div>
120
121 <body>
122 </html>
【代码解析】编辑操作的实质是更改文件的内容。为此,首先从所要编辑的日志文章的文件中将文件内容全部取出,并存入数组中,如代码第21~33行所示。这个数组将在显示日志文章原有内容时使用,如代码91~102行所示。然后,程序根据用户传入的内容使用字符串替换函数str_replace(),将原有内容替换为新的内容,从而完成对日志文章的修改,如代码第44、45行所示。最后,还需要将最新的内容写回到文件中,如代码第47~54行所示。如果这一切都正常完成,程序会向用户发出日志修改成功的信息,如图11-14所示。
共有条评论 网友评论