PHP+XML 制作简单的留言本 图文教程
作者:bea
1. 留言显示页面 2. 发布留言,并允许上传图片 3. 输入密码登录后可以删除留言。 1. 文件目录 upfile是保存上传图片的目录。 2. 主要界面 (1)首页,显示留言页面 (2)发表留言页面 3. XML文档格式,名称为data.xml 各字段的含义不多说,各元素的值看起来有点怪,是因为我使用了base64_encode对字符串进行了编码。 4主要页面代码 (1)add.php 此页只是纯粹的HTML代码 <form action="sav
1. 留言显示页面
2. 发布留言,并允许上传图片
3. 输入密码登录后可以删除留言。
1. 文件目录
upfile是保存上传图片的目录。
2. 主要界面
(1)首页,显示留言页面
(2)发表留言页面
3. XML文档格式,名称为data.xml
各字段的含义不多说,各元素的值看起来有点怪,是因为我使用了base64_encode对字符串进行了编码。
4 主要页面代码
(1)add.php
此页只是纯粹的HTML代码
<form action="saveadd.php" enctype="multipart/form-data" method="post" name="myform" onsubmit="return go(this)"><table border="1" width="600"> <tr> <td>作者</td> <td align="left"><input type="text" name="author" size="10"></td> </tr> <tr> <td>标题</td> <td align="left"><input type="text" name="title" size="50"></td> </tr> <tr> <td>表情</td> <td align="left"> <select name="smiles" size="1" onchange="change_img();"> <option value="smile.gif">微笑</option> <option value="biggrin.gif">耿直</option> <option value="victory.gif">胜利</option> <option value="tongue.gif">舌头</option> <option value="titter.gif">窃笑</option> <option value="cry.gif">哭泣</option> <option value="curse.gif">生气</option> <option value="huffy.gif">愤怒</option> <option value="mad.gif">疯狂</option> <option value="sad.gif">哀伤</option> <option value="shocked.gif">震惊</option> <option value="shy.gif">害羞</option> <option value="sleepy.gif">困倦</option> <option value="sweat.gif">汗</option> </select> <img src="smiles/smile.gif" name="img"> </td> </tr> <tr> <td>内容</td> <td align="left"><textarea name="content" cols="70" rows="10"></textarea></td> </tr> <tr> <td>截图</td> <td align="left"><input type="file" name="upfile" size="50"></td> </tr> <tr> <td colspan="2"><input type="submit" value="提交"/></td> </tr></table></form>
(2)savadd.php
用于保存留言信息
<?phpif(!$_POST["author"] || !$_POST["content"]) { echo "<meta http-equiv="refresh" content="2;url=index.php">
"; echo "你没有填写留言姓名或内容,2秒钟返回首页"; exit();}else{ $imgflag=0; //用于判断是否需要上传图片 function random($length) //此函数用于生成一个随机的图片文件名(不含扩展名),以防止与现有图片重复 { $hash = 'IMG-'; $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'; $max = strlen($chars) - 1; for($i = 0; $i < $length; $i++) //从上面的字符串中随机找length长度个字符 { $hash .= $chars[mt_rand(0, $max)]; } return $hash; }
function fileext($filename) //此函数用于获取上传文件的扩展名 { return substr(strrchr($filename, '.'), 1); }
if($_FILES["upfile"]["name"]!=""){ $uploaddir="upfile/"; //图片保存路径 $type=array("jpg","gif","bmp","jpeg","png"); //允许上传的文件类型
if(!in_array(strtolower(fileext($_FILES['upfile']['name'])),$type)) //如果上传的文件的扩展名不符合要求 { echo "<meta http-equiv="refresh" content="2;url=index.php">
"; $text=implode(",",$type); echo "您只能上传以下类型文件: ",$text,"<br>"; exit(); } else { $filename=explode(".",$_FILES['upfile']['name']); do { $filename[0]=random(10); $randname=implode(".",$filename); //得到的最终随机生成的文件名(连同扩展名) $uploadfile=$uploaddir.$randname; } while(file_exists($uploadfile));
if (move_uploaded_file($_FILES['upfile']['tmp_name'],$uploadfile)){ //保存上传的图片到upfile文件夹 echo "上传图片成功"; $imgflag=1; } else{ echo "上传图片失败!"; $imgflag=0; }
} }
//获取其他表单域
$author=base64_encode($_POST["author"]); $content=base64_encode(ereg_replace("
","<br>",$_POST["content"])); $smiles=base64_encode($_POST["smiles"]); if($_POST["title"]){ $title=base64_encode($_POST["title"]); }else{ $title=base64_encode("无标题"); } $addtime=date("Y-m-d"); if($imgflag==1){ //如果有上传图片 $photo=base64_encode($randname); }else{ //否则将photo元素的值设置为NONE $photo="NONE"; } $dom=new DOMDocument('1.0','gb2312'); //指定XML的格式 $dom->load("data.xml"); //加载 $root=$dom->getElementsByTagName("messages"); //获取根节点 $root=$root->item(0); $last_id=$root->lastChild->firstChild->nodeValue; //获取最后一个message的第一个子节点(即id节点)的值 $id=$last_id+1; //新增消息的id settype($id,"string"); //将其转换为字符型
$message=$root->appendChild(new DOMElement('message')); //添加message节点 $el_id=$message->appendChild(new DOMElement('id')); //添加message节点的各个子节点 $el_id->appendChild($dom->createTextNode($id));
$el_author=$message->appendChild(new DOMElement('author')); $el_author->appendChild($dom->createTextNode($author));
$el_title=$message->appendChild(new DOMElement('title')); $el_title->appendChild($dom->createTextNode($title));
$el_smiles=$message->appendChild(new DOMElement('smiles')); $el_smiles->appendChild($dom->createTextNode($smiles));
$el_content=$message->appendChild(new DOMElement('content')); $el_content->appendChild($dom->createTextNode($content));
$el_addtime=$message->appendChild(new DOMElement('addtime')); $el_addtime->appendChild($dom->createTextNode($addtime));
$el_photo=$message->appendChild(new DOMElement('photo')); $el_photo->appendChild($dom->createTextNode($photo));
$dom->save("data.xml"); //保存XML
echo "<meta http-equiv="refresh" content="2;url=index.php">
"; echo "谢谢您的留言,2秒钟返回首页";
}?>
(3)index.php
本页面用于显示留言信息
<p><a href="add.php">添加留言</a></p>
<?php$dom=new DOMDocument('1.0','gb2312'); $dom->load("data.xml"); //加载$root=$dom->getElementsByTagName("messages"); $root=$root->item(0); $message=$root->getElementsByTagName("message"); //获取所有message节点
$message_count=$message->length; //计算有多少条留言echo "当前共有".$message_count."条留言";
if($message_count==0){ echo "暂时没有留言
";}else{?><table border="1" width="700"><?php for($i=$message_count-1;$i>=0;$i--) //我们需要对留言按倒序排列 { $msg=$message->item($i); foreach($msg->childNodes as $child) //message节点的各个子节点 { if($child->nodeName=="id") { $id=$child->nodeValue; } if($child->nodeName=="author") { $author=$child->nodeValue; } if($child->nodeName=="title") { $title=$child->nodeValue; } if($child->nodeName=="smiles") { $smiles=$child->nodeValue; } if($child->nodeName=="content") { $content=$child->nodeValue; } if($child->nodeName=="photo") { $photo=$child->nodeValue; } if($child->nodeName=="addtime") { $addtime=$child->nodeValue; } } echo "<tr>"; echo "<td align=left bgcolor=#CCCCFF>"; echo $id.".<img src='smiles/".base64_decode($smiles)."'>".base64_decode($title)." - ".base64_decode($author)." [".$addtime."] "; if(isset($_SESSION["password"]) && $_SESSION["password"]!="") //如果输入了密码显示删除链接 { echo "[<a href='del.php?id=".$id."'>删除</a>]"; } echo "</td></tr>"; echo "<tr><td align=left>".base64_decode($content)."</td></tr>"; if($photo!="NONE") { echo "<tr><td align=left><img src='upfile/".base64_decode($photo)."'></td></tr>"; } }?><?php}?></table><?php if(isset($_SESSION["password"]) && $_SESSION["password"]!=""){?><p><a href="logout.php">退出管理</a></p> <?php}else{?><p><a href="login.php">登陆管理</a></p> <?php}?>
(4) 删除留言
<?phpif(isset($_SESSION["password"]) && $_SESSION["password"]!=""){
$dom=new DOMDocument; $dom->load("data.xml"); $root=$dom->getElementsByTagName("messages"); $root=$root->item(0); foreach($root->childNodes as $msg) { if($msg->firstChild->nodeValue==$_GET["id"]) //如果message节点的id子节点的值跟要删除的id相等 { $photo=$msg->lastChild->nodeValue; if($photo!="NONE"){ //如果留言包含图片,还应该将图片删除 $photo_path="upfile/".base64_decode($photo); $flag=unlink($photo_path); if($flag){ echo "删除图片成功<br>"; } }
$root->removeChild($msg); break; } } $dom->save("data.xml");
?>
删除留言成功,2秒钟返回首页<meta http-equiv="refresh" content="2;url=index.php"><?php}else{?>您还未登陆,2秒钟返回登陆页面<meta http-equiv="refresh" content="2;url=login.php"><?php}?>
google_protectAndRun("render_ads.js::google_render_ad", google_handleError, google_render_ad);
有用 | 无用
2. 发布留言,并允许上传图片
3. 输入密码登录后可以删除留言。
1. 文件目录
upfile是保存上传图片的目录。
2. 主要界面
(1)首页,显示留言页面
(2)发表留言页面
3. XML文档格式,名称为data.xml
各字段的含义不多说,各元素的值看起来有点怪,是因为我使用了base64_encode对字符串进行了编码。
4 主要页面代码
(1)add.php
此页只是纯粹的HTML代码
<form action="saveadd.php" enctype="multipart/form-data" method="post" name="myform" onsubmit="return go(this)"><table border="1" width="600"> <tr> <td>作者</td> <td align="left"><input type="text" name="author" size="10"></td> </tr> <tr> <td>标题</td> <td align="left"><input type="text" name="title" size="50"></td> </tr> <tr> <td>表情</td> <td align="left"> <select name="smiles" size="1" onchange="change_img();"> <option value="smile.gif">微笑</option> <option value="biggrin.gif">耿直</option> <option value="victory.gif">胜利</option> <option value="tongue.gif">舌头</option> <option value="titter.gif">窃笑</option> <option value="cry.gif">哭泣</option> <option value="curse.gif">生气</option> <option value="huffy.gif">愤怒</option> <option value="mad.gif">疯狂</option> <option value="sad.gif">哀伤</option> <option value="shocked.gif">震惊</option> <option value="shy.gif">害羞</option> <option value="sleepy.gif">困倦</option> <option value="sweat.gif">汗</option> </select> <img src="smiles/smile.gif" name="img"> </td> </tr> <tr> <td>内容</td> <td align="left"><textarea name="content" cols="70" rows="10"></textarea></td> </tr> <tr> <td>截图</td> <td align="left"><input type="file" name="upfile" size="50"></td> </tr> <tr> <td colspan="2"><input type="submit" value="提交"/></td> </tr></table></form>
(2)savadd.php
用于保存留言信息
<?phpif(!$_POST["author"] || !$_POST["content"]) { echo "<meta http-equiv="refresh" content="2;url=index.php">
"; echo "你没有填写留言姓名或内容,2秒钟返回首页"; exit();}else{ $imgflag=0; //用于判断是否需要上传图片 function random($length) //此函数用于生成一个随机的图片文件名(不含扩展名),以防止与现有图片重复 { $hash = 'IMG-'; $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'; $max = strlen($chars) - 1; for($i = 0; $i < $length; $i++) //从上面的字符串中随机找length长度个字符 { $hash .= $chars[mt_rand(0, $max)]; } return $hash; }
function fileext($filename) //此函数用于获取上传文件的扩展名 { return substr(strrchr($filename, '.'), 1); }
if($_FILES["upfile"]["name"]!=""){ $uploaddir="upfile/"; //图片保存路径 $type=array("jpg","gif","bmp","jpeg","png"); //允许上传的文件类型
if(!in_array(strtolower(fileext($_FILES['upfile']['name'])),$type)) //如果上传的文件的扩展名不符合要求 { echo "<meta http-equiv="refresh" content="2;url=index.php">
"; $text=implode(",",$type); echo "您只能上传以下类型文件: ",$text,"<br>"; exit(); } else { $filename=explode(".",$_FILES['upfile']['name']); do { $filename[0]=random(10); $randname=implode(".",$filename); //得到的最终随机生成的文件名(连同扩展名) $uploadfile=$uploaddir.$randname; } while(file_exists($uploadfile));
if (move_uploaded_file($_FILES['upfile']['tmp_name'],$uploadfile)){ //保存上传的图片到upfile文件夹 echo "上传图片成功"; $imgflag=1; } else{ echo "上传图片失败!"; $imgflag=0; }
} }
//获取其他表单域
$author=base64_encode($_POST["author"]); $content=base64_encode(ereg_replace("
","<br>",$_POST["content"])); $smiles=base64_encode($_POST["smiles"]); if($_POST["title"]){ $title=base64_encode($_POST["title"]); }else{ $title=base64_encode("无标题"); } $addtime=date("Y-m-d"); if($imgflag==1){ //如果有上传图片 $photo=base64_encode($randname); }else{ //否则将photo元素的值设置为NONE $photo="NONE"; } $dom=new DOMDocument('1.0','gb2312'); //指定XML的格式 $dom->load("data.xml"); //加载 $root=$dom->getElementsByTagName("messages"); //获取根节点 $root=$root->item(0); $last_id=$root->lastChild->firstChild->nodeValue; //获取最后一个message的第一个子节点(即id节点)的值 $id=$last_id+1; //新增消息的id settype($id,"string"); //将其转换为字符型
$message=$root->appendChild(new DOMElement('message')); //添加message节点 $el_id=$message->appendChild(new DOMElement('id')); //添加message节点的各个子节点 $el_id->appendChild($dom->createTextNode($id));
$el_author=$message->appendChild(new DOMElement('author')); $el_author->appendChild($dom->createTextNode($author));
$el_title=$message->appendChild(new DOMElement('title')); $el_title->appendChild($dom->createTextNode($title));
$el_smiles=$message->appendChild(new DOMElement('smiles')); $el_smiles->appendChild($dom->createTextNode($smiles));
$el_content=$message->appendChild(new DOMElement('content')); $el_content->appendChild($dom->createTextNode($content));
$el_addtime=$message->appendChild(new DOMElement('addtime')); $el_addtime->appendChild($dom->createTextNode($addtime));
$el_photo=$message->appendChild(new DOMElement('photo')); $el_photo->appendChild($dom->createTextNode($photo));
$dom->save("data.xml"); //保存XML
echo "<meta http-equiv="refresh" content="2;url=index.php">
"; echo "谢谢您的留言,2秒钟返回首页";
}?>
(3)index.php
本页面用于显示留言信息
<p><a href="add.php">添加留言</a></p>
<?php$dom=new DOMDocument('1.0','gb2312'); $dom->load("data.xml"); //加载$root=$dom->getElementsByTagName("messages"); $root=$root->item(0); $message=$root->getElementsByTagName("message"); //获取所有message节点
$message_count=$message->length; //计算有多少条留言echo "当前共有".$message_count."条留言";
if($message_count==0){ echo "暂时没有留言
";}else{?><table border="1" width="700"><?php for($i=$message_count-1;$i>=0;$i--) //我们需要对留言按倒序排列 { $msg=$message->item($i); foreach($msg->childNodes as $child) //message节点的各个子节点 { if($child->nodeName=="id") { $id=$child->nodeValue; } if($child->nodeName=="author") { $author=$child->nodeValue; } if($child->nodeName=="title") { $title=$child->nodeValue; } if($child->nodeName=="smiles") { $smiles=$child->nodeValue; } if($child->nodeName=="content") { $content=$child->nodeValue; } if($child->nodeName=="photo") { $photo=$child->nodeValue; } if($child->nodeName=="addtime") { $addtime=$child->nodeValue; } } echo "<tr>"; echo "<td align=left bgcolor=#CCCCFF>"; echo $id.".<img src='smiles/".base64_decode($smiles)."'>".base64_decode($title)." - ".base64_decode($author)." [".$addtime."] "; if(isset($_SESSION["password"]) && $_SESSION["password"]!="") //如果输入了密码显示删除链接 { echo "[<a href='del.php?id=".$id."'>删除</a>]"; } echo "</td></tr>"; echo "<tr><td align=left>".base64_decode($content)."</td></tr>"; if($photo!="NONE") { echo "<tr><td align=left><img src='upfile/".base64_decode($photo)."'></td></tr>"; } }?><?php}?></table><?php if(isset($_SESSION["password"]) && $_SESSION["password"]!=""){?><p><a href="logout.php">退出管理</a></p> <?php}else{?><p><a href="login.php">登陆管理</a></p> <?php}?>
(4) 删除留言
<?phpif(isset($_SESSION["password"]) && $_SESSION["password"]!=""){
$dom=new DOMDocument; $dom->load("data.xml"); $root=$dom->getElementsByTagName("messages"); $root=$root->item(0); foreach($root->childNodes as $msg) { if($msg->firstChild->nodeValue==$_GET["id"]) //如果message节点的id子节点的值跟要删除的id相等 { $photo=$msg->lastChild->nodeValue; if($photo!="NONE"){ //如果留言包含图片,还应该将图片删除 $photo_path="upfile/".base64_decode($photo); $flag=unlink($photo_path); if($flag){ echo "删除图片成功<br>"; } }
$root->removeChild($msg); break; } } $dom->save("data.xml");
?>
删除留言成功,2秒钟返回首页<meta http-equiv="refresh" content="2;url=index.php"><?php}else{?>您还未登陆,2秒钟返回登陆页面<meta http-equiv="refresh" content="2;url=login.php"><?php}?>
google_protectAndRun("render_ads.js::google_render_ad", google_handleError, google_render_ad);
有用 | 无用
猜你喜欢
您可能感兴趣的文章:
- PHP 程序员的调试技术小结
- PHP 配置open_basedir 让各虚拟站点独立运行
- php $_SERVER当前完整url的写法
- php利用header函数实现文件下载时直接提示保存
- php header 详细使用说明与使用心得
- 计算一段日期内的周末天数的php代码(星期六,星期日总和)
- php 分库分表hash算法
- PHP 面向对象实现代码
- 超级简单的php+mysql留言本源码
- PHP 远程关机实现代码
- php实现网站插件机制的方法
- php 向访客和爬虫显示不同的内容
- php 将excel导入mysql
- PHP 压缩文件夹的类代码
- PHP 向右侧拉菜单实现代码,测试使用中
- 网页游戏开发入门教程三(简单程序应用)
- 网页游戏开发入门教程二(游戏模式+系统)
- 初学CAKEPHP 基础教程
- PHP+MySQL 制作简单的留言本