Hỏi về PHP

Đỗ Việt
(doviet)

Thành viên danh dự
Chẹp chẹp, khi có 1 bảng dữ liệu, muốn lôi ra và sắp xếp theo từng trang, mỗi trang 1 lượng dòng nhất định thôi (giống như ở diễn đàn ý) thì làm thế nào nhỉ ? có phải là dùng "SELECT * FROM tên bảng LIMIT..." không nhỉ ?
 
Em ko rành lắm nhưng hình như là LIMIT -> ORDER BY (Ko chắc lắm)...
 
LIMIT ddu'ng ru`i. DDa^'y la` la^'y 1 lu+o+.ng records nha^'t ddi.nh tu+` mySQL DB. Co`n thu+.c ra vo+'i ba?ng nho? (khoa?ng chu.c do`ng) thi` cha(?ng ca^`n LIMIT cu~ng dd.c, cu+' SELECT he^'t va`o 1 array, sau ddo' la^'y bao nhie^u record tu+` array ra la` vie^.c cu?a programmer. LIMIT chi? la` dde^? tie^'t kie^.m bo^. nho+' & ta(ng to^'c xu+? ly' thui.
 
Nguyễn Việt Anh [A] đã viết:
Em ko rành lắm nhưng hình như là LIMIT -> ORDER BY (Ko chắc lắm)...
Hì hì, ORDER BY là để sắp xếp theo trật tự mà em ;)

Đặng Trần Hiếu đã viết:
LIMIT ddu'ng ru`i. DDa^'y la` la^'y 1 lu+o+.ng records nha^'t ddi.nh tu+` mySQL DB. Co`n thu+.c ra vo+'i ba?ng nho? (khoa?ng chu.c do`ng) thi` cha(?ng ca^`n LIMIT cu~ng dd.c, cu+' SELECT he^'t va`o 1 array, sau ddo' la^'y bao nhie^u record tu+` array ra la` vie^.c cu?a programmer. LIMIT chi? la` dde^? tie^'t kie^.m bo^. nho+' & ta(ng to^'c xu+? ly' thui.
Ok, anh cũng đã thử "SELECT... LIMIT 1,40" để xem dữ liệu từ 1 đến 40. Giờ làm sao để kết hợp biến $_GET['số trang'] vào, để nó làm trang 2 tương ứng từ 41 đến 80, trang 3 từ 81 đến 120... ?
 
DDoa.n ni` la^'y tru+.c tie^'p tu+` OGuest cu?a em ra, tham kha?o:
PHP:
$p = (int)$_GET['p'];
   $first = $p*10-10;
   
   /* If the current page is not the last page and there are entries in the guestbook... */
			if (($p != $num_pages) && ($num_pages != 0))
			{
				$result = mysql_query("SELECT * FROM og_gb ORDER BY id DESC LIMIT $first,10");	/* Fetch 10 entries */
			}
			else	/* If the current page is the last page or there is no entries in the guestbook... */
			{
				$result = mysql_query("SELECT * FROM og_gb ORDER BY id DESC LIMIT $first,-1");	/* Fetch all entries left */
				
				if ($p == 1)	/* If this is the first page... */
				{
     if (!mysql_num_rows($result)) /* If there is no entries available... */
     {
      require("template/{$template[0]}/no_entry.php");
     }
    }
   }
 
Ở đây, $num_pages là cái gì thế Hiếu ? là tổng số trang à ?
PHP:
if (($p != $num_pages) && ($num_pages != 0))
---> Số trang mình chọn khác tổng số trang và khác 0 thì:
PHP:
... LIMIT $first,10
---> Chỗ này anh không hiểu, vì nếu {LIMIT $first,10} thì trường hợp đầu tiên ($p==1) là ok rồi, thế từ ($p==2) trở lên, nó xử lí thế nào thế ? có cái số "10" giới hạn ở cuối là sao ?? :-/

Rồi tiếp đó:
PHP:
... LIMIT $first,-1
---> Cũng không hiểu luôn, sao lại có "-1" ở đây ? :)

Và cuối cùng:
PHP:
$p = (int)$_GET['p']
Cái (int) là để làm gì ? để chỉ nhận integer hả ??

Cảm ơn Hiếu nhé :)
 
- $num_pages = tổng số trang, có thể dùng select count(*) trước rồi từ đó tính ra nó.

- $p ( page ) lấy từ http://...../gb.php?p=1, sau đó $first = $p*10-10 rồi mà.

- LIMIT $first,-1 ( trang cuối cùng chắc gì đã có 10 entries, xem comment )
 
