2016-06-07 2 views
0

J'ai un script de pagination PHP MySQLi simple qui montre 5 entrées par page. Mais avec de grandes entrées de base de données, il y a quelques numéros de pages qui montrent. Comment puis-je limiter le nombre de pages affichées dans ma pagination? Par exemple. 10 pages à la fois: PREMIER < 1 2 3 4 5 6 7 8 9 10> LASTPHP MySQLi Pagination Limite Nombre de pages

Voici mon code:

<!DOCTYPE html><html> 
<head> 
<title>PHP Pagination</title> 
</head> 

<body> 
<?php 
// Establish Connection to the Database 
$con = mysqli_connect('localhost','root','','classicmodels'); 

//Records per page 
$per_page = 5; 

if (isset($_GET["page"])) { 
$page = $_GET["page"]; 
} 
else { 
$page = 1; 
} 

// Page will start from 0 and Multiple by Per Page 
$start_from = ($page-1) * $per_page; 

//Selecting the data from table but with limit 
$query = "SELECT * FROM customers LIMIT $start_from, $per_page"; 
$result = mysqli_query ($con, $query); 

?> 

<table align="center" border="2″ cellpadding="3″> 
<tr><th>Name</th><th>Phone</th><th>Country</th></tr> 
<?php 
while ($row = mysqli_fetch_assoc($result)) { 
?> 
<tr align="center"> 
<td><?php echo $row['contactFirstName']; ?></td> 
<td><?php echo $row['contactLastName']; ?></td> 
</tr> 
<?php 
}; 
?> 
</table> 

<div> 
<?php 

//Now select all from table 
$query = "select * from customers"; 
$result = mysqli_query($con, $query); 

// Count the total records 
$total_records = mysqli_num_rows($result); 

//Using ceil function to divide the total records on per page 
$total_pages = ceil($total_records/$per_page); 

//Going to first page 
if($_GET['page'] != 1) { 
echo "<center><a href='index.php?page=1'>".'First Page'."</a>"; 
} else echo "<center>"; 

echo "<a href='index.php?page=" . ($_GET['page']+1) . "'>Next Page</a>"; 

for ($i=1; $i<=$total_pages; $i++) { 

echo "<a href='index.php?page=".$i."'>".$i."</a> "; 
}; 

echo "<a href='index.php?page=" . ($_GET['page']-1) . "'>Previous Page</a>"; 

// Going to last page 
if($_GET['page'] != $total_pages) { 
echo "<a href='index.php?page=$total_pages'>".'Last Page'."</a></center> "; 
} else echo "</center>"; 
?> 

</div> 

</body> 
</html> 
+0

sortir de la boucle au début, par ex. Si vous voulez seulement 10 pages, alors if ($ page_numbers_display ++> 10) {break; } ' –

+0

Merci pour les commentaires! Je suis en quelque sorte un débutant à PHP et je ne sais pas où ajouter le code pour sortir de la boucle au début. Voulez-vous s'il vous plaît laissez-moi savoir où ajouter le code? – John

+0

même juste quelque chose comme 'for ($ i = $ start_page; $ i <= $ end_page; $ i ++)' le ferait. Les boucles 'for' ne doivent pas aller' 1-> n' elles peuvent aller 'm-> n' dans l'ordre ascendant ou descendant. –

Répondre

1

Vous pouvez mettre en œuvre un paginator comme celui-ci (version simple, doit être améliorée):

<?php 

$totalPages = 28; //replace with database value 
$currentPage = isset($_GET['page']) ? (int)$_GET['page'] : 1; 
$numPagesToShow = 10; //it's up to you 

//avoid bug or trying to get page out of the bounds 
if($currentPage > $totalPages) { 
    $currentPage = $totalPages; 
} 

/* correct the number of pages to show on the left or right 
* and always try to put the current page in the middle 
*/ 
if($numPagesToShow >= $totalPages) { 
    $numMaxPageLeft = 1; 
    $numMaxPageRight = $totalPages; 
} else { 
    $pagesToShow = ceil($numPagesToShow/2); 
    $numMaxPageLeft = $currentPage - $pagesToShow; 
    $numMaxPageRight = $currentPage + $pagesToShow; 

    if($numMaxPageLeft <= 0) { 
     $numMaxPageRight = $numMaxPageRight - $numMaxPageLeft +1; 
     $numMaxPageLeft = 1; 
    } elseif($numMaxPageRight >= $totalPages) { 
     $numMaxPageLeft -= ($numMaxPageRight - $totalPages); 
     $numMaxPageRight = $totalPages; 
    } 
} 

//loop to show all desired pages 
for ($i=$numMaxPageLeft; $i<=$numMaxPageRight; $i++) { 
    echo $i == $currentPage ? $i : "<a href='index.php?page=".$i."'>".$i."</a> "; 
}