博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

bridge2006

天行健,君子以自强不息。
  bridge2006.cublog.cn

关于作者
姓名:bridge
职业:IT
年龄:28
位置:湖北
个性介绍:天行人健,君子以自强不息.
|| << >> ||
我的分类


php+ajax+xml+mysql实现分页举例
1.生成xml部分,文件为content.php,其中mysqlclass.inc.php为自己写的mysql简单操作类,pageclass.inc.php为自己写的分页类。
<?php require_once("classes/mysqlclass.inc.php");
require_once("classes/pageclass.inc.php");
$mysql=new mysql("front","localhost","root","123");
$mysql->connect();
$mysql->query("select *    from ft_products where lineid is not null");
$total=$mysql->recordcount();
if (empty($_GET["page"])) {$currpage = 1;}
else {$currpage    = intval($_GET["page"]);}
$pagesize  = 10;
$pageclass = new page($total,$currpage,$pagesize);
$nav = $pageclass->get_page_nav();
$descible  = $pageclass->get_page_desible();
$first       = $pageclass->get_page_first();
$next       = $pageclass->get_page_next();
$prev       = $pageclass->get_page_prev();
$last       = $pageclass->get_page_last();
$recordstart = ($currpage -    1) *  $pagesize;
$sql = "select lineid,itemno,catalog,name,canview,imagename,descible from ft_products where    lineid is not null order by    lineid desc limit $recordstart,$pagesize";
$mysql->query($sql);
$xmlstr    ='<?xml version=\'1.0\' encoding=\'utf-8\'?>';
$xmlstr    .= '<main>';
$xmlstr    .=    '<nav>';
$xmlstr    .=        '<descible><![CDATA[' .$descible . ']]></descible>';
$xmlstr    .=        '<first><![CDATA[' .$first . ']]></first>';
$xmlstr    .=        '<next><![CDATA[' .    $next .    ']]></next>';
$xmlstr    .=        '<prev><![CDATA[' .    $prev .    ']]></prev>';
$xmlstr    .=        '<last><![CDATA[' .    $last .    ']]></last>';
$xmlstr    .=    '</nav>';
$xmlstr    .=    '<content>';
$xmlstr    .=        '<![CDATA[';
$xmlstr    .=        '<table    border=\'1\' width=\'100%\'    cellpadding=\'0\' cellspacing=\'0\'>';
$xmlstr    .=            '<tr bgcolor=\'#CCCCCC\'>';
$xmlstr    .=            '<td>Lineid</td>';
$xmlstr    .=            '<td>Itemno</td>';
$xmlstr    .=            '<td>Name</td>';
$xmlstr    .=            '<td>catalog</td>';
$xmlstr    .=            '<td>descible</td>';
$xmlstr    .=            '</tr>';
while ($row    = $mysql->nextrow()) {
 $xmlstr .=        '<tr>';
 $xmlstr .=            '<td>' . $row['lineid']    . '</td>';
 $xmlstr .=            '<td>' . $row['itemno']    . '</td>';
 $xmlstr .=            '<td>' . $row['name'] .    '</td>';
 $xmlstr .=            '<td>' . $row['catalog'] . '</td>';
 $xmlstr .=            '<td>' . substr($row['descible'],0,50) . '</td>';
 $xmlstr .=            '</tr>';
}
$xmlstr    .=        '</table>';
$xmlstr    .=        ']]>';
$xmlstr    .=    '</content>';
$xmlstr    .= '</main>';
header('content-type:text/xml;charset=utf-8');
echo($xmlstr);?>
2.分页类部分pageclass.inc.php
<?php class page{
    var $total;    //记录总数
    var $page;     //第几页,如果记录数为空时$page=0这是必然的
    var $pagesize; //每页显示记录数,缺省为10
    var $url;      //分页导航链接
    var $firstp;    //第一页
    var $nextp;     //下一页
    var $prevp;     //前一页
    var $lastp;     //最后一页
    var $navop;     //当前页面相关信息

    function page($total,$page,$pagesize=10,$url="") {//构造函数
      $this->total    = $total;
      $this->page     = $page;
      $this->pagesize = $pagesize;
      $this->url      = $url;
      $this->firstp   = "";
      $this->nextp    = "";
      $this->prevp    = "";
      $this->lastp    = "";
      $this->navop    = "";
    }

    function get_page_desible() {// 附加页面信息
      return $this->navop;
    }

    function get_page_first() {//第一页
     return $this->firstp;
    }

    function get_page_next() {//后一页
     return $this->nextp;
    }

    function get_page_prev() {//前一页
     return $this->prevp;
    }
   
    function get_page_last() {//尾页
     return $this->lastp;
    }

    function get_page_nav() {//取得url中的查询字串
      if (empty($this->url))
        {$this->url=$_SERVER['REQUEST_URI'];}
      $parse_url = parse_url($this->url);
      $url_query = $parse_url["query"];  //得到查询部分
      $currpath = $_SERVER["PHP_SELF"];
      $url_query = eregi_replace("(page|&page)=$this->page","",$url_query);
      $pagenum   = (int) ceil($this->total / $this->pagesize);                     //总页数,也是最后一页数
      $firstpage = 1;                                                            //第一页为1
      $currpage  =  $this->page;
      $lastpage  =  $pagenum ;                                                     //最后一页依总页数而定,如果总页数为0,则最后一页也为零,否则最后一面为总页数值   
      $prevpage  = ($currpage - 1 > 0 ? $currpage - 1 : 1);                      //如果当前页减小于或等于0时,那取$page值,$page可能取值为0
      $nextpage  = ($currpage + 1 > $lastpage ? $currpage  : $currpage + 1);     //如果当前页加1大于总页数,则取当前页数值
      $nav   = "<b> $currpage </b> of <b> $pagenum </b> pages ";                     //总页数中的第几页
      $nav  .= "Show <b> $this->pagesize </b> records a page ";                      //每一页显示记录数 
      $nav  .= "Total: <b> $this->total </b> records <br>";                            //总共记录数
      $this->navop = $nav;
      if (substr($url_query,0,1)=="&") {
       $nav  .= "<a id='afirst' href='$currpath" . "?page=$firstpage" . $url_query . "'>First</a> |";      //首页
       $nav  .= "<a id='anext' href='$currpath" . "?page=$nextpage"  . $url_query . "'>Next</a> |";      //下一页
       $nav  .= "<a id='aprev' href='$currpath" . "?page=$prevpage"  . $url_query . "'>Prev</a> |";      //前一页
       $nav  .= "<a id='alast' href='$currpath" . "?page=$lastpage"  . $url_query . "'>Last</a>";          //尾页
       $this->firstp = "$currpath" . "?page=$firstpage" . $url_query;
       $this->nextp  = "$currpath" . "?page=$nextpage"  . $url_query;
       $this->prevp  = "$currpath" . "?page=$prevpage"  . $url_query;
       $this->lastp  = "$currpath" . "?page=$lastpage"  . $url_query;
       } else {
       $nav  .= "<a id='afirst' href='$currpath" . "?" . $url_query . "&page=$firstpage"  . "'>First</a> |";    //首页
       $nav  .= "<a id='anext' href='$currpath" . "?" . $url_query . "&page=$nextpage"   . "'>Next</a> |";          //下一页
       $nav  .= "<a id='aprev' href='$currpath" . "?" . $url_query . "&page=$prevpage"   . "'>Prev</a> |";          //前一页
       $nav  .= "<a id='alast' href='$currpath" . "?" . $url_query . "&page=$lastpage"   . "'>Last</a>";          //尾页
       $this->firstp = "$currpath" . "?" . $url_query . "&page=$firstpage";
       $this->nextp  = "$currpath" . "?" . $url_query . "&page=$nextpage";
       $this->prevp  = "$currpath" . "?" . $url_query . "&page=$prevpage";
       $this->lastp  = "$currpath" . "?" . $url_query . "&page=$lastpage";
      }
      return $nav;
    }
 }?>
