简单的XML留言板

主程序guestbook.php
<?php
//==========================================
// 文件名: guestbook.php
// 说  明: 简单的XML留言簿
// power by ice_berg16
//==========================================
class guestbook extends DOMDocument
{
 public function __construct()
 {
  parent:: __construct();
  if (!file_exists("guestbook.xml"))
  {
   $xmlstr = "<?xml version='1.0' encoding='GB2312'?><messageList></messageList>";
   $this->loadXML($xmlstr);
   $this->save("guestbook.xml");
  }
  else
   $this->load("guestbook.xml");
 }

 //==========================================
 // 函数: addMessage
 // 功能: 添加一条留言
 // 参数: $userName 留言人名称
 // 参数: $message 留言内容
 // 参数: $postTime 留言时间
 // 返回: 1 成功 0 失败
 //==========================================
 public function addMessage($userName, $content, $postTime)
 {
   $root    = $this->documentElement;
   $id     = $this->getElementsByTagName("id")->length+1;
   $Nid    = $this->createElement("id");
   $text    = $this->createTextNode(iconv("GB2312","UTF-8",$id));
   $Nid->appendChild($text);
   $NuserName = $this->createElement("userName");
   $text      = $this->createTextNode(iconv("GB2312","UTF-8",$userName));
   $NuserName->appendChild($text);
   $Ncontent  = $this->createElement("content");
   $text      = $this->createTextNode(iconv("GB2312","UTF-8",$content));
   $Ncontent->appendChild($text);
   $NpostTime = $this->createElement("postTime");
   $text      = $this->createTextNode(iconv("GB2312","UTF-8",$postTime));
   $NpostTime->appendChild($text);
   $Nmessage  = $this->createElement("message");
   $Nmessage->appendChild($Nid);
   $Nmessage->appendChild($NuserName);
   $Nmessage->appendChild($Ncontent);
   $Nmessage->appendChild($NpostTime);
   $root->appendChild($Nmessage);
   if ($this->save("guestbook.xml"))
   {
    return 1;
   }
   else
    return 0;

 }
 //==========================================
 // 函数: delMessage($id)
 // 功能: 根据信息ID删除一条信息
 // 参数: $id 留言编号
 // 返回: 1 成功 0 失败
 //==========================================
 function delMessage($id)
 {
  $root  = $this->documentElement;
  $xpath = new DOMXPath($this);
  $Nmessage = $xpath->query("//message[id=$id]");
  if ($root->removeChild($Nmessage->item(0)))
  {
   $this->save("guestbook.xml");
   return 1;
  }
  else 
   return 0;
 }
}

if (isset($_POST['add']))
{
 $guestbook = new guestbook;
 $now = date("Y-m-d H:i:s");
 if ($guestbook->addMessage($_POST['userName'],$_POST['content'],$now))
 {
  echo "<script>alert('添加成功');location.href='".$_SERVER['PHP_SELF']."'</script>";
 }
 
}
if (isset($_GET['method']) && $_GET['method'] == "del")
{
 $guestbook = new guestbook;
 if ($guestbook->delMessage($_GET['id']))
 {
  echo "<script>alert('删除成功');location.href='".$_SERVER['PHP_SELF']."'</script>";
 }
}
else
{
 $script = <<<SCRIPT
 <script>
  var xml = new ActiveXObject("Msxml2.DOMDocument");
  var xsl = new ActiveXObject("Msxml2.DOMDocument");
  xml.async = false;
  xml.load("guestbook.xml");
  xsl.async = false;
  xsl.load("guestbook.xsl");
  document.write(xml.transformNode(xsl));
 </script>
SCRIPT;
 $form = <<<FORM
 <form method='post' action='guestbook.php'>
 <input type=text name='userName' size=20><br/>
 <textarea name='content' cols=50 rows=5></textarea><br/>
 <input type='submit' name='add' value='添加留言'>
FORM;
 echo $script;
 echo $form;
 //*/
}
?>
-------样式表guestbook.xsl-----------------
<?xml version='1.0' encoding='GB2312'?>
<xsl:stylesheet version='1.0' xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/messageList">
<table style='font-size:12px;' width='60%' cellpadding='5' cellspacing='1' bgcolor='#999999'>
<xsl:for-each select='message'>
<tr>
<td style='color:#FFFFFF'>
<xsl:value-of select="userName" />
&#160;At&#160;
<xsl:value-of select="postTime" />
&#160;&#160;&#160;&#160;&#160;
<xsl:element name="A">
 <xsl:attribute name="href">guestbook.php?method=del&amp;id=<xsl:value-of select="id" /></xsl:attribute>
 删除
</xsl:element>
</td>
</tr>
<tr bgcolor='#FFFFFF'>
<td><xsl:value-of select="content" /></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>

 

发表于 2004年07月27日 3:32 PM

评论

#  回复:简单的XML留言板 2004-08-07 9:56 AM KnightE
删除有些小问题吧?
id为1和2的两条信息,删除1后再增加一条信息,就是两条id为2的信息了。。。
$id = $this->getElementsByTagName("id")->length+1;
是不妥的;-)



