<!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>
</head> <body>
<?php
//连接类
include "page.class.php";
include "mydbda.php"; //分页单元格显示内容的修改
@$name=$_GET["name"]; $sql="select count(*) from chinastates where AreaName like '%{$name}%'"; //建mydbda类的对象
$da = new mydbda(); //用sql语句求$total $query
$total = $da->Select($sql,"CX","mydb"); $query = "name=".$name; //造分页类对象
$page = new Page($total,15,$query,true); //sql语句遍历数据库 别忘空格
$sqlshow = "select * from chinastates where AreaName like '%{$name}%' ".$page->limit; //用造的对象接收结果
$strc = $da->Select($sqlshow,"CX","mydb"); //类的返回结果为字符集("|"代表行的分割,"^"代表列的分割)
//拆分字符集
$strth = "<span style='color:blue'>".$name."</span>";//修改样式
$strnew = str_replace($name,$strth,$strc);//替换样式
$hang = explode('|',$strnew); echo "<h1>城市表</h1>";
echo "<form action='fenyelianxi.php' method='get'>";
echo "<div>地区名称:<input type='text' name='name' />&nbsp;<input type='submit' value='查询' /></div><br />";
echo "</form>";
echo "<table width='100%' border='1'>";
echo "<tr><td>地区代号</td> <td>地区名称</td> <td>地区父级代号</td> <td>地区权限</td> </tr>"; //for循环遍历
for($i=0;$i<count($hang);$i++)
{
$lie = explode('^',$hang[$i]); echo "<tr><td>{$lie[0]}</td> <td>{$lie[1]}</td> <td>{$lie[2]}</td> <td>{$lie[3]}</td> </tr>"; }
echo "<tr><td colspan='4'>".$page->fpage()."</td></tr>"; echo"</table>"; ?>
</body>
</html>
<?php
/**
file: page.class.php
完美分页类 Page
*/
class Page {
private $total; //数据表中总记录数
private $listRows; //每页显示行数
private $limit; //SQL语句使用limit从句,限制获取记录个数
private $uri; //自动获取url的请求地址
private $pageNum; //总页数
private $page; //当前页
private $config = array(
'head' => "条记录",
'prev' => "上一页",
'next' => "下一页",
'first'=> "首页",
'last' => "末页"
);
//在分页信息中显示内容,可以自己通过set()方法设置
private $listNum = 10; //默认分页列表显示的个数 /**
构造方法,可以设置分页类的属性
@param int $total 计算分页的总记录数
@param int $listRows 可选的,设置每页需要显示的记录数,默认为25条
@param mixed $query 可选的,为向目标页面传递参数,可以是数组,也可以是查询字符串格式
@param bool $ord 可选的,默认值为true, 页面从第一页开始显示,false则为最后一页
*/
public function __construct($total, $listRows=25, $query="", $ord=true){
$this->total = $total; //总记录数
$this->listRows = $listRows;
$this->uri = $this->getUri($query);
$this->pageNum = ceil($this->total / $this->listRows);//总页数
/*以下判断用来设置当前面*/
if(!empty($_GET["page"])) {
$page = $_GET["page"];
}else{
if($ord)
$page = 1;
else
$page = $this->pageNum;
} if($total > 0) {
if(preg_match('/\D/', $page) ){ //匹配数字(0-9)
$this->page = 1;
}else{
$this->page = $page;
}
}else{
$this->page = 0;
} $this->limit = "LIMIT ".$this->setLimit();
} /**
用于设置显示分页的信息,可以进行连贯操作
@param string $param 是成员属性数组config的下标
@param string $value 用于设置config下标对应的元素值
@return object 返回本对象自己$this, 用于连惯操作
*/
function set($param, $value){ //将上一页改成"<<"
if(array_key_exists($param, $this->config)){
$this->config[$param] = $value;
}
return $this;
} /* 不是直接去调用,通过该方法,可以使用在对象外部直接获取私有成员属性limit和page的值 */
function __get($args){
if($args == "limit" || $args == "page")
return $this->$args;
else
return null;
} /**
按指定的格式输出分页
@param int 0-7的数字分别作为参数,用于自定义输出分页结构和调整结构的顺序,默认输出全部结构
@return string 分页信息内容
*/
function fpage(){
$arr = func_get_args(); $html[0] = "&nbsp;共<b> {$this->total} </b>{$this->config["head"]}&nbsp;";
$html[1] = "&nbsp;本页 <b>".$this->disnum()."</b> 条&nbsp;";
$html[2] = "&nbsp;本页从 <b>{$this->start()}-{$this->end()}</b> 条&nbsp;";
$html[3] = "&nbsp;<b>{$this->page}/{$this->pageNum}</b>页&nbsp;";
$html[4] = $this->firstprev();
$html[5] = $this->pageList();
$html[6] = $this->nextlast();
$html[7] = $this->goPage(); $fpage = '<div style="font:12px \'\5B8B\4F53\',san-serif;">';
if(count($arr) < 1)
$arr = array(0, 1,2,3,4,5,6,7); for($i = 0; $i < count($arr); $i++)
$fpage .= $html[$arr[$i]]; $fpage .= '</div>';
return $fpage;
} /* 在对象内部使用的私有方法,*/
private function setLimit(){
if($this->page > 0)
return ($this->page-1)*$this->listRows.", {$this->listRows}";
else
return 0;
} /* 在对象内部使用的私有方法,用于自动获取访问的当前URL */
private function getUri($query){
$request_uri = $_SERVER["REQUEST_URI"];
$url = strstr($request_uri,'?') ? $request_uri : $request_uri.'?'; if(is_array($query))
$url .= http_build_query($query);
else if($query != "")
$url .= "&".trim($query, "?&"); $arr = parse_url($url); if(isset($arr["query"])){
parse_str($arr["query"], $arrs);
unset($arrs["page"]);
$url = $arr["path"].'?'.http_build_query($arrs);
} if(strstr($url, '?')) {
if(substr($url, -1)!='?')
$url = $url.'&';
}else{
$url = $url.'?';
} return $url;
} /* 在对象内部使用的私有方法,用于获取当前页开始的记录数 */
private function start(){
if($this->total == 0)
return 0;
else
return ($this->page-1) * $this->listRows+1;
} /* 在对象内部使用的私有方法,用于获取当前页结束的记录数 */
private function end(){
return min($this->page * $this->listRows, $this->total);
} /* 在对象内部使用的私有方法,用于获取上一页和首页的操作信息 */
private function firstprev(){
if($this->page > 1) {
$str = "&nbsp;<a href='{$this->uri}page=1'>{$this->config["first"]}</a>&nbsp;";
$str .= "<a href='{$this->uri}page=".($this->page-1)."'>{$this->config["prev"]}</a>&nbsp;";
return $str;
} } /* 在对象内部使用的私有方法,用于获取页数列表信息 */
private function pageList(){
$linkPage = "&nbsp;<b>"; $inum = floor($this->listNum/2);
/*当前页前面的列表 */
for($i = $inum; $i >= 1; $i--){
$page = $this->page-$i; if($page >= 1)
$linkPage .= "<a href='{$this->uri}page={$page}'>{$page}</a>&nbsp;";
}
/*当前页的信息 */
if($this->pageNum > 1)
$linkPage .= "<span style='padding:1px 2px;background:#BBB;color:white'>{$this->page}</span>&nbsp;"; /*当前页后面的列表 */
for($i=1; $i <= $inum; $i++){
$page = $this->page+$i;
if($page <= $this->pageNum)
$linkPage .= "<a href='{$this->uri}page={$page}'>{$page}</a>&nbsp;";
else
break;
}
$linkPage .= '</b>';
return $linkPage;
} /* 在对象内部使用的私有方法,获取下一页和尾页的操作信息 */
private function nextlast(){
if($this->page != $this->pageNum) {
$str = "&nbsp;<a href='{$this->uri}page=".($this->page+1)."'>{$this->config["next"]}</a>&nbsp;";
$str .= "&nbsp;<a href='{$this->uri}page=".($this->pageNum)."'>{$this->config["last"]}</a>&nbsp;";
return $str;
}
} /* 在对象内部使用的私有方法,用于显示和处理表单跳转页面 */
private function goPage(){
if($this->pageNum > 1) { //!important优先调用
return '&nbsp;<input style="width:20px;height:17px !important;height:18px;border:1px solid #CCCCCC;" type="text" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>'.$this->pageNum.')?'.$this->pageNum.':this.value;location=\''.$this->uri.'page=\'+page+\'\'}" value="'.$this->page.'"><input style="cursor:pointer;width:25px;height:18px;border:1px solid #CCCCCC;" type="button" value="GO" onclick="javascript:var page=(this.previousSibling.value>'.$this->pageNum.')?'.$this->pageNum.':this.previousSibling.value;location=\''.$this->uri.'page=\'+page+\'\'">&nbsp;';
}
} /* 在对象内部使用的私有方法,用于获取本页显示的记录条数 */
private function disnum(){
if($this->total > 0){
return $this->end()-$this->start()+1;
}else{
return 0;
}
}
} ?>