He.he., ddi ngu? 2h, da^.y ba'c Duy tra? lo+`i he^'t ru`i co`n dda^u. Thui, tra? lo+`i no^'t ma^'y ca^u anh Duy bo? so't va^.y.
---> Chỗ này anh không hiểu, vì nếu {LIMIT $first,10} thì trường hợp đầu tiên ($p==1) là ok rồi, thế từ ($p==2) trở lên, nó xử lí thế nào thế ? có cái số "10" giới hạn ở cuối là sao ??
Chu' y' la` $first chu+' ko pha?i $p. $first=$p*10-10 ---> ne^'u $p=1 --> $first=0, $p=2 --> $first=10,.... tu+'c la` hie^?n thi. 10 entries/trang.
Cái (int) là để làm gì ? để chỉ nhận integer hả ??
DDe^? chi? nha^.n int. (Vi` tra'nh tru+o+`ng ho+.p no' go~ tru+.c tie^'p $_GET['p'] va`o URL ---> chu+o+ng tri`nh se~ xu+? ly' sai ne^'u ko co' (int), trong 1 so^' tru+o+`ng ho+.p ne^'u ko co' int se~ da^~n dde^'n vie^.c hackers ta^'n co^ng = SQL injection).
 
1. $p thì tất nhiên là ai cũng thấy rõ rồi mà anh :)
2. $num_pages có phải là lấy tổng số bài viết rồi chia cho số bài mình quy định trên 1 trang không nhỉ ?
3. Em chẳng thấy cái {LIMIT $first,-1} dính dáng gì đến việc trang đó có đủ 10 entries hay không hả anh?? :-/ Cái chính là em tưởng {LIMIT a,b} thì "a" là giới hạn đầu, "b" là giới hạn cuối, nhưng xem ra nó không chỉ đơn thuần là thế! /:) Anh nói xem comment nào ạ ??

Sao khó hiểu thế :-/
 
Ah!! trời, mình ngốc quá! cái số sau là số entries được hiển thị :)) Anh lại nghĩ nó là giới hạn đầu và cuối, buồn cười thật! :D :D

Về cái $first thì anh đâu có thắc mắc gì :)

Còn cái chỗ {LIMIT $first,-1} thì "-1" ở đây là sao ? anh Duy nói đúng rồi hả ??
 
Còn cái chỗ {LIMIT $first,-1} thì "-1" ở đây là sao ? anh Duy nói đúng rồi hả ??
-1 có nghĩa là tất cả các records còn lại.
2. $num_pages có phải là lấy tổng số bài viết rồi chia cho số bài mình quy định trên 1 trang không nhỉ ?
Làm tròn lên (Tổng số bài / số bài trên 1 trang)
 
Cảm ơn Hiếu, phần ấy giờ anh hiểu rồi! :)

Còn giờ hỏi tiếp mọi người: Để liệt kê số trang, ngăn cách bởi dấu phẩy là ok rồi, nhưng làm sao để làm cho nó hiển thị dấu 3 chấm khi có quá nhiều trang ?
 
DDoa.n ni` dd.c su+?a ddo^?i tu+` OGuest.
PHP:
<?php
 print("<div id=\"content\"><strong>".$lang["jump"]."</strong>\n");
 for ($i=1;$i<=$pd;$i++) /* $pd = pages displayed */
 {
  print("<a href=\"index.php?p=$i\">$i,");
  if ($i==$pd) {
   print("...\n");
  } else { print("\n");
 }
 print("</div>");
?>
 
Chỉnh sửa lần cuối:
1. Như cái đoạn này thì ngay cả ở sau số trang cuối cùng cũng có dấu phẩy hả em ?
2. Mà chỗ này anh chưa hiểu:
PHP:
if ($i==$epp) { 
   print("...\n");
 
Hờ, sao lại có 3 chấm ở đấy ? nếu $i==$pd rồi thì thôi chứ ?? ví dụ có 10 trang tất cả, thì đến trang 10 là stop, sao còn phẩy rồi 3 chấm nữa ? :-/
 
Chỉnh sửa lần cuối:
$pd o+? tre^n (vu+` su+?a la.i) no' ko pha?i la` $num_pages, 2 ca'i kha'c nhau hoa`n toa`n, vi' du. $num_pages co' the^? la` 20 trang nhu+ng anh muo^'n ne^'u tre^n 10 trang thi` se~ hie^?n thi ...
 
Modify la.i la^`n nu+~a ni`:
PHP:
<?php 
 print("<div id=\"content\"><strong>".$lang["jump"]."</strong>\n"); 
 if ((int)$_GET['p'] <=6) { $i=1; }
 else { $i=(int)$_GET['p'] - 5; }
 for ($i;$i<=(int)$_GET['p']+5;$i++)
 { 
  print("<a href=\"index.php?p=$i\">$i,"); 
  if (($i==(int)$_GET['p']+5) && ($i<$num_pages)) { 
   print("...\n"); 
  } else { print("\n"); 
 } 
 print("</div>"); 
?>
DDoa.n ni` chu+a test. Nhu+ng dda.i loa.i no' la` nhu+ the^'. He.he.
 
Chỉnh sửa lần cuối:
Ơ từ từ, thế $pd (pages displayed) là thế nào ??
 
Chỉnh sửa lần cuối:
He.he., xem la.i ddoa.n code dda~ su+?a ddo^?i la^`n 2 ddi, de^~ hie^?u ho+n dda^'y.
 
Back
Bên trên