Discuz教程网

PHP+XML 制作简单的留言本 图文教程

[复制链接]
authicon dly 发表于 2011-9-3 19:27:51 | 显示全部楼层 |阅读模式
1. 留言显示页面
2. 发布留言,并允许上传图片
3. 输入密码登录后可以删除留言。
1. 文件目录

20091102152508305.jpg
upfile是保存上传图片的目录。
2. 主要界面
(1)首页,显示留言页面


20091102152508511.jpg
(2)发表留言页面
20091102152508137.jpg

3. XML文档格式,名称为data.xml

20091102152510569.jpg
各字段的含义不多说,各元素的值看起来有点怪,是因为我使用了base64_encode对字符串进行了编码。

4 主要页面代码
(1)add.php
此页只是纯粹的HTML代码
  1. <form action="saveadd.php" enctype="multipart/form-data" method="post" name="myform">
  2. <table border="1" width="600">
  3. <tr>
  4. <td>作者</td>
  5. <td align="left"><input type="text" name="author" size="10"></td>
  6. </tr>
  7. <tr>
  8. <td>标题</td>
  9. <td align="left"><input type="text" name="title" size="50"></td>
  10. </tr>
  11. <tr>
  12. <td>表情</td>
  13. <td align="left">
  14. <select name="smiles" size="1">
  15. <option value="smile.gif">微笑</option>
  16. <option value="biggrin.gif">耿直</option>
  17. <option value="victory.gif">胜利</option>
  18. <option value="tongue.gif">舌头</option>
  19. <option value="titter.gif">窃笑</option>
  20. <option value="cry.gif">哭泣</option>
  21. <option value="curse.gif">生气</option>
  22. <option value="huffy.gif">愤怒</option>
  23. <option value="mad.gif">疯狂</option>
  24. <option value="sad.gif">哀伤</option>
  25. <option value="shocked.gif">震惊</option>
  26. <option value="shy.gif">害羞</option>
  27. <option value="sleepy.gif">困倦</option>
  28. <option value="sweat.gif">汗</option>
  29. </select>
  30. <img src="smiles/smile.gif" name="img">
  31. </td>
  32. </tr>
  33. <tr>
  34. <td>内容</td>
  35. <td align="left"><textarea name="content" cols="70" rows="10"></textarea></td>
  36. </tr>
  37. <tr>
  38. <td>截图</td>
  39. <td align="left"><input type="file" name="upfile" size="50"></td>
  40. </tr>
  41. <tr>
  42. <td colspan="2"><input type="submit" value="提交"/></td>
  43. </tr>
  44. </table>
  45. </form>
复制代码

