• 技术文章 >php教程 >php手册

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

    2016-06-13 12:20:21原创457

    1. 留言显示页面

    2. 发布留言,并允许上传图片

    3. 输入密码登录后可以删除留言。

    1. 文件目录

    upfile是保存上传图片的目录。

    2. 主要界面

    (1)首页,显示留言页面

    (2)发表留言页面

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

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

    4 主要页面代码

    (1)add.php

    此页只是纯粹的HTML代码

    action="saveadd.php" enctype="multipart/form-data" method="post" name="myform" onsubmit="return go(this)">
























    作者
    标题
    表情


    内容
    截图

    (2)savadd.php

    用于保存留言信息

    if(!$_POST["author"] || !$_POST["content"])
    {
    echo "\n";
    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="//m.sbmmt.com/m/article/upfile/"; //图片保存路径
    $type=array("jpg","gif","bmp","jpeg","png"); //允许上传的文件类型

    if(!in_array(strtolower(fileext($_FILES['upfile']['name'])),$type)) //如果上传的文件的扩展名不符合要求
    {
    echo "\n";
    $text=implode(",",$type);
    echo "您只能上传以下类型文件: ",$text,"
    ";
    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("\r\n","
    ",$_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 "\n";
    echo "谢谢您的留言,2秒钟返回首页";

    }
    ?>

    (3)index.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 "暂时没有留言\n";
    }else{
    ?>


    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 "";
    echo "";
    echo "";
    if($photo!="NONE")
    {
    echo "";
    }
    }
    ?>
    }
    ?>
    ";
    echo $id.".".base64_decode($title)." - ".base64_decode($author)." [".$addtime."] ";
    if(isset($_SESSION["password"]) && $_SESSION["password"]!="") //如果输入了密码显示删除链接
    {
    echo "[删除]";
    }
    echo "
    ".base64_decode($content)."

    if(isset($_SESSION["password"]) && $_SESSION["password"]!=""){
    ?>

    退出管理


    }else{
    ?>

    登陆管理


    }
    ?>

    (4) 删除留言

    if(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="//m.sbmmt.com/m/article/upfile/".base64_decode($photo);
    $flag=unlink($photo_path);
    if($flag){
    echo "删除图片成功
    ";
    }
    }

    $root->removeChild($msg);
    break;
    }
    }
    $dom->save("data.xml");


    ?>

    删除留言成功,2秒钟返回首页

    }else{
    ?>
    您还未登陆,2秒钟返回登陆页面

    }
    ?>

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:将文件夹压缩成zip文件的php代码 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • php批量添加数据与批量更新数据的实现方法,php添加数据• PHP之判断用户语言跳转网页• header("Location:login.php")• PHP代码:Http断点续传的实现例子• PHP5中Cookie与 Session使用详解
    1/1

    PHP中文网