页面跳转越界问题,求老师解答

来源:-

未_眠

2015-07-21 02:35

<?php
		/**分页模块**/
	$p=empty($_GET['p'])?1:$_GET['p'];//获取页码;
	$table='cms_p';//数据库表名称
	

		/**php->mysql**/
	$mysqli= new mysqli('localhost','root','5866138','php_cms');
	if($mysqli->errno)
	{
		die('错误号是:'.$mysqli->errno.'错误信息:'.$mysqli->error);
	}
	$mysqli->set_charset('utf8');
	$sql='select count(id) as c from cms_p;';
	
	$res=$mysqli->query($sql);
	if(!$res)
	{
		die('查询失败'.$mysqli->error);
	}
	else if(is_object($res))
	{	
		if($res->num_rows>0)
		{
			$row1=$res->fetch_all(MYSQLI_ASSOC);
			$res->free();
		}else { echo "没有结果";
		$row1=1;}
	}


		/**分页设置**/
	$pagesize=10;//每页的数据量;
	$pagecount=ceil($row1[0]['c']/$pagesize);//页面的总数量;
	$limit=($p-1)*10;
	
	

		/**数据处理模块**/
	$sql="select * from cms_p limit $limit , $pagesize ;";
	$res2=$mysqli->query($sql);
	if(!$res2)
	{
		die('查询失败'.$mysqli->error);
	}
	else if(is_object($res2))
	{	
		if($res2->num_rows>0)
		{
			$row2=$res2->fetch_all(MYSQLI_ASSOC);
			$res2->free();
		}else { echo "没有结果";}

	}



		/**数据显示模块**/
	echo '<table border="1" cellspacing="0" cellpadding="6">
				<caption>CMS用户管理列表</caption>
			<tr>
				<th>编号</th>
				<th>实际id</th>
				<th>用户名</th>
				<th>密码</th>
				<th>年龄</th>
				<th>性别</th>
				<th>权限</th>
				<th>注册ip地址</th>
				<th>注册时间</th>
				<th>操作</th>
			</tr>';
	if($row1==1)
	{
		echo '<tr><td colspan="10">没有结果!不能显示!</td></tr>';
	}else 
	{
		$i=1;
		foreach($row2 as $key=>$val)
		{
			echo '<tr>';
			echo '<td>'.$i.'</td>';
			echo '<td>'.$val['id'].'</td>';
			echo '<td>'.$val['uname'].'</td>';
			echo '<td>'.$val['psd'].'</td>';
			echo '<td>'.$val['age'].'</td>';
			echo '<td>'.$val['sex'].'</td>';
			echo '<td>'.$val['po'].'</td>';
			echo '<td>'.$val['rip'].'</td>';
			echo '<td>'.$val['rtime'].'</td>';
			echo '<td><a href="'.$val['id'].'">修改</a></td>';
			echo '</tr>';
			$i++;
		}
	}
	echo '</table>';

		/**分页操作模块**/
	echo '<div>';
	if($p<=1){
		$p=1;
	}
	if($p>=$pagecount)
	{
		$p=$pagecount;
	}
	if($p>1)
	{
		echo '<a href="?p=1"> 首页 </a>';
		echo '<a href="?p='.($p-1).'"> <上一页 </a>';
	}

	if($pagecount<=10)
	{
		for($j=1;$j<=10;$j++)
		{
			echo '<a href="?p='.$j.'"> '.$j.' </a>';
		}
	}else
	{
		if($p>=6&&$p<=$pagecount-6)
		{	
			echo '...';
			for($j=$p-4;$j<=$p+5;$j++)
			{	
				echo '<a href="?p='.$j.'"> '.$j.' </a>';	
			}
			echo '...';
		}

		else if($p>$pagecount-6&&$p<=$pagecount)
		{
			echo '...';
			for($j=$pagecount-7;$j<=$pagecount;$j++)
			{
				
				echo '<a href="?p='.$j.'"> '.$j.' </a>';
			}
		}

		else 
			{
				for($j=1;$j<=10;$j++)
				{
					echo '<a href="?p='.$j.'"> '.$j.' </a>';	
				}
				echo '...';
			}
	}
	if($p<$pagecount)
	{
		echo '<a href="?p='.($p+1).'"> 下一页> </a>';
		echo '<a href="?p='.$pagecount.'"> 尾页 </a>';
	}
	echo ' 共'.$pagecount.'页'.'当前第 '.$p.' 页';
	echo '到第<form action="page.php?p='.$p.'" ><input type="number" name="p" size=2 /> <input type="submit" value="跳转" /></form>';
	echo "</div>";
?>

比如我的页数只有20页,然后我输入100,跳转的时候会出错,写的过滤越界代码没有生效,求解为什么?

写回答 关注

2回答

  • BobWang
    2015-07-21 09:43:07

    我没有细看这样行不行

    $p = min($p, $pagecount);

    未_眠

    我找到原因了,是因为我的判断没有放对位置

    2015-07-22 16:37:59

    共 2 条回复 >

  • 未_眠
    2015-07-21 13:10:41

    我试了

    if($p<=1){
    		$p=1;
    	}
    	if($p>=$pagecount)
    	{
    		$p=min($p,$pagecount);
    	}

    这样还是不行啊.不知道为什么不走这段代码....我也没有分析工具............

PHP+MySQL分页原理实现

引导大家完成一个PHP+MySQL分页功能,由简入繁的剖析原理

41180 学习 · 175 问题

查看课程

相似问题