博客列表 >429-MYSQLI分页函数

429-MYSQLI分页函数

小威的博客
小威的博客原创
2018年04月30日 21:03:36704浏览
  • MYSQLI分页函数效果图      PHP HTML混写

11.png10.png

  • MYSQLI分页函数分页封装函数:func_page.php


实例

<?php 
if(!function_exists('func_page.php'))
{
	function func_page($db,$table,$page=1,$num=15){
		$offset = ($page-1)*$num; //计算偏移量
		$sql = "SELECT * FROM {$table} LIMIT {$offset}, {$num};";//查询取出数据
		$res = mysqli_query($db,$sql);
		$rows = mysqli_fetch_all($res,MYSQLI_ASSOC);

	//获取总页数分2步:1.获取总记录数,2.再除以每次的显示数量,结果向上取整
        $number = mysqli_query($db,"SELECT COUNT(*) FROM {$table}");
        list($total) = mysqli_fetch_row($number); //总记录数保存到变量$total中
        $pages = ceil($total / $num);  //获取到总页数 $pages
        //总页数 = 总记录数 ÷ 每页显示数量    ceil向上取整

        //返回当前分页数据与总页数
        return ['rows'=>$rows, 'pages'=>$pages];

	}
}

运行实例 »

点击 "运行实例" 按钮查看在线实例


  • MYSQLI分页函数源代码  PHP HTML混写


实例

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>会员信息表</title>
	<style type="text/css">
		table,th,td {
			border: 1px solid #000;
			padding: 8px;
		}
		table th {
			background-color: #21a675;
			color: #fff;
		}
		table {
	    	width: 80%;
	    	border-collapse: collapse;
	    	margin: 0 auto;
	    	text-align: center;
	    }
	    h2 {
	    	color: red;
	    }
	    h4 {
	    	width: 80%;
	    	text-align: center;
	    	margin: 5px auto;
	    }

	    h4 a {
	    	text-decoration: none;
	    	color: #666;
	    	padding:0 5px;
	    	display: inline-block;
	    }
	    h4 a:hover, .active {
	    	color: blue;
	    }
	    #pa {
	    	color: red;
	    }
        form {
        	display: inline;
        }
	</style>
</head>
<body>
	<?php 
	//导入分页函数库
	require 'func_page.php';
	//连接数据库
	$db = mysqli_connect('127.0.0.1','root','uyYYFGZxuVactZc7','wd2018');
    //手工修改url中的get参数可以实现翻页查询
	$page = isset($_GET['p']) ? $_GET['p']:1;
	$num = 15; //每页显示数据数量
	$table = 'users'; //导入数据库的表名

	//调用分页函数
	$data = func_page($db,$table,$page,$num);
	$rows = $data['rows'];//当前分页数据
	$pages = $data['pages'];//总页数

	//如果当前变成为了0,则强制修改为1,否则就是当前页数
	$page = ($page == 0) ? 1 : $page;
	//如果大于总页数,则强制修改为总页数,否则就是当前页数
	$page = ($page > $pages) ? $pages : $page;

	//分页太多省略多余页码判断
	$page_max=25;//每页显示多少页码
	$buffCount=12;//缓存页
	$startPage=1;//起始页
	 
	if  ($page< $buffCount){
	    $startPage=1;
	}else if($page>=$buffCount  and $page<$pages-$page_max  ){
	    $startPage=$page-$buffCount+1;
	}else{
	    $startPage=$pages-$page_max+1;
	}
	 
	$endPage=$startPage+$page_max-1;

    ?>
	<table>
		<caption><h2>会员信息表</h2></caption>
		<tr>
			<th>ID</th>
			<th>帐号</th>
			<th>密码</th>
			<th>姓名</th>
			<th>余额</th>
			<th>邮箱</th>
			<th>手机号码</th>
			<th>上线代理</th>
		</tr>
		<?php foreach ($rows as $row): ?>
			<tr>
				<td><?php echo $row['id']; ?></td>
				<td><?php echo $row['user']; ?></td>
				<!-- 隐藏密码中间三位数字 -->
				<td><?php echo substr_replace(($row['pass']),'医院医院', 1, 4); ?></td>
				<td><?php echo $row['name']; ?></td>
				<td><?php echo $row['money']; ?></td>
				<td><?php echo $row['email']; ?></td>
				<td><?php echo $row['phone']; ?></td>
				<td><?php echo $row['upline']; ?></td>
			</tr>
	    <?php endforeach;?>
	</table>
		<h4>
		<!-- 当前是第一页时,隐藏首页和上一页 -->
	<?php if($page != 1): ?>
		<a id="pa" href="?p=1">首页</a>
		<a id="pa" href="?p=<?php echo $page-1; ?>"><</a>
	<?php endif; ?>

	<!-- 生成中间页码 -->
	<?php for($i=$startPage;$i<=$endPage; $i++): ?>
		<a class="<?php if($_GET['p']==$i){echo 'active';}?>" href="?p=<?php echo $i ?>"><?php echo $i ?></a>
    <?php endfor ?>

	<!-- 当前是最后一页时,隐藏末页和下一页 -->
	<?php if($page != $pages): ?>
		<a id="pa" href="?p=<?php echo $page+1; ?>">></a>
		<a id="pa" href="?p=<?php echo $pages; ?>">末页</a>
	<?php endif; ?>


	<!--实现页面的快速跳转-->
    <form action="" method="get">
        第
        <select name="p" id="">
            <?php for($i=1; $i<=$pages; $i++): ?>
                <!-- 循环输出全部页码,并锁定当前页-->
                <option value="<?php echo $i; ?>" <?php if($_GET['p']==$i){echo 'selected';} ?>><?php echo $i; ?></option>
            <?php endfor; ?>
        </select>
        页
	    <button>goto</button>
    </form>
	</h4>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