page.class.php

<?php
class mydbda
{
var $host = "localhost";
var $username = "root";
var $password = "123";
var $database = "mydb"; /**
功能:执行SQL语句,返回结果
参数:$sql:要执行的SQL语句
$type:SQL语句的类型,CX代表查询,QT代表其他
$data:要操作的数据库
返回值:如果是查询,返回结果集
如果是其他语句,执行成功返回OK,失败返回NO
*/
function Select($sql,$type,$data)
{ //1.造连接对象
$db = new mysqli($this->host,$this->username,$this->password,$data); //2.判断是否连接成功
if(mysqli_connect_error())
{
echo "连接失败"; //退出整个程序
exit;
}
else
{
//4.执行SQL语句 $result = $db->query($sql); if($type == "CX")
{
$str = ""; while($row = $result->fetch_row())
{
for($i=0;$i<count($row);$i++)
{
$str=$str.$row[$i]."^";
}
$str = substr($str,0,strlen($str)-1);
$str = $str."|"; }
$str = substr($str,0,strlen($str)-1);
return $str;
}
else
{
if($result)
{
return "OK";
}
else
{
return "NO";
}
} }
} }
?>

mydbda.php

PHP——分页显示的完善(加查询,用类简化sql语句)的更多相关文章

  1. mysql 使用Navicat Lite如何打开‘查询编辑器’,使用sql语句对表进行操作!

    今天第一次使用mysql,尽然连查询编辑器都找不到,研究了半天,询问了下大牛,才搞出来,准备写下来,后面方面忘记了有查找的地方,哈哈哈~~ 如何打开"查询编辑器",使用sql语句进 ...

  2. oracle查看执行最慢与查询次数最多的sql语句及其执行速度很慢的问题分析

    oracle查看执行最慢与查询次数最多的sql语句 注:本文来源 于<oracle查看执行最慢与查询次数最多的sql语句> 前言 在ORACLE数据库应用调优中,一个SQL的执行次数/频率 ...

  3. 金蝶k/3 K3云之家消息查询发送是否成功SQL语句

    金蝶k/3 K3云之家消息查询发送是否成功SQL语句 1是成功,0是还在轮询中未发送,4是发送失败 select * into #tempUserID from ( union select t_Gr ...

  4. Mongodb操作之查询(循序渐进对比SQL语句)

    工具推荐:Robomongo,可自行百度寻找下载源,个人比较推荐这个工具,相比较mongoVUE则更加灵活. 集合简单查询方法 mongodb语法:db.collection.find()  //co ...

  5. Mongodb操作之查询(循序渐进对比SQL语句)(转http://www.tuicool.com/articles/UzQj6rF)

    工具推荐:Robomongo,可自行百度寻找下载源,个人比较推荐这个工具,相比较mongoVUE则更加灵活. 集合简单查询方法 mongodb语法:db.collection.find()  //co ...

  6. 带参方法的执行:普通方法的查询,可为空方法的查询。批量处理SQL语句。

    普通方法的查询: @Override public List<Map<String, Object>> selectSpentAmount(Integer MAT_TYPE_, ...

  7. 在linq查询环境下通过sql语句来访问数据库

    接上一篇随笔 这里主要介绍在linq环境下,如果实现用sql来访问数据库,同时也介绍在EF框架中如何添加新的方法来访问数据库. 1.首先,在数据访问层(EF.DAO,EF.IDAO)中添加具体的函数来 ...

  8. oracle查看执行最慢与查询次数最多的sql语句

    前言 在ORACLE数据库应用调优中,一个SQL的执行次数/频率也是常常需要关注的,因为某个SQL执行太频繁,要么是由于应用设计有缺陷,需要在业务逻辑上做出优化处理,要么是业务特殊性所导致.如果执行频 ...

  9. 查询正在执行的SQL语句DBCCINPUTBUFFER

    DBCC INPUTBUFFER 返回进程下SQL语句 如果查询所有的进程如何呢? 创建一个存储过程 CREATE proc pr_dbccINPUTBUFFER(@spid varchar(200) ...

随机推荐

  1. [CF 295A]Grag and Array[差分数列]

    题意: 有数列a[ ]; 操作op[ ] = { l, r, d }; 询问q[ ] = { x, y }; 操作表示对a的[ l, r ] 区间上每个数增加d; 询问表示执行[ x, y ]之间的o ...

  2. import MySQLdb UserWarning

    Finished processing dependencies for MySQL-python==1.2.5 ╭─haoke@haokedeMBP ~/ProgramFiles/MySQL-pyt ...

  3. Qt 之 入门例程

    以 “Hello Qt” 为例,介绍如何建立一个 Qt 工程 . 1  QLabel 例程 QLabel 用来显示文本和图片,它继承自 QFrame (而 QFrame 继承自 QWidget) 1. ...

  4. 在Flex (Flash)中嵌入HTML 代码或页面—Flex IFrame

    在flex组件中嵌入html代码,可以利用flex iframe.这个在很多时候会用到的,有时候flex必须得这样做,如果你不这样做还真不行…… flex而且可以和html进行JavaScript交互 ...

  5. 【Leet Code】String to Integer (atoi) ——常考类型题

    String to Integer (atoi) Total Accepted: 15482 Total Submissions: 106043My Submissions Implement ato ...

  6. 三次握手的第三个ACK包丢了,TCP的处理方式

    众所周知,TCP建立采用的是三次握手.最近在看论文的时候,突然想到,如果第三个ACK报文丢失了,TCP建立是否还会成功?TCP是如何处理的呢?在网上搜了一圈,看到了这篇文章: 三次握手的第三个ACK包 ...

  7. oracle 获取指定日期的第一天和最后一天

      oracle 获取指定日期的第一天和最后一天 CreationTime--2018年8月21日17点56分 Author:Marydon 1.查询本月的第一天和最后一天 SELECT TO_CHA ...

  8. Linux下的进程间通信-详解

     详细的讲述进程间通信在这里绝对是不可能的事情,而且笔者很难有信心说自己对这一部分内容的认识达到了什么样的地步,所以在这一节的开头首先向大家推荐著 名作者Richard Stevens的著名作品:&l ...

  9. Oracle基础学习2--Oracle登录与三种验证机制

    首先,Oracle安装完毕有三个默认用户 Ø  Sys:数据库对象的拥有者.权限最高.password在安装的时候(口令管理)能够改变 Ø  System:数据库管理员,password为manage ...

  10. C#:ZedGraph画图控件(待补充)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...