PHP+XML 製作簡單的留言本 圖文教程

來源:互聯網
上載者:User

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

用於儲存留言資訊

<?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,"<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("\r\n","<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\">\n";
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 "暫時沒有留言\n";
}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) 刪除留言

<?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 "刪除圖片成功<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
}
?>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.