这次编写在分页很多的情况下 隐藏多余页码是个难点   找了很久百度才再到解决方法

//分页太多省略多余页码判断
$page_max=25;//每页显示多少页码
$buffCount=12;//缓存页
$startPage=1;//起始页
 
if  ($page< $buffCount){
   $startPage=1;
}else if($page>=$buffCount  and $page<$pages-$page_max  ){
   $startPage=$page-$buffCount+1;
}else{
   $startPage=$pages-$page_max+1;
}
 
$endPage=$startPage+$page_max-1;
    ?>

中间页码用

for($i=$startPage;$i<=$endPage; $i++)

做判断

<!-- 生成中间页码 -->
<?php for($i=$startPage;$i<=$endPage; $i++): ?>
<a class="<?php if($_GET['p']==$i){echo 'active';}?>" href="?p=<?php echo $i ?>"><?php echo $i ?></a>
    <?php endfor ?>
  • 另外还有一种纯PHP的写法   跳转页用输入框方式编写

  • MYSQLI分页函数效果图  纯PHP写法

1.png2.png3.png4.png5.png6.png7.png8.png9.png

12.png

  • MYSQLI分页函数源代码   纯PHP写法

  • CSS加上

#btn {
   margin:0 5px;
   }
        form {
        display: inline;
        }
        #page {
        width: 40px;
        padding:0 5px;
        }
  • 实例

    <?php 
        echo '<h4>';
    	//上一页
    	$htmlstr="";//输出内容函数变量
    	if($page==1){//当前页面=1时,
    	    $htmlstr.='';//隐藏\上一页\
    	}else{
    	    $lastPage=$page-1; //当前页面-1时,显示\上一页\
    	    $htmlstr.="<a href='?p=$lastPage'>上一页</a>";
    	}
    	// 首页
    	if($page-$page_max>1){//当前页面-最大页数>1时 如:12-10=2>1
    	    $htmlstr.="<a href='?p=1'>首页</a>";//显示\首页\
    	    $htmlstr.="<span>...</span>";//显示\省略号\
    	}
    	//当前页的左边
    	for($i=$page_max;$i>=1;$i--){
    	    if(($page - $i) < 1 ) { // 当前页左边最多 page_max 个数字
    	        continue;
    	    }
    	   $lastPage=$page-$i;
    	   $htmlstr.="<a href='?p=$lastPage'>$lastPage</a>";
    	}
    	//当前页
    	$htmlstr.="<span style=\"color:red\">$page</span>";
    	//当前页右边
    	for($i=1;$i<=$page_max;$i++){
    	    if(($page + $i) > $pages) { // 当前页右边最多 page_max 个数字
    	        break;
    	    }
    	    $lastPage=$page+$i;
    	    $htmlstr.="<a href='?p=$lastPage'>$lastPage</a>";
    
    	}
    
    	//尾页
    	if(($page+$page_max)<$pages){//当前页面+最大页数<总页数时
    	    $htmlstr.="<span>...</span>";//显示\省略号\
    	    $htmlstr .= '<a href="?p='.$pages.'">尾页</a>';//显示\尾页\
    	}
    	//下一页
    	 if($page == $pages) {//当前页面=总页数时
    	       $htmlstr .= '';//隐藏\下一页\
    	   } else {
    	          $nextPage=$page+1;//下一页=当前页面+1
    	       $htmlstr .= "<a href='?p={$nextPage}'>下一页</a>";
    	   }
        //页面跳转
        $htmlstr.="<form action = ''>";
        $htmlstr.=" 跳到-第 <input type='number' min='1' max='$pages' value=".($page+1)." name='p' id='page'> 页";
        $htmlstr.="<input type='submit' name='Submit' id='btn' value='确定'>";
        $htmlstr.="</form>";
        $htmlstr.="共 <font color='blue'>{$pages}</font> 页</div>";
        $htmlstr.="-现在<font color='red'>{$page}</font>页</div>";
        $checkText = $_POST['content'];
    	echo $htmlstr;
    	echo '</h4>'; 
    ?>

    运行实例 »

    点击 "运行实例" 按钮查看在线实例


重点

跳到-第 <input type='number' min='1' max='$pages' value=".($page+1)." name='p' id='page'> 页

input type='number'    输入框 只能输入数值   min 最小值   max  最大值  value 默认值 

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议