11.2.8 实现BLOG文章的删除功能
删除日志文章也是BLOG系统的基本功能之一,本小节向读者介绍删除日志文章功能的实现。删除一篇日志文章的基本操作是,找到日志文章所在路径和文件,然后执行删除操作。对于不存在的日志执行删除操作,应该给出“所要删除的日志不存在”的提示信息。
当用户单击“删除”链接后,应该给用户一个提示界面,确认用户是否真的想删除该日志文章,以免用户误操作。另外,和编辑日志文章一样,只能在用户登录之后才能执行删除操作。
因为删除确认界面和执行删除操作的功能由同一个程序实现,所以这里通过向程序传入两个不同的URL参数,以便程序可以判断是显示“删除确认界面”还是执行删除操作,这两个参数是entry和id,其中id将作为表单隐藏域数据,传给删除程序。如果程序获得id参数,则表示要执行删除操作,参数id的值和参数entry的值完全一样,它们只是用来区分不同的操作。删除日志文章的程序如代码11-11所示。
代码11-11 删除日志文章的程序delete.php
01 <?php
02 session_start();
03 $ok=false;
04
05 if(empty($_SESSION['user'])||$_SESSION['user']!='admin')//判断用户是否登录
06 {
07 echo'请<a href="login.php">登录</a>后执行该操作。';
08 exit;
09 }
10
11 if(!isset($_GET['entry']))//判断$_GET['entry']变量是否已经设置了
12 {
13 if(!isset($_POST['id']))//判断是否有id参数
14 {
15 $ok=true;
16 $msg='请求参数错误;<a href="index.php">返回首页</a>';
17 }
18 else
19 {
20 //做删除操作
21 $path=substr($_POST['id'],0,6);//日志存储目录
22 $entry=substr($_POST['id'],7,9);//日志文件名称
23 $file_name='contents/'.$path.'/'.$entry.'.txt';
24 if(unlink($file_name))
25 {
26 $ok=true;
27 $msg='该日志成功删除;<a href="index.php">返回首页</a>';
28 }
29 else
30 {
31 $ok=true;
32 $msg='该日志删除失败;<a href="index.php">返回首页</a>';
33 }
34 }
35 }
36 else
37 {
38 $form_data='';
39 $path=substr($_GET['entry'],0,6);//日志存储目录
40 $entry=substr($_GET['entry'],7,9);//日志文件名称
41 $file_name='contents/'.$path.'/'.$entry.'.txt';
42 if(file_exists($file_name))//判断是否已经存在该文件
43 {
44 $form_data='<input type="hidden"name="id"value="'.$_GET['entry'].'">';
45 }
46 else
47 {
48 $ok=true;
49 $msg='所要删除的日志不存在;<a href="index.php">返回首页</a>';
50 }
51 }
52 ?>
53
54 <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN"
55 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
56 <html>
57 <head>
58 <title>基于文本的简易BLOG</title>
59 <link rel="stylesheet"type="text/css"href="style.css"/>
60 </head>
61 <body>
62
63 <div id="container">
64 <div id="header">
65 <h1>我的BLOG</h1>
66 </div>
67 <div id="title">
68 ----i have dream……
69 </div>
70 <div id="left">
71 <div id="blog_entry">
72 <div id="blog_title">删除日志</div>
73 <div id="blog_body">
74 <?php if($ok==false)
75 {
76 ?>
77 <form method="POST"action="delete.php">
78 <font color="red">删除的日志将无法恢复,确定要删除吗?</font><br/>
79 <input type=submit value="确定">
80 <?php echo$form_data;?>
81 </form>
82 <?php}?>
83 <?php if($ok==true){echo$msg;}?>
84 </div><!--blog_body-->
85 </div><!--blog_entry-->
86 </div>
87
88 <div id="right">
89 <div id="sidebar">
90 <div id="menu_title">关于我</div>
91 <div id="menu_body">我是个PHP爱好者</div>
92 </div>
93 </div>
94
95 <div id="footer">
96 copyright 2011
97 </div>
98 </div>
99
100 <body>
101 </html>
【代码解析】该程序首先根据session判断用户是否登录,没有登录则提示用户登录后再执行删除操作,如代码第5~9行所示。如果已经登录,根据是否传入URL参数entry,来判断是显示“删除确认界面”还是执行删除操作。如果没有传入entry参数,则判断是否传入日志文章id,程序将根据此id删除日志文章。如果传入id,则执行删除操作。当用户登录后,单击删除链接,将会看到如图11-15所示的确认界面。
在此确认界面中,单击“确定”按钮,将会删除该日志文章。如果删除成功,将会看到如图11-16所示的“该日志成功删除”提示信息。