3.前台页台调用程序pagebyajax.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script language="javascript" type="text/javascript">
 //begin initajax()
 function Initajax()
{
 var ajax=false;
 try {
  ajax = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) {
  try {
   ajax = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (e) {
   ajax = false;
   }
 }
 if (!ajax && typeof(XMLHttpRequest)!='undefined') {
  ajax = new XMLHttpRequest();
    if (ajax.overrideMimeType) {
     ajax.overrideMimeType("text/xml");
    }
 
 }
 return ajax;
} //end initajax()

//create document
 function createdocument(handle,xmlstr) {
  if(document.implementation&&document.implementation.createDocument) {
        var xmldoc = document.implementation.createDocument("", "", null);
    /*
        xmldoc.prototype.loadXML = function(xmlstr) {
           alert(childNodes.length);
           var childNodes = this.childNodes;
           for (var i = childNodes.length - 1; i >= 0; i--)
              {this.removeChild(childNodes[i]);}
              var dp = new DOMParser();
              var newDOM = dp.parseFromString(xmlstr, "text/xml");
              var newElt = this.importNode(newDOM.documentElement, true);
              this.appendChild(newElt);       
        }
        xmldoc.loadXML(xmlstr);  //Firefox下不支持loadXML方法
        */
    }
    else if(window.ActiveXObject) {
        var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
        xmldoc.onreadystatechange = function() {
            if(xmldoc.readyState == 4)  {
               handle(xmldoc, xmlstr);
            }
        }
        xmldoc.loadXML(xmlstr);
    }
 }
 
 //begin setcontent()
 function setcontent(xmldoc) {
  document.getElementById("divdescible").innerHTML = xmldoc.getElementsByTagName("descible")[0].firstChild.data;
  var btnfirst = document.getElementById("btnfirst");
   btnfirst.onclick = function() {
     send_request(xmldoc.getElementsByTagName("first")[0].firstChild.data);
   }
   var btnnext = document.getElementById("btnnext");
   btnnext.onclick = function() {
     send_request(xmldoc.getElementsByTagName("next")[0].firstChild.data);
   }
   var btnprev = document.getElementById("btnprev");
   btnprev.onclick = function() {
     send_request(xmldoc.getElementsByTagName("prev")[0].firstChild.data);
   }
   var btnlast = document.getElementById("btnlast");
   btnlast.onclick = function() {
     send_request(xmldoc.getElementsByTagName("last")[0].firstChild.data);
   }
  document.getElementById("content").innerHTML = xmldoc.getElementsByTagName("content")[0].firstChild.data;
 }//end setcontent()
 
 
//begin send_request()
 function send_request(url) {
    var request = new Initajax();
    if (!request) {
       window.alert("不能创建XMLHttpRequest对象实例");
       return false;
    }
    request.open("GET",url,true);
    request.onreadystatechange = function() {
       if (request.readyState==4 ) {
          if (request.status==200) {
             var xmldom = request.responseXML.documentElement;
             setcontent(xmldom);
          } else {
             alert("您请求的页面有异常");
          }
       }
    }
    request.send(null);
 }  //end send_request

</script>
</head>

<body onload="send_request('content.php');">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
 <tr>
    <td height="24" bgcolor="#99CCFF" align="center">
        <div id="nav">
           <table border="0" cellpadding="0" cellspacing="0">
             <tr><td colspan="4"><div id="divdescible"></div></td></tr>
             <tr>
               <td width="25"><input type="button" id="btnfirst" value="First"></td>
               <td width="25"><input type="button" id="btnnext"  value="Next"></td>
               <td width="25"><input type="button" id="btnprev"  value="Prev"></td>
               <td width="25"><input type="button" id="btnlast"  value="Last"></td>
             </tr>
           </table>
        </div>
    </td>
 </tr>
 <tr>
    <td><div id="content">请稍候,正在装载数据....</div></td>
 </tr>
</table>
</body>

</html>
运行画面如下:





发表于: 2006-11-23,修改于: 2006-11-23 19:36,已浏览951次,有评论0条 推荐 投诉


网友评论
 发表评论