#  回复:简单的XML留言板 2004-08-09 8:14 AM 寻梦的稻草人
恩,是这样,应该改成最后一条记录的ID加1
$id = $this->getElementsByTagName("id")->lastChild->textContent+1;
这样差不多吧.

#  回复:简单的XML留言板 2004-09-20 7:28 AM 孤芳翔鹰
<?php
/*
程序运行环境:IIS5.0+PHP5.0.0(PHP低于这个版本将无法运行)
程序文件名随便命名,XML文件由程序第一次运行时自动生成

在免费使用本程序时,请勿必保留以下版权信息,绝不会因此而影响程序运行速度
程序编写:2004年9月19日18时于湖南科技大学学工处
作 者:孤芳翔鹰(蒋赞)
联系OICQ:9970143
个人站点:http://www.21xml.com [世纪XML网](因时间与学习原因,目前无法内容空缺)
http://www.6428.com [商务网站]
电子邮箱:webmaster@6428.com
初成立的雄鹰国际工作室 立誓争创国际一流工作室

相关说明:
本人对PHP语言并不能算精通,只能说是掌握了这门语言,由于我自己对XML有非常大的
爱好,同时完全掌握了ASP/JS/VBS对XML的操作,所以在一年之前我就曾经试图采用PHP与Perl来操作XML
但是最终花费了大量时间到头来编出来的程序都是一些简单的解析XML功能,对XML操作完全处于文本操作层次
由于PHP5.0的发布,终于使得PHP能够对XML脱离文本进行操作了,花费了我三天的时间到处找PHP操作XML的相关
文章,而收获甚少。在基本处于对PHP与XML操作功能掌握不甚深的时候,奉上我给大家一份小礼物(PHP+XML留言簿)吧。

附加说明:
1、这个PHP+XML留言簿基本实现了留言簿的所有功能;
2、完全解决了中文的显示问题;
3、无分页功能,分页功能很简单,大家自己可以增加相关代码;也可以利用JS来显示所以留言并对留言进行分页;
JS调用XML及分页功能,可以参考如下网页:http://www.21xml.com/technology/item.htm?ID=10
4、由于PHP对XML的子节点值获取并不尽人意(可能本人知识浅薄,没有学到其知识)
所以在获取子节点值的时候,我使用了foreach语句,foreach并不能完全让人接纳;
5、同时在对子节点进行编辑的时候,无法精确定位,所以我也只好采用foreach与数组定位;
(这样的做法我也是迫不得以的,只因目前参考资料太少了,只能等些日子,或许我还会有新的发现哦)
6、由于本人经常编写ASP的习惯,程序风格完全基于VBS模式,不足之处望大家指教;



顺便说一声,如果大家有Perl操作XML与C操作XML相关资料不防给我寄发一份,在此谢谢大家了!

XML正在关注 未来在我们手中 (Focusing.......)

最后再说一句:我在2003年6月份发布了雄鹰国际ASP+XML留言簿,发布之后立及有人改了版权,冒充是自己编写的
希望大家尊重一下别人的劳动成果,我们学生编写一个好的程序不容易,宣传自己的网站更不容易。
改进程序无所谓,但是完全将版权给改了,那就不能让俺高兴哦!^_^^_^

如果大家还有什么不懂的地方,可以加我的QQ(9970143),或者访问一个未完成的世纪XML网 http://www.21xml.com
*/
?>
<html>
<head>
<title>雄鹰国际PHP+XML留言簿(学习版)</title>
<style>td,body{font-size:12px}</style>
</head>
<body>
<table width=650 height=122 border=0 align=center cellpadding=3 cellspacing=1 bgcolor=#CCCCCC>
<tr><td height=23 bgcolor=#E7E7E7><div align=center><strong>雄鹰国际PHP+XML留言簿(学习版)</strong></div></td></tr>
<tr><td height=24 bgcolor=#F6f6f6>〖<a href=?Action=PostMsg>发表留言</a>〗〖<a href=?Action=ListMsg>显示留言</a>〗</td></tr>
<?php
class StudyXML extends DOMDocument
{
private $Root;
public function __construct()
{
parent:: __construct();
if (!file_exists("message.xml"))
{
$xmlstr = "<?xml version='1.0' encoding='GB2312'?><www.21xml.com></www.21xml.com>";
$this->loadXML($xmlstr);
$this->save("message.xml");
}
else
$this->load("message.xml");
}

public function Append($Subject,$Content)
{
$Root = $this->documentElement;

$AutoID =date("Ynjhis");
$NAutoID = $this->createElement("autoid");
$text = $this->createTextNode(iconv("GB2312","UTF-8",$AutoID));
$NAutoID->appendChild($text);

$NSubject = $this->createElement("subject");
$text = $this->createTextNode(iconv("GB2312","UTF-8",$Subject));
$NSubject->appendChild($text);

$NContent = $this->createElement("content");
$text = $this->createTextNode(iconv("GB2312","UTF-8",$Content));
$NContent->appendChild($text);

$Rs = $this->createElement("rs");
$Rs->appendChild($NAutoID);
$Rs->appendChild($NSubject);
$Rs->appendChild($NContent);
$Root->appendChild($Rs);
$this->save("message.xml");
echo "<script>alert('添加成功');location.href='".$_SERVER['PHP_SELF']."'</script>";
}

public function Delete($AutoID)
{
$Root = $this->documentElement;
$xpath = new DOMXPath($this);
$Rs= $xpath->query("//rs[autoid=$AutoID]");
$Root->removeChild($Rs->item(0));
$this->save("message.xml");
echo "<script>alert('删除成功');location.href='".$_SERVER['PHP_SELF']."'</script>";
}

function Htmlencode($Text)
{
$Text=StripSlashes($Text);
$Text=ereg_replace("/|","&#124;",$Text);
//$Text=ereg_replace("<","&lt;",$Text);
//$Text=ereg_replace(">","&gt;",$Text);
$Text=ereg_replace("/r/n","<br>",$Text);
$Text=ereg_replace("/r","<br>",$Text);
$Text=ereg_replace(" ","&nbsp;",$Text);
$Text=nl2br($Text);
return $Text;
}

public function ListMsg()
{
$Root = $this->documentElement;
$xpath = new DOMXPath($this);
$Rs = $this->getElementsByTagName("rs");
$Rs_Length =$Rs->length;
for($i=0;$i<$Rs->length;$i++)
{
/*
获取各字段值
下面的foreach语句使用得不尽人意,但是没有办法,PHP的XML操作技术文章目前很少,我凭借自己对ASP操作XML文件的掌握程度
花了上10个小时才弄成为foreach实现字段提取功能,期待以后我的新发现了,哈哈
提醒大家,其实XML文件的显示都可以直接使用JS或VBS的,只是在此为了大家学习,才使用PHP来直接显示XML文件的内容
*/
$K=0;
foreach ($Rs->item($i)->childNodes as $articles)
{
$Field[$K]=iconv("UTF-8","GB2312",$articles->textContent);
$K++;
}
print "<tr><td bgcolor=#FFFFFF>";
print "<b>留言标题:</b>$Field[1]<br><b>留言内容:</b><br>";
//$Field[2]=intval(trim(Htmlencode($Field[2])));
print $Field[2];
print "<div align=right><a href='?Action=Modify&AutoID=$Field[0]'>编辑</a>&nbsp;<a href='?Action=Delete&AutoID=$Field[0]'>删除</a></div>/n";
print "</td></tr>";
}
}

public function Modify($AutoID)
{
$Root = $this->documentElement;
$xpath = new DOMXPath($this);
$Rs = $xpath->query("//rs[autoid=$AutoID]");

$K=0;
foreach ($Rs->item(0)->childNodes as $articles)
{
$Field[$K]=iconv("UTF-8","GB2312",$articles->textContent);
$K++;
}

print "<form method='post' action='?Action=SaveEdit&AutoID=$AutoID'>";
print "<tr><td>留言标题:<input type=text name='Subject' value='$Field[1]' size=20><br/></td></tr>";
print "<tr><td valign=top>留言内容:<textarea name='Content' cols=50 rows=5>$Field[2]</textarea></td></tr>";
print "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;<input type='submit' value='添加留言'></td></tr></form>";
}

public function SaveEdit($AutoID,$Subject,$Content)
{
$Root = $this->documentElement;
$xpath = new DOMXPath($this);
$Rs = $xpath->query("//rs[autoid=$AutoID]");

$Replace[0]=$AutoID;
$Replace[1]=$Subject;
$Replace[2]=$Content;
$K=0;
foreach ($Rs->item(0)->childNodes as $articles)
{
//$Field[$K]=iconv("UTF-8","GB2312",$articles->textContent);
$newText = $this->createTextNode(iconv("GB2312","UTF-8",$Replace[$K]));
$articles->replaceChild($newText,$articles->lastChild);
$K++;
}
echo "<script>alert('修改成功');location.href='".$_SERVER['PHP_SELF']."'</script>";
$this->save("message.xml");
}
public function PostMsg()
{
print "<form method='post' action='?Action=Append'>";
print "<tr><td>留言标题:<input type=text name='Subject' size=20><br/></td></tr>";
print "<tr><td valign=top>留言内容:<textarea name='Content' cols=50 rows=5></textarea></td></tr>";
print "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;<input type='submit' value='添加留言'></td></tr></form>";
}
}

$HawkXML = new StudyXML;
switch($Action)
{
case "":
case "ListMsg":
$HawkXML->ListMsg();
break;
case "PostMsg":
$HawkXML->PostMsg();
break;
case "Append":
$HawkXML->Append($_POST['Subject'],$_POST['Content']);
break;
case "Delete":
$HawkXML->Delete($AutoID);
break;
case "Modify":
$HawkXML->Modify($AutoID);
break;
case "SaveEdit":
$HawkXML->SaveEdit($AutoID,$_POST['Subject'],$_POST['Content']);
break;
}
?>
</table>
</body>
</html>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值