Номер страницы с разбивкой по страницам

$objConnect = mysql_connect("localhost","root","") or die(mysql_error()); $objDB = mysql_select_db("Test"); $strSQL = "SELECT * FROM UserAddedRecord WHERE (Name LIKE '%".$getname."%' and State LIKE '%".$getstate."%' and Cell LIKE '%".$getcell."%' and Custgroup LIKE '%".$getgroup."%') AND user_id=$id"; $objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]"); $Num_Rows = mysql_num_rows($objQuery); $Per_Page = 5; if (!isset($_GET['Page'])) { $Page = 1; } else { $Page = $_GET['Page']; } $Prev_Page = $Page - 1; $Next_Page = $Page + 1; $Page_Start = (($Per_Page * $Page) - $Per_Page); if ($Num_Rows <= $Per_Page) { $Num_Pages = 1; } elseif (($Num_Rows % $Per_Page) == 0) { $Num_Pages = ($Num_Rows / $Per_Page) ; } else { $Num_Pages = ($Num_Rows / $Per_Page) + 1; $Num_Pages = (int) $Num_Pages; } $strSQL .=" order by addedrec_ID DESC LIMIT $Page_Start , $Per_Page"; $objQuery = mysql_query($strSQL) or trigger_error(mysql_error());; if ($Prev_Page) { echo " <a href ='$_SERVER[SCRIPT_NAME]?Page=$Prev_Page&txtName=$getname&txtState=$getstate&txtCell=$getcell&txtGroup=$getgroup'><< Back</a> "; } for ($i=1; $i <= $Num_Pages; $i++) { if ($i != $Page) { echo " <a href ='$_SERVER[SCRIPT_NAME]?Page=$i&txtName=$getname&txtState=$getstate&txtCell=$getcell&txtGroup=$getgroup'>$i</a> "; } else { echo "<b> $i </b>"; } } if ($Page!=$Num_Pages) { echo " <a href ='$_SERVER[SCRIPT_NAME]?Page=$Next_Page&txtName=$getname&txtState=$getstate&txtCell=$getcell&txtGroup=$getgroup'>Next>></a> "; } mysql_close($objConnect); 

Это код, который я использую для создания страницы разбиения на страницы для поиска данных. Но я только заметил, что у меня слишком много записей, тогда у него будет слишком много номеров страниц. Я пытаюсь ограничить отображаемый номер страницы и искать множество примеров. .it есть много способов сделать это, но я до сих пор не знаю, как ограничить его для моего метода …

Solutions Collecting From Web of "Номер страницы с разбивкой по страницам"

Хорошо, если вы имеете в виду показать что-то вроде

 Prev 1 2 3 4 5 6 .. 40 41 Next Prev 1 2 .. 6 7 8 9 10 .. 40 41 Next 

