php+xml留言板实例教程二
这是一个xml 解析类
<?php
class Message_XML extends DOMDocument {
const file_name = "e:/myphp/xmldom/xml/message.xml";
private $root; //根节点
private $PageNo; //当前页
private $allNum; //记录总数
private $PageSize; //页大小
private $allPages; //总页数
public function __construct() {
parent::__construct();
if (!file_exists(self::file_name)) {
$xmlStr = "<?xml version='1.0' encoding='utf-8' ?><root />";
$this->loadXML($xmlStr);
$this->save(self::file_name);
} else {
$this->load(self::file_name);
}
$this->root = $this->documentElement;
$this->get_pagemsg();
}
//得到页信息
private function get_pagemsg() {
$this->PageSize = 3; //页大小
$allNode = $this->getElementsByTagName("record");
$this->allNum = $allNode->length; //记录总数
$this->allPages = ceil($this->allNum / $this->PageSize); //总页数
$this->PageNo = $_GET["PageNo"];
if ($this->PageNo < 1 || !is_numeric($this->PageNo)) {
$this->PageNo = 1;
} else if ($this->PageNo > $this->allPages) {
$this->PageNo = $this->allPages;
}
$this->PageNo = (int)$this->PageNo;
}
//显示留言
public function show_message() {
$start_num = ($this->PageNo - 1) * $this->PageSize; //记录开始数
$end_num = $start_num + $this->PageSize - 1; //记录结束数
$allNode = $this->getElementsByTagName("record");
$i = 0;
foreach ($allNode as $v) {
if ($i >= $start_num && $i <= $end_num) {
$autoid = $v->getElementsByTagName("autoid")->item(0)->nodeValue;
$subject = $v->getElementsByTagName("subject")->item(0)->nodeValue;
$content = $v->getElementsByTagName("content")->item(0)->nodeValue;
$str = "<div class='msgInfo'><p class='msgT'><span>留言标题:</span>$subject</p><p class='msgC'><span>留言内容:</span><br /><br /> $content</p>";
$str.= "<p class='msgCMD'><a href='?Action=edit_message&AutoID=$autoid&PageNo=$_GET[PageNo]'>编辑</a> <a href='?Action=delete_message&AutoID=$autoid&PageNo=$_GET[PageNo]'>删除</a></p></div>";
print $str;
}
$i++;
}
$this->get_pageCode();
}
//得到当前页码
public function get_pageCode() {
$str = "<div class='pageCode'>当前页:" . $this->PageNo . " / " . $this->allPages . " <a href='?PageNo=1'>首页</a> <a href='?PageNo=" . ($this->PageNo - 1) . "'>上一页</a> <a href='?PageNo=" . ($this->PageNo + 1) . "'>下一页</a> <a href='?PageNo=" . ($this->allPages) . "'>末页</a>";
$str.= " <input type='text' size='2' id='goPage' value='" . $this->PageNo . "'><input type='button' value='GO' onclick=window.location='?PageNo='+document.getElementById('goPage').value>";
print $str;
}
//添加留言页面
public function post_message() {
print "<div><form method='post' action='?Action=add_message&PageNo=$_GET[PageNo]'>";
print "<p>标题:<input type='text' name='Subject' size='50' /></p>";
print "<p>内容:<textarea name='Content' cols='50' rows='5'></textarea></p>";
print "<p><input type='submit' value='添加留言'></p></div></form>";
}
//添加留言
public function add_message($Subject, $Content) {
$autoid = microtime(); //留言ID
$autoid = substr(strrchr(str_replace(" ", "", $autoid) , ".") , 1);
$node_top = $this->root->appendChild($this->createElement("record"));
$node_top->appendChild($this->createElement("autoid", $autoid));
$node_top->appendChild($this->createElement("subject", $Subject));
$node_top->appendChild($this->createElement("content", $Content));
$this->save(self::file_name);
echo "<script>alert('添加留言成功!');window.location='" . $_SERVER['PHP_SELF'] . "?PageNo=" . $_GET['PageNo'] . "'</script>";
}
//清空留言
public function clear_message() {
$fp = @fopen(self::file_name, "w+");
if ($fp) {
$str = "<?xml version='1.0' encoding='utf-8' ?><root />";
fwrite($fp, $str);
fclose($fp);
echo "<script>alert('清空成功!');window.location='" . $_SERVER['PHP_SELF'] . "'</script>";
} else {
echo "<script>alert('清空失败!');history.back();</script>";
}
}
//设置节点路径和操作对象ID
private function set_nodePath($AutoID) {
$xpath = new DOMXPath($this);
$node_top = $xpath->query("//record[autoid=$AutoID]");
return $node_top;
}
//删除留言
public function delete_message($AutoID) {
$node_top = $this->set_nodePath($AutoID);
$this->root->removeChild($node_top->item(0));
$this->save(self::file_name);
echo "<script>alert('删除成功!');location='" . $_SERVER['PHP_SELF'] . "?PageNo=" . $_GET['PageNo'] . "'</script>";
}
//编辑留言页面
public function edit_message($AutoID) {
$node_top = $this->set_nodePath($AutoID);
//取值方法1
//$subject = $node_top -> item(0) -> getElementsByTagName("subject") -> item(0) -> nodeValue;
//$content = $node_top -> item(0) -> getElementsByTagName('content') -> item(0) ->nodeValue;
//取值方法2
foreach ($node_top->item(0)->childNodes as $v) {
$value[] = $v->textContent; //注意:这里的$value必须这样写成一个数组,否则要出错
}
print "<div><form method='post' action='?Action=save_message&AutoID=$AutoID&PageNo=$_GET[PageNo]'>";
print "<p>标题:<input type='text' name='Subject' value=$value[1] size='50' /></p>";
print "<p>内容:<textarea name='Content' cols='50' rows='5'>$value[2]</textarea></p>";
print "<p><input type='submit' value='编辑留言'></p></div></form>";
}
//编辑留言
public function save_message($AutoID, $Subject, $Content) {
$node_top = $this->set_nodePath($AutoID);
$replace_info[0] = $AutoID;
$replace_info[1] = $Subject;
$replace_info[2] = $Content;
$i = 0;
foreach ($node_top->item(0)->childNodes as $v) {
$new_content = $this->createTextNode($replace_info[$i]);
$v->replaceChild($new_content, $v->lastChild);
$i++;
}
$this->save(self::file_name);
echo "<script>alert('编辑成功!');location='" . $_SERVER['PHP_SELF'] . "?PageNo=" . $_GET['PageNo'] . "'</script>";
}
}本文链接:http://www.phprm.com/code/1a13efff713c51cd225d32e3ae152c7e.html
收藏随意^^请保留教程地址.