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
收藏随意^^请保留教程地址.