Прежде всего нам нужно создать функцию, которая может обрабатывать то, что нам нужно для вывода разбиения на страницы. Это функция, которую я использую, и она работает хорошо.

 function get_paging_info($tot_rows,$pp,$curr_page) { $pages = ceil($tot_rows / $pp); // calc pages $data = array(); // start out array $data['si'] = ($curr_page * $pp) - $pp; // what row to start at $data['pages'] = $pages; // add the pages $data['curr_page'] = $curr_page; // Whats the current page return $data; //return the paging data } 

Теперь эта функция довольно солидная и отлично работает для меня.

Таким образом, вы передаете эту функцию

  • $ tot_rows = подсчитанные строки для запроса
  • $ pp = количество элементов на страницу
  • $ curr_page = текущий номер страницы

Итак, теперь, когда у вас есть данные, которые вам нужны, вам нужно будет отобразить их.

Вот что я использую, и, пожалуйста, прочитайте его, прежде чем думать: «Ах, это слишком долго». На самом деле это очень просто.

Heres моментальный снимок того, что он вернет

введите описание изображения здесь

  <!-- Create the query --> <?php $count = mysql_fetch_assoc( mysql_query ( "SELECT COUNT( rows ) as count FROM table" ) ) ; <?php $count = $count[0]['count']; ?> <!-- Call our function from above --> <?php $paging_info = get_paging_info($count,5,34); ?> <p> <!-- If the current page is more than 1, show the First and Previous links --> <?php if($paging_info['curr_page'] > 1) : ?> <a href='' title='Page 1'>First</a> <a href='' title='Page <?php echo ($paging_info['curr_page'] - 1); ?>'>Prev</a> <?php endif; ?> <?php //setup starting point //$max is equal to number of links shown $max = 7; if($paging_info['curr_page'] < $max) $sp = 1; elseif($paging_info['curr_page'] >= ($paging_info['pages'] - floor($max / 2)) ) $sp = $paging_info['pages'] - $max + 1; elseif($paging_info['curr_page'] >= $max) $sp = $paging_info['curr_page'] - floor($max/2); ?> <!-- If the current page >= $max then show link to 1st page --> <?php if($paging_info['curr_page'] >= $max) : ?> <a href='' title='Page 1'>1</a> .. <?php endif; ?> <!-- Loop though max number of pages shown and show links either side equal to $max / 2 --> <?php for($i = $sp; $i <= ($sp + $max -1);$i++) : ?> <?php if($i > $paging_info['pages']) continue; ?> <?php if($paging_info['curr_page'] == $i) : ?> <span class='bold'><?php echo $i; ?></span> <?php else : ?> <a href='' title='Page <?php echo $i; ?>'><?php echo $i; ?></a> <?php endif; ?> <?php endfor; ?> <!-- If the current page is less than say the last page minus $max pages divided by 2--> <?php if($paging_info['curr_page'] < ($paging_info['pages'] - floor($max / 2))) : ?> .. <a href='' title='Page <?php echo $paging_info['pages']; ?>'><?php echo $paging_info['pages']; ?></a> <?php endif; ?> <!-- Show last two pages if we're not near them --> <?php if($paging_info['curr_page'] < $paging_info['pages']) : ?> <a href='<?php echo str_replace('/page'.$paging_info['curr_page'], '', $paging_info['curr_url']) . '/page'.($paging_info['curr_page'] + 1); ?>' title='Page <?php echo ($paging_info['curr_page'] + 1); ?>'>Next</a> <a href='<?php echo str_replace('/page'.$paging_info['curr_page'], '', $paging_info['curr_url']) . '/page'.$paging_info['pages']; ?>' title='Page <?php echo $paging_info['pages']; ?>'>Last</a> <?php endif; ?> </p> 

$ count_pages = ceil ($ total / $ items_per_page);

Я решил очень похожую проблему для кого-то другого с очень похожим сценарием здесь: Как ограничить страницы, показанные в сценарии разбивки на страницы

Кроме того, я заметил несколько других аномалий с вашим скриптом (помимо нечитаемого форматирования, которое я исправил). Вы должны изменить все вхождения $_SERVER[SCRIPT_NAME] в $_SERVER['SCRIPT_NAME'] . В вашем скрипте, например:

 echo " <a href ='$_SERVER[SCRIPT_NAME]?Page=..."; 

Станет:

 echo " <a href ='{$_SERVER['SCRIPT_NAME']}?Page=..."; 

сделать его простым, вот код:

 <?php //put this code on the begining of the page $page=$_GET['page']; //Getting page number from url | example: www.mydomain.com/index.php?page=3 if(!is_numeric($page)) $page=1; //If there is no page number specified we set number 1 $queryCount = "SELECT * FROM table "; //select from db $query = $DB->query( $queryCount); $num = mysql_num_rows ($query); //count num rows $per_page=5; //default 5 results per page $start=$per_page*($page-1); //start for select on next page (page2, 3, 4,5) $end=min($num,$page*$per_page); //end //here is select for your results. Be careful for LIMIT in the select! $query = "SELECT * FROM page LIMIT $start, $per_page "; //page bottom, where you want to put your numbers $pages=ceil($num/$per_page); for($s=1; $s<=$pages; $s++) { if($s==$page) $numPage .= "[$s] "; else $numPage .= "<a href='index.php?page=$s'>$s</a> "; } echo $numPage; 

?>

Я не тестировал его, но думаю, он должен работать 🙂

С уважением, Иван

мой код всегда отображает не менее 9 страниц в случае общих страниц> 9, что бы вы ни были на странице 1,2,3

 <ul class="pagination pagination-sm" style="align:center"> <li><a href="./?page=1"><</span></a></li> <?php if ($current_page <4){ if ($total_pages<9) { for($i = 1; $i <= $total_pages; $i++) { if ($i == $current_page) { echo '<li class="active"><a href="#">'; echo $i.'</a></li>'."\n"; } else { echo ' <li><a href="./?page='.$i.'">'; echo $i.'</a></li>'."\n"; } } } else { for($i = 1; $i <= 9; $i++) { if ($i == $current_page) { echo '<li class="active"><a href="#">'; echo $i.'</a></li>'."\n"; } else { echo ' <li><a href="./?trang='.$i.'">'; echo $i.'</a></li>'."\n"; } } } } elseif ($current_page >$total_pages-4) { if ($total_pages<9) { for($i = 1; $i <= $total_pages; $i++){ if ($i == $current_page){ echo '<li class="active"><a href="#">'; echo $i.'</a></li>'."\n"; } else { echo ' <li><a href="./?page='.$i.'">'; echo $i.'</a></li>'."\n"; } } }else{ for($i = $total_pages-8; $i <= $total_pages; $i++){ if ($i == $current_page){ echo '<li class="active"><a href="#">'; echo $i.'</a></li>'."\n"; } else { echo ' <li><a href="./?page='.$i.'">'; echo $i.'</a></li>'."\n"; } } } }else{ for($i = max(1, $current_page - 4); $i <= min($current_page + 4, $total_pages); $i++){ if ($i == $current_page){ echo '<li class="active"><a href="#">'; echo $i.'</a></li>'."\n"; } else { echo ' <li><a href="./?trang='.$i.'">'; echo $i.'</a></li>'."\n"; } } } ?> <li> <a href="./?trang=<?php echo $total_pages ?>">></a> </li> </ul> 

Вам нужно будет использовать предложение LIMIT в вашем заявлении sql.

Цель этого кода – показать только определенное (определенное) количество страниц в разбивке на страницы

Получить текущий номер страницы из url и определить $curr_pg_numb

Получите общее количество страниц из mysql и определите $total_pages

И вот код для разбивки на страницы

 $counter=0; $init_num_to_left = 3;//initial number of pages to show to left from current page $init_num_to_right = 4; if( $curr_pg_numb - $init_num_to_left < 1 ){ $init_num_to_right = $init_num_to_right + ( 1 - ($curr_pg_numb - $init_num_to_left) ); $init_num_to_left = $curr_pg_numb - 1; } else if( $curr_pg_numb + $init_num_to_right > $total_pages ){ $init_num_to_left = $init_num_to_left + ( ($curr_pg_numb + $init_num_to_right) - $total_pages ); $init_num_to_right = ($curr_pg_numb + $init_num_to_right) - $total_pages; } while($counter <= $total_pages ) { if ( $counter > 0 ){ if ($curr_pg_numb==$counter){ echo '<strong> '. ( htmlspecialchars($curr_pg_numb , ENT_QUOTES, "UTF-8") + 0 ). '</strong> '; } else { if ( $counter >= ($curr_pg_numb - $init_num_to_left ) and $counter <= ($curr_pg_numb + $init_num_to_right ) ) { echo '<a href="?cpn='. htmlspecialchars(($counter), ENT_QUOTES, "UTF-8"). '" style="margin:5px;">'. htmlspecialchars(($counter), ENT_QUOTES, "UTF-8"). '</a>'; } }//else { }//if ( $counter > 0 ){ $counter++; }//while($counter <= $total_pages ) {