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

5年以前  |  阅读数:379 次  |  编程语言:PHP 

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)">

作者
标题
表情
内容
截图

(2)savadd.php

用于保存留言信息

<?php
if(!$_POST["author"] || !$_POST["content"])
{
echo "<meta http-equiv=\"refresh\" content=\"2;url=index.php\">\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="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\">\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 "<meta http-equiv=\"refresh\" content=\"2;url=index.php\">\n";
echo "谢谢您的留言,2秒钟返回首页";

}
?>

(3)index.php

本页面用于显示留言信息

添加留言

<?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{
?>

=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 "";
}
}
?>
<?php
}
?>

";
echo $id.".".base64_decode($title)." - ".base64_decode($author)." [".$addtime."] ";
if(isset($_SESSION["password"]) && $_SESSION["password"]!="") //如果输入了密码显示删除链接
{
echo "[删除]";
}
echo "
".base64_decode($content)."

退出管理

登陆管理

(4) 删除留言

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

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

?>

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

您还未登陆,2秒钟返回登陆页面
 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例