뉴스개발 페이징 기능LOGIN

뉴스개발 페이징 기능

페이징은 거의 모든 웹사이트에서 사용하는 기능입니다. 콘텐츠가 많고 페이징을 사용하지 않으면 페이지 표시가 너무 길어서 사용하고 찾는 데 매우 번거로울 수 있기 때문에 매우 실용적인 것에 대해 이야기해 보겠습니다. 기능.

페이징의 일반적인 개념:

페이징은 데이터베이스의 모든 정보를 고정된 숫자로 여러 세그먼트로 나누는 것이므로 여기에는 두 개의 데이터가 필요합니다.

각 페이지에 표시되는 정보 항목 수 $limitPage

현재 페이징 개수 $Page 가져오기


컴퓨터 언어는 기본적으로 0부터 레코드를 가져오기 시작하므로

페이지당 표시 수를 5로 설정하면 $limitPage = 5,

첫 번째 페이지 $page = 1 은 0, 1, 2 , 3 , 4 세 개의 레코드를 표시합니다

두 번째 페이지 $page = 2 는 5 , 6 , 7 , 8 , 9 , 10 세 개의 레코드를 표시합니다

세 번째 페이지 $page = 3은 11, 12, 13, 14, 15 세 개의 레코드

등을 표시합니다. . . . . . . . .

데이터 읽기를 시작할 $limitFrom 매개변수 설정

위의 규칙에서 다음을 얻을 수 있습니다.

$limitFrom = ($page - 1) * $limitPage;

각각 0일과 5일부터 시작됩니다. , 11개 항목에서 데이터를 얻기 시작합니다.


다음 단계는 데이터베이스에 연결하여 총 뉴스 항목 수를 계산하는 것입니다.

<?php
$link = mysqli_connect('localhost','uesrname','password','news');
$sql = "select * from new";  //  select * from表示获取全部字段的值
$sqlCount = "select count(*) from new";    //count(*)是计算数据总的条数
$retQuery = mysqli_query($link, $sqlCount);  //查询数量sql语句
$retCount = mysqli_fetch_array($retQuery);   //获取数量
$count = $retCount[0]?$retCount[0]:0;   //判断获取的新闻数量
$countNews = $count;
?>

그런 다음 변수 $countPage를 제공하여 총 표시되는 페이지 수를 나타냅니다.

어쩌면 우리는 이것은 오랜 시간이 걸리는 상황입니다. 정보가 100개라면 각 페이지에 11개가 표시됩니다. 나머지 1개를 처리하는 방법은 다음과 같습니다.

그런 다음 %를 사용하여 나머지를 판단해야 합니다.

<?php
$countPage = $countNews%$limitPage;   //求余数获取分页数量能否被除尽
if(($countPage) > 0) {  //获取的页数有余
  $countPage = ceil($countNews/$limitPage);    
// ceil() 函数向上舍入为最接近的整数,除不尽则取整数+1页, 100个新闻每个页面显示11个,成9个页面,剩余1个单独成1个页面,这样总共有10个页面
} else {
  $countPage = $countNews/$limitPage;  //如果是10个新闻每个页面显示2个,成5个页面
}
?>

기타 매개변수 이전 페이지 $prev, 다음 페이지 $next

페이징 기능에서 "이전 페이지"와 "다음 페이지"를 클릭하여 점프하는 경우가 많습니다

라는 아이디어에 대해 이야기하겠습니다. PHP 코드 기능을 먼저 구현합니다:

현재 페이지 $page -1인 $prev는 현재 페이지 $page가 첫 번째 페이지일 때 앞으로 건너뛰는 페이지가 0이 됩니다. . 이것은 분명히 버그를 일으킬 것입니다.

여기서는 현재 페이지 $page가 첫 번째 페이지인 경우 "이전 페이지"를 클릭하여 첫 번째 페이지로 표시되고 더 이상 앞으로 이동하지 않도록 설정해야 합니다. .

$prev = ($page - 1 <= 0 )?1:$page-1;

다음 페이지 $next는 현재 페이지 $page -1이며 단계별로 다음 페이지로 이동합니다. 문제는 $page가 마지막 페이지일 때 "Next Page"를 클릭하여 뒤로 이동하는 경우입니다.

이전 페이지와 유사하게 마지막 페이지를 표시하도록 설정했습니다.

$next = ($page + 1 > $countPage)?$countPage:$page+1;

//현재 페이지 번호가 전체 페이지 번호보다 큰 경우 현재 페이지가 표시됩니다.

<!DOCTYPE html>
<html>
<head>  
<meta charset=utf8">  
<title>分表页</title>
</head>
<body>
   <div>
         <a href="?page=<?php echo $prev;?>">|上一页</a>         
         <?php for($i=1; $i<=$countPage; $i++):?>         
         <a href="?page=<?php echo $i;?>"><?php echo $i;?></a>         
         <?php endfor;?>         
         <a href="?page=<?php echo $next;?>">|下一页</a>
   </div>
</body>
</html>


<?php $link = mysqli_connect('localhost','usermane','password','test'); mysqli_set_charset($link, "utf8"); if (!$link) { die("连接失败:".mysqli_connect_error()); } $page = isset($_GET['page'])?$_GET['page']:1;//获取当前分页数 $limitNews = 5; //每页显示新闻数量 $countNews = ""; //总共有多少条新闻 $countPage = ""; //一共有多少页数 $limitFrom = ($page - 1) * $limitPage;//从第几条数据开始读记录 //每页显示5个 //page = l limit 0 //page = 2 limit 5 //page = 3 limit 11 $sql = "select * from new"; $sqlCount = "select count(*) from new"; $retQuery = mysqli_query($link, $sqlCount); //查询数量sql语句 $retCount = mysqli_fetch_array($retQuery); //获取数量 $count = $retCount[0]?$retCount[0]:0; //判断获取的新闻数量 $countNews = $count; $countPage = $countNews%$limitPage; //求余数获取分页数量能否被除尽 if(($countPage) > 0) { //获取的页数有余 $countPage = ceil($countNews/$limitPage); // ceil() 函数向上舍入为最接近的整数,除不尽则取整数+1页, 100个新闻每个页面显示11个,成9个页面,剩余1个成1个页面 } else { $countPage = $countNews/$limitPage; } $prev = ($page - 1 <= 0 )?1:$page-1; //上一页 $next = ($page + 1 > $countPage)?$countPage:$page+1; //下一页 $result = mysqli_query($link, $sql); ?> <!DOCTYPE html> <html> <head> <meta charset=utf8"> <title>分页</title> </head> <body> <div> <a href="?page=<?php echo $prev;?>">|上一页</a> <?php for($i=1; $i<=$countPage; $i++):?> <a href="?page=<?php echo $i;?>"><?php echo $i;?></a> <?php endfor;?> <a href="?page=<?php echo $next;?>">|下一页</a> </div> </body> </html>
코스웨어