10/10/2018, 09:36

làm sao để phân trang trong php

mình viết 1 script guestbook, mình muốn fân trang các record như 5 record thì vào 1 trang mà kô biết làm thê nào, bạn nào giúp mình với, mình cảm ơn rất nhiều
Bim viết 11:42 ngày 10/10/2018
Hix, code cụ thể thì tui không có nhưng cách thực hiện thì như thế này:

Đầu tiên nguyên tắc của cái này là dựa vào LIMIT mẫu tin đầu, số mẫu tin tiếp theo

Ví dụ:

SELECT * FROM guestbook ORDER BY time DESC LIMIT 0, 5

Nó sẽ lấy mẫu tin đầu cho đến cộng thêm 5 mẫu tin tiếp theo.

Với nguyên tắc là thế bạn có thể dễ dàng select lần lượt các mẫu tin dựa theo request

Dùng hàm $_GET['trang']; để lấy yêu cầu trên thành address. Tiếp theo, có một công thức đơn giản để tính vị trí của mẩu tin đầu tiên:

if (!$trang)
$trang=1; // trường hợp biến $trang chưa được set

$rpp='5'; // số mẫu tin mỗi trang
$first = $trang*$rpp - $rpp;

Ví dụ ?trang=1 => mẫu tin đầu là 0
?trang=2 => mẫu tin đầu là 5
?trang=3 => mẫu tin đầu là 10

==>> câu lệnh SQL là:

SELECT * FROM guestbook ORDER BY time DESC LIMIT $first, $rpp

Đó là xong việc lấy dữ liệu. Còn việc thứ 2 là echo ra trang thì cũng đơn giản là lấy tổng mẩu tin chia cho số mẩu tin mỗi trang làm tròn, for một vòng thì ra số trang thôi.

Trên là cách đơn giản nhất, chân phương, ai mới tập tành thì nên đọc.

Sau này thì phát triển thêm hiển thị tối đa $n trang, thêm nút next, pre...
chanhyeu viết 11:42 ngày 10/10/2018
<?php

// Kết nối MySQL
include 'db_connect.php';

// Nếu đã có sẵn số thứ tự của trang thì giữ nguyên (ở đây tôi dùng biến $page)
// nếu chưa có, đặt mặc định là 1!

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

// Chọn số kết quả trả về trong mỗi trang mặc định là 10
$max_results = 10;

// Tính số thứ tự giá trị trả về của đầu trang hiện tại
$from = (($page * $max_results) - $max_results);

// Chạy 1 MySQL query để hiện thị kết quả trên trang hiện tại

$sql = mysql_query("SELECT * FROM pages LIMIT $from, $max_results");

while($row = mysql_fetch_array($sql)){
// Bạn có thể sửa đổi cách hiển thị kết quả trả về tại đây.
echo $row['title']."<br />";
}

// Tính tổng kết quả trong toàn DB:
$total_results = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM pages"),0);

// Tính tổng số trang. Làm tròn lên sử dụng ceil()
$total_pages = ceil($total_results / $max_results);

// Tạo liên kết đến các trang đã đánh số thứ tự
echo "<center>Chọn một trang<br />";

// Tạo liên kết đến trang trước trang đang xem
if($page > 1){
$prev = ($page - 1);
echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$prev\"><<Trang trước</a>&nbsp;";
}

for($i = 1; $i <= $total_pages; $i++){
if(($page) == $i){
echo "$i&nbsp;";
} else {
echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$i\">$i</a>&nbsp;";
}
}

// Tạo liên kết đến trang tiếp theo
if($page < $total_pages){
$next = ($page + 1);
echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$next\">Trang tiếp theo>></a>";
}
echo "</center>";
?>
MguyenDinh viết 11:48 ngày 10/10/2018
doan nay do minh viet ngan hon ne

//////////////////////////////////////////////////////

if (!$_GET['p']) {
$p=1;
$min=($p-1)*10;
$max=$min+10;
}
else {
$p=$_GET['p'];

$min=($p-1)*10;
$max=10;}

$sql="select * from thuvienanh
where chuyende='Ch&#237;nh tr***7883;'
order by stt desc lim
it $min,$max ";
///////////////////////////////////
them nut next va back

if ($sl>=10) {
$p1=$p+1;
echo"<td align='right'><font size='5' color='#990000'><a href='liet_ke_phongtruyenthong.php?p=$p1'>Next</font></td>";
}
if ($p>1) {
$p=$p-1;
echo"<td align='right'><font size='5'color='#990000'><a href='liet_ke_phongtruyenthong.php?p=$p'>Back</font></td>";
}
anhne viết 11:51 ngày 10/10/2018
mình làm được rồi, các bạn ở DDTH này thật nhiệt tình và tốt bụng cho mình cảm ơn rất nhiều!.

ps: code cua anh chanhyeu thật tuyệt vời :P
anhne viết 11:39 ngày 10/10/2018
chanhyeu có thể giải thích chi tiết hơn về 2 dòng lệnh này không?

// Tính số thứ tự giá trị trả về của đầu trang hiện tại
$from = (($page * $max_results) - $max_results);

// Tính tổng số trang. Làm tròn lên sử dụng ceil()
$total_pages = ceil($total_results / $max_results);

cảm ơn nhiều
Bim viết 11:50 ngày 10/10/2018
// Tính số thứ tự giá trị trả về của đầu trang hiện tại
$from = (($page * $max_results) - $max_results);


Tại vì câu lệnh SQL có đoạn: LIMIT $from, $max_result

Mà như tui đã nói ở bài thứ nhì đó, giá trị $max_result là do người dùng định ra, còn giá trị $from thì lại được thay đổi theo trang.

Ví dụ: Ráp zô công thức nha
$page = 1;
$max_result = 5;
=> $from = 0

$page = 2;
$max_result = 5;
=> $from = 5
...

// Tính tổng số trang. Làm tròn lên sử dụng ceil()
$total_pages = ceil($total_results / $max_results);

Còn cái này thì sờ sờ ra đấy thôi. Tính tổng số trang bằng tổng số mẫu tin chia số mẫu tin hiển thị ở một trang. Nếu chia không thì nó ra mấy số lẻ tẻ nên phải dùng hàm ceil để làm tròn lại.
anhne viết 11:45 ngày 10/10/2018
oh...vậy phiền bạn có thể giải thích thêm cho mình câu query này nha

: LIMIT $from, $max_results

trước giò mình chỉ có LIMIT 1 LIMIT 2 chứ kô LIMIT 1,2 bao giờ nên vẫn chưa hiểu
Bim viết 11:40 ngày 10/10/2018
LIMIT 1, LIMIT 2 là lấy 1, hay 2 record thôi.

Còn LIMIT 1,2 thì mình đã giải thích ngay từ bài đầu đó thôi.

LIMIT $n, $m

$n là record đầu tiên (trong cái list xuất ra á)
$m là số record cộng thêm vào cái đầu tiên.

Ví dụ 1: LIMIT 0, 10

Là select trong CSDL từ record thứ nhất đến record thứ 10 (10+0=10)

Ví dụ 2: LIMIT 10, 10

Là select trong CSDL từ record thứ 10 đến record thứ 20 (10+10=20)
bigthac viết 11:51 ngày 10/10/2018
vậy ai có function, hay class dùng để phân trang kô cho mình xin với...
Bài liên quan
0