(2)savadd.php
用于保存留言信息
  1. <?php
  2. if(!$_POST["author"] || !$_POST["content"])
  3. {
  4. echo "<meta http-equiv="refresh" content="2;url=index.php">\n";
  5. echo "你没有填写留言姓名或内容,2秒钟返回首页";
  6. exit();
  7. }else{
  8. $imgflag=0; //用于判断是否需要上传图片
  9. function random($length) //此函数用于生成一个随机的图片文件名(不含扩展名),以防止与现有图片重复
  10. {
  11. $hash = 'IMG-';
  12. $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
  13. $max = strlen($chars) - 1;
  14. for($i = 0; $i < $length; $i++) //从上面的字符串中随机找length长度个字符
  15. {
  16. $hash .= $chars[mt_rand(0, $max)];
  17. }
  18. return $hash;
  19. }
  20. function fileext($filename) //此函数用于获取上传文件的扩展名
  21. {
  22. return substr(strrchr($filename, '.'), 1);
  23. }

  24. if($_FILES["upfile"]["name"]!=""){
  25. $uploaddir="upfile/"; //图片保存路径
  26. $type=array("jpg","gif","bmp","jpeg","png"); //允许上传的文件类型
  27. if(!in_array(strtolower(fileext($_FILES['upfile']['name'])),$type)) //如果上传的文件的扩展名不符合要求
  28. {
  29. echo "<meta http-equiv="refresh" content="2;url=index.php">\n";
  30. $text=implode(",",$type);
  31. echo "您只能上传以下类型文件: ",$text,"<br>";
  32. exit();
  33. }
  34. else
  35. {
  36. $filename=explode(".",$_FILES['upfile']['name']);
  37. do
  38. {
  39. $filename[0]=random(10);
  40. $randname=implode(".",$filename); //得到的最终随机生成的文件名(连同扩展名)
  41. $uploadfile=$uploaddir.$randname;
  42. } while(file_exists($uploadfile));
  43. if (move_uploaded_file($_FILES['upfile']['tmp_name'],$uploadfile)){ //保存上传的图片到upfile文件夹
  44. echo "上传图片成功";
  45. $imgflag=1;
  46. }
  47. else{
  48. echo "上传图片失败!";
  49. $imgflag=0;
  50. }
  51. }
  52. }
  53. //获取其他表单域
  54. $author=base64_encode($_POST["author"]);
  55. $content=base64_encode(ereg_replace("\r\n","<br>",$_POST["content"]));
  56. $smiles=base64_encode($_POST["smiles"]);
  57. if($_POST["title"]){
  58. $title=base64_encode($_POST["title"]);
  59. }else{
  60. $title=base64_encode("无标题");
  61. }
  62. $addtime=date("Y-m-d");
  63. if($imgflag==1){ //如果有上传图片
  64. $photo=base64_encode($randname);
  65. }else{ //否则将photo元素的值设置为NONE
  66. $photo="NONE";
  67. }

  68. $dom=new DOMDocument('1.0','gb2312'); //指定XML的格式
  69. $dom->load("data.xml"); //加载
  70. $root=$dom->getElementsByTagName("messages"); //获取根节点
  71. $root=$root->item(0);
  72. $last_id=$root->lastChild->firstChild->nodeValue; //获取最后一个message的第一个子节点(即id节点)的值
  73. $id=$last_id+1; //新增消息的id
  74. settype($id,"string"); //将其转换为字符型

  75. $message=$root->appendChild(new DOMElement('message')); //添加message节点
  76. $el_id=$message->appendChild(new DOMElement('id')); //添加message节点的各个子节点
  77. $el_id->appendChild($dom->createTextNode($id));
  78. $el_author=$message->appendChild(new DOMElement('author'));
  79. $el_author->appendChild($dom->createTextNode($author));
  80. $el_title=$message->appendChild(new DOMElement('title'));
  81. $el_title->appendChild($dom->createTextNode($title));
  82. $el_smiles=$message->appendChild(new DOMElement('smiles'));
  83. $el_smiles->appendChild($dom->createTextNode($smiles));
  84. $el_content=$message->appendChild(new DOMElement('content'));
  85. $el_content->appendChild($dom->createTextNode($content));
  86. $el_addtime=$message->appendChild(new DOMElement('addtime'));
  87. $el_addtime->appendChild($dom->createTextNode($addtime));
  88. $el_photo=$message->appendChild(new DOMElement('photo'));
  89. $el_photo->appendChild($dom->createTextNode($photo));
  90. $dom->save("data.xml"); //保存XML

  91. echo "<meta http-equiv="refresh" content="2;url=index.php">\n";
  92. echo "谢谢您的留言,2秒钟返回首页";
  93. }
  94. ?>
复制代码

(3)index.php
本页面用于显示留言信息
  1. <p><a href="add.php">添加留言</a></p>
  2. <?php
  3. $dom=new DOMDocument('1.0','gb2312');
  4. $dom->load("data.xml"); //加载
  5. $root=$dom->getElementsByTagName("messages");
  6. $root=$root->item(0);
  7. $message=$root->getElementsByTagName("message"); //获取所有message节点
  8. $message_count=$message->length; //计算有多少条留言
  9. echo "当前共有".$message_count."条留言";
  10. if($message_count==0){
  11. echo "暂时没有留言\n";
  12. }else{
  13. ?>
  14. <table border="1" width="700">
  15. <?php
  16. for($i=$message_count-1;$i>=0;$i--) //我们需要对留言按倒序排列
  17. {
  18. $msg=$message->item($i);

  19. foreach($msg->childNodes as $child) //message节点的各个子节点
  20. {
  21. if($child->nodeName=="id")
  22. {
  23. $id=$child->nodeValue;
  24. }
  25. if($child->nodeName=="author")
  26. {
  27. $author=$child->nodeValue;
  28. }
  29. if($child->nodeName=="title")
  30. {
  31. $title=$child->nodeValue;
  32. }
  33. if($child->nodeName=="smiles")
  34. {
  35. $smiles=$child->nodeValue;
  36. }
  37. if($child->nodeName=="content")
  38. {
  39. $content=$child->nodeValue;
  40. }
  41. if($child->nodeName=="photo")
  42. {
  43. $photo=$child->nodeValue;
  44. }
  45. if($child->nodeName=="addtime")
  46. {
  47. $addtime=$child->nodeValue;
  48. }

  49. }
  50. echo "<tr>";
  51. echo "<td align=left bgcolor=#CCCCFF>";
  52. echo $id.".<img src='smiles/".base64_decode($smiles)."'>".base64_decode($title)." - ".base64_decode($author)." [".$addtime."] ";
  53. if(isset($_SESSION["password"]) && $_SESSION["password"]!="") //如果输入了密码显示删除链接
  54. {
  55. echo "[<a href='del.php?id=".$id."'>删除</a>]";
  56. }
  57. echo "</td></tr>";
  58. echo "<tr><td align=left>".base64_decode($content)."</td></tr>";
  59. if($photo!="NONE")
  60. {
  61. echo "<tr><td align=left><img src='upfile/".base64_decode($photo)."'></td></tr>";
  62. }
  63. }
  64. ?>
  65. <?php
  66. }
  67. ?>
  68. </table>
  69. <?php
  70. if(isset($_SESSION["password"]) && $_SESSION["password"]!=""){
  71. ?>
  72. <p><a href="logout.php">退出管理</a></p>
  73. <?php
  74. }else{
  75. ?>
  76. <p><a href="login.php">登陆管理</a></p>
  77. <?php
  78. }
  79. ?>

复制代码

(4) 删除留言
  1. <?php
  2. if(isset($_SESSION["password"]) && $_SESSION["password"]!="")
  3. {
  4. $dom=new DOMDocument;
  5. $dom->load("data.xml");
  6. $root=$dom->getElementsByTagName("messages");
  7. $root=$root->item(0);
  8. foreach($root->childNodes as $msg)
  9. {
  10. if($msg->firstChild->nodeValue==$_GET["id"]) //如果message节点的id子节点的值跟要删除的id相等
  11. {
  12. $photo=$msg->lastChild->nodeValue;
  13. if($photo!="NONE"){ //如果留言包含图片,还应该将图片删除
  14. $photo_path="upfile/".base64_decode($photo);
  15. $flag=unlink($photo_path);
  16. if($flag){
  17. echo "删除图片成功<br>";
  18. }
  19. }
  20. $root->removeChild($msg);
  21. break;
  22. }
  23. }
  24. $dom->save("data.xml");

  25. ?>
  26. 删除留言成功,2秒钟返回首页
  27. <meta http-equiv="refresh" content="2;url=index.php">
  28. <?php
  29. }else{
  30. ?>
  31. 您还未登陆,2秒钟返回登陆页面
  32. <meta http-equiv="refresh" content="2;url=login.php">
  33. <?php
  34. }
  35. ?>
复制代码






上一篇:PHP chmod 函数与批量修改文件目录权限
下一篇:基于HTTP长连接的&quot;服务器推&quot;技术的PHP 简易聊天室
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-2 06:56

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表