10/10/2018, 09:30

Tách dữ liệu thành nhiều trang khác nhau

Mình không biết là cái tiêu đề này nó có củ chuối quá hay không.
Mình có 1 bản ghi có quá nhiều trường, khi cho hiện kết quả trên trang php mình đã limit từ 0 đến 10 bản ghi nhưng mình muốn là làm sao để code php tự động duyệt số lượng bản ghi rồi chia ra thành nhiều trang khác nhau. Hoặc như trên blog của yahoo có next và previus ấy. Thank mọi người đã đọc. Nếu chủ để trùng rồi thì mọi người chỉ dẫn qua topic trùng cái.
kuongnp viết 11:42 ngày 10/10/2018
Được gửi bởi luuanhquyen
Mình không biết là cái tiêu đề này nó có củ chuối quá hay không.
Mình có 1 bản ghi có quá nhiều trường, khi cho hiện kết quả trên trang php mình đã limit từ 0 đến 10 bản ghi nhưng mình muốn là làm sao để code php tự động duyệt số lượng bản ghi rồi chia ra thành nhiều trang khác nhau. Hoặc như trên blog của yahoo có next và previus ấy. Thank mọi người đã đọc. Nếu chủ để trùng rồi thì mọi người chỉ dẫn qua topic trùng cái.
Cái này thì thằng nào mới chơi php đều gặp phải, nói nó dễ cũng không đúng,khó cũng chẳng sai,vì ai lần đầu cũng đều di xin code rôi thì xem người ta viết như nào.Tôi cũng xem trong sách
Tuy nhiên nó cơ bản là như thế này, bạn hãy sử dụng câu lệnh SQL sau:
"SELECT * FROM x_table LIMIT $start,$limit";

$limit là số lượng bản ghi bạn muốn hiển thị trên một trang.
hix, tui quên mất rồi,cái này copy của anh khác:

Tui đã đưa bí kiếp cho luyện rồi mà chưa xuống núi nửa hả U, vậy để tui giúp một tay nhé
//---------db.sql---------
DROP TABLE IF EXISTS guestbook;
CREATE TABLE guestbook (
name varchar(50),
date varchar(40),
email varchar(50),
comment longtext,
id int(4) DEFAULT '0' NOT NULL auto_increment,
PRIMARY KEY (id)
);

//------------index.php------------
<html>
<head>
<title>MySQL Guestbook</title>
</head>
<BODY text="#000000">
<?
$username = "sa"; //username for database here
$password = ""; //password for database here
$db_name = "test"; //name of your database here
$limit = 2; //entries displayed per page
//connect
mysql_pconnect( "localhost", "$username", "$password")
or die( "Unable to connect to SQL server");
mysql_select_db( "$db_name") or die( "Unable to select database");
$numresults=mysql_query("SELECT name, date, email, comment FROM guestbook");
$numrows=mysql_num_rows($numresults)
or die ("query 1 failed");
if (empty($offset)) {
$offset=0;
}
$query = "SELECT name, date, email, comment FROM guestbook order by date DESC limit $offset,$limit";
$result = mysql_query ($query)
or die ("query 2 failed");
while ($row = mysql_fetch_row ($result))
{
for ($i = 0; $i < mysql_num_fields ($result); $i++)
{
if ($i > 0)
print ("<br>");

if ($i == 0){
print "<b>Name: </b>";
}
else if ($i == 1){
print "<b>Date: </b>";
}
else if ($i == 2){
print "<b>Email: </b>";
}
else{
print "<b>Comment:</b><br>";
}


print ($row[$i]);


}
print "<br><br><center><img src='black.gif' width=590 height=1 border=0></center>";
print ("<P>");
}

if ($offset >= 3) {
$prevoffset = $offset - $limit;
print "<a href=\"index.php?offset=$prevoffset\">PREV</a>&nbsp;\n";
}
$pages=intval($numrows/$limit);
if ($pages < ($numrows/$limit)){
$pages=($pages + 1);
}
for ($i = 1; $i <= $pages; $i++) {
$newoffset = $limit*($i-1);
if ($newoffset == $offset) {
print "$i&nbsp;\n";
} else {
print "<a href=\"index.php?offset=$newoffset\">$i</a>&nbsp;\n";
}
}
//show next if not last
if (! ( ($offset/$limit) == ($pages - 1) ) && ($pages != 1) ) {
$newoffset = $offset+$limit;
print "<a href=\"index.php?offset=$newoffset\">NEXT</a><p>\n";
}
?>
</BODY>
</HTML>
Đọc qua cũng được
ngoc_viet08 viết 11:32 ngày 10/10/2018
cái này tớ cũng mới làm xong. cũng ko khó. quan trọng hiểu cách giải thuật. chứ đưa code lên e đã ngu lại càng dốt hơn
tenlaanh viết 11:35 ngày 10/10/2018
mình cũng đang mầy mò làm cái này, cám ơn pro nhé thử xem sao
kiem_bo viết 11:44 ngày 10/10/2018
bạn hãy tìm hiểu phân trang
ngoc_viet08 viết 11:33 ngày 10/10/2018
nói như kiem_bo thì nói làm gì . trên bài đầu người ta cũng hỏi rồi ...
phân trang hiểu đơn giản là :
+query để tính tổng số tin sẽ duyệt
+tính tổng số trang sẽ có , khi đã biết số tin/1 trang
+dùng $_GET["page" để lấy số thứ tự trang muốn hiển thị từ URL vd: site.php?page=2
+query để lấy các tin thuộc trang đó .
chú ý : thông thường dữ liệu nhập vào theo thứ tự 1-2-3 . thì khi lấy ra sẽ là 3-2-1 . vì thường người ta sẽ duyệt tin mới trước .
cho nên xây dựng hàm query thì phải query theo cấu trúc sau .
SELECT* FROM `table`
WHERE `id`<=$id_cuoi
ORDER BY `id` DESC
LIMIT 0,tin/page

vì các tin mới sẽ nằm cuối trong table . cho nên ta sẽ load ngược từ tin cuối của page đó ( tức tin mới nhất trong các tin thuộc page đó ) đến tin đầu của page .
hàm ORDER có tác dụng sắp xếp . thêm DESC để sắp Giảm dần . tức các tin cuối ( mới ) sẽ nằm đầu .
LIMIT sẽ giới hạn 10 tin thuộc page đó .

vd : hàm mình xài là :
SELECT * FROM `hd_moi`
WHERE `stt`<=$stt_cuoi
ORDER BY `stt` DESC
LIMIT 0,10

+hiển thị tin
+dựng nút bấm để nhảy trang . gồm có nút next , previus và các nút từng trang .
VD của mình :
$page=$_GET["page"];
if ($page>1)
{
$page_last=$page-1;
echo "<a href=\"news.php?page=$page_last\">&lt;&lt;</a> ";
}
else
{
echo "<a href=\"news.php?page=1\">&lt;&lt;</a> ";
}
dễ hiểu mà . khi page > 1 . có nghĩa là khi nhấn nút này nó còn quay về trang nhỏ hơn được thì mới hiển thị nút này .
còn khi page=1 thì 1 là ko cho nhấn , 2 là nhấn nhưng vẫn là page 1 như của mình làm .
còn các link đến các page thì mình làm :
$a=1;
while ($a<=$so_trang)
{
if ($a==$page)
{
echo "<a href=\"news.php?page=$a\"><b>$a</b></a> ";
}
else
{
echo "<a href=\"news.php?page=$a\">$a</a> ";
}
$a+=1;
}
nó sẽ lần lượt tạo ra các link đến page theo $a .
các bước cơ bản thế là xong đấy .bạn cứ mò tiếp .
dinhanhency viết 11:44 ngày 10/10/2018
Viết một hàm riêng tham khảo bài viết trên, dùng Limit để truy vấn được nhanh hơn.
luuanhquyen viết 11:33 ngày 10/10/2018
mình đã đọc nhưng vẫn chưa hiểu, đành làm 1 code riêng ngắn ngủn dễ hiểu vẫn đáp ứng tốt yêu cầu phân trang, mỗi tội hơi củ chuối tí. Sẽ up lên cho mọi người xem sao sau.
toannet viết 11:38 ngày 10/10/2018
Very good !

Hoan nghênh tiinh thần ham học của mấy pác.

Nếu như dân IT mà như mấy pác thì mình tin một ngày nào đó không xa, Việt Nam sẽ không thua kém mấy nước khác ...

Success ... ^_^
ngoc_viet08 viết 11:46 ngày 10/10/2018
bác luuanhquyen nói đúng đó . chỉ có code mình là dễ hiểu nhất mình cố gắng học để viết 100% code cho site mình chứ ko muốn dùng thêm gì khác
Bài liên quan
0