• fans
  • 1036 reader
  • followers
Phân trang với PHP & MySQL
  • Tutorial Details
  • Độ khó: Căn bản
  • Thời gian: 36:20
  • File size: 53 MB
  • Yêu cầu: Căn bản PHP

Phân trang là thủ thuật được sử dụng bởi rất nhiều trang web và là tính năng cũng rất quan trọng. Đặc biệt với những trang web có nhiều nội dung cần hiển thị thì phân trang là phần không thể thiếu. Bạn không thể truy xuất tất cả dữ liệu mình có và hiển thị ra cùng một lúc được, cho nên những trang web hoạt động dựa trên CSDL phải được phân trang để hiển thị kết quả.

Thực tế thì đoạn mã để phân trang rất dễ, nhưng cái khó nhất của đoạn mã này là tìm ra thuật toán để xác định được những biến như: trang hiện tại, trang kế tiếp, trang trước và các đường liên kết cho chữ số. Ở dưới Video tôi có post thêm hình minh họa cho thuật toán này.

Trước khi bắt đầu bạn phải tạo ra một bảng và khoảng hơn chục record để chèn vào CSDL của mình. Kiến thức cơ bản về MySQL và cách chèn record tôi đã có hướng dẫn qua ở video Tạo Mailing list .

Download định dạng .mp4 chất lượng cao :MediaFire, Bổ Sung

Chú ý: Lưu ý bạn là video này còn phần bổ sung khoảng 5 phút, do lần đầu “cà cuống” quá nên quên không giải thích hai vấn đề cơ bản. Bạn nhớ xem thêm Video bổ sung ở dưới.

Video bổ sung

Giải thích 2 khái niệm còn bỏ sót ở video trước. Thành thật xin lỗi các bạn vì sự bất tiện này

Thuật toán sử dụng trong Video
pagination php

Demon Warlock Website facebook twitter user_email

Tôi được sinh ra ở Việt Nam, nhưng hiện tại đang sống và làm việc tại Mỹ. Ngành tôi học không có liên quan gì đến thiết kế web. Nhưng đây là sở thích từ ngày còn là sinh viên du học, do vậy bây giờ dù cho đang đi làm nhưng tôi vẫn thích dùng thời gian rảnh rỗi của mình để học về thiết kế web. Như các bạn, tôi cũng việc mày mò tự học và khám phá.

  • Hoàng Trường

    biến $current mình thấy hơi khó hiểu 1 chút. ai giải thích giúp mình với tại sao lại bằng ($start/$display)+1 nhỉ

  • Huy

    DW cho hỏi:
    ví dụ có 1 trang tin tức, khi mình đọc chi tiết của một tin nào đó thì nó luôn có mục cái tin khác. Mục các tin khác này có phân trang trong đó. Làm sao khi mình click chọn trang khác thì nó hiện thị giống mấy trang tin tức chứ không phải dùng chuột kéo thanh cuộn xuống dưới trang rồi mới thấy các tin tiếp theo.

  • vuong

    anh ơi cái code này làm 1 2 hoặc 3 trang thì còn chạy tốt nếu mà có 100 trang thì nó chạy hết màn hình luôn sao làm cách nào để nó ẩn bớt đi không ……… nó hiện ra như thế này ( 1……….. 5 6 7 …….12…… last )

    • http://www.facebook.com/tranghungtuan Trang Tuan

      mình chưa xem video nhưng mình đang làm theo giải thuật sau: tạo 2 biến, maxindex và minindex:

      if ((current + 2) > totalpage)//Nếu số trang hiển thị lớn hơn số trang hiện tại thì gán bằng totalpage

      maxindex = totalpage;

      else//Ngược lại cho hiển thị thêm 2 trang lớn hơn trang hiện hành

      maxindex = current + 2;

      if ((current – 2) < 1)//Nếu số trang hiển thị nhỏ hơn số trang tối thiểu thì gán bằng 1

      minindex = 1;

      else//Ngược lại cho hiển thị thêm 2 trang nhỏ hơn trang hiện hành

      minindex = current – 2;

      sau đó chạy vòng lặp for với giá trị ban đầu là minindex và giá trị dừng là maxindex
      Với code như thế này thì số trang hiển thị tối đa là 5, và tối thiểu là 4, bạn muốn hiển thị nhiều hơn thì cứ thay số 2 bằng số lớn hơn.

  • http://www.izwebz.com Nguyễn Quang Phượng

    em không biết lỗi chỗ nào mà không hiện csdl ra, mong mọi người giúp đỡ

  • http://www.izwebz.com Nguyễn Quang Phượng

    $display)
    {
    $page = ceil($record/$display);
    }
    else
    {
    $page =1;
    }
    }
    $start = isset($_GET['start']) && (int)$_GET['start'>=0] ? $_GET['start'] :0;
    $sql = “select Ma_Sua,
    CONCAT_WS(‘ ‘,Ten_Sua,Don_Gia)
    AS TenSua
    from sua
    order by TenSua
    LIMIT $start, $display”;
    $result = mysqli_query($connection,$sql) or die(‘Could not select Don_Gia’.mysqli_error($connection));
    while($set = mysqli_fetch_array($result, MYSQL_ASSOC))
    {
    $Ten_Sua = $set['Ten_Sua'];
    $Don_Gia = $set['Don_Gia'];
    echo
    “$Ten_Sua$Don_Gia”;
    }
    ?>

    1)
    $next = $start + $display;
    $prev = $start – $display;
    $current = ($start/$display)+1;

    //hiển thị trong previous
    if($current != 0)
    {
    echo “Previous“;
    }
    //hiển thị số link
    for($i=1;$i<=$page;$i++)
    {
    if($current != $i)
    {
    echo "$i“;
    }
    else
    {
    echo “$i”;
    }
    }
    // and for

    // hiển thị next
    if($current != $page)
    {
    echo “Next“;
    }
    ?>

  • Leon Nguyễn

    Rất cám ơn anh Demon Warlock có một bài viết rất hay và bổ ích.
    Hướng dẫn của anh rất dễ hiểu.

    Em có một vấn đề như sau:
    Vẫn như trong demo. ta có 24 records, $display = 5; vậy ta có 5 trang.
    Giả sữ trang đang xem là trang 4. url sẽ là: http://localhost/phantrang.php?start=15&page=5. Dĩ nhiên là nó hoạt động tốt.

    Nhưng nếu có một người dùng nào đó (như em chẳng hạn) nghịch chỉnh sửa url ví dụ như: http://localhost/phantrang.php?start=15&page=99 .
    Thì có một vấn đề xãy ra đó là cái list phân trang sẽ hiễn thị từ 1 – 99 link trang (chưa tính Previous và Next)

    Vậy có cách nào khắc phục không !?

    • http://www.facebook.com/tranghungtuan Trang Tuan

      khắc phục bằng cách lúc gọi hàm load dữ liệu ra validate xem giá trị count có = 0 không or = null thì ẩn list phân trang đi và xuất ra thông báo chẳng hạn “Dữ liệu không tồn tại !”

  • http://lamketoanthue.vn BUSINSUCCESS

    Có vẻ như chưa đầy đủ nhỉ! Dù sao cũng cảm ơn anh!

  • benjamin

    thanks!!!

  • Hà Sơn Tùng

    sao không có nút like facebook nhỉ?

  • http://tidoshop.co.cc Linh Duy

    Mọi người làm ơn cho mình hỏi tại sao trên localhost phần phân trang mình hiển thị đúng nhưng khi up lên host thì mục bài viết không thể hiện phân trang nhưng mục sản phẩm thì có hiện phân trang?

    Link hình hiển thị phân trang mục bài viết trên localhost
    nr9.upanh.com/b1.s35.d4/5dc1f7178feb400a2c042236adb8b61a_49894329.1.png

    Link hình ko hiển thị phân trang mục bài viết trên host
    nr1.upanh.com/b2.s30.d1/d7601970eeaf364b096d83c8bef39846_49894331.2.png

    Link hình hiển thị phân trang mục sản phẩm trên host
    nr2.upanh.com/b6.s34.d4/6e96c252a73eaad2d8908405fffcd530_49894332.3.png

    Mọi người làm ơn xem giúp mình, xin cảm ơn :(. Link web của mình tidoshop.co.cc

  • Tony Huynh

    cách này hoạt động tốt với table bao nhiêu record vậy bạn, nghe nói với large table mà đùng offset thì rất chậm

  • http://123muaban.com.vn tinhphong007

    Cảm ơn anh vì những bài viết rất hay!

  • Hận Võ

    Cái này nếu dùng:
    if($current<$page)
    {
    echo 'Next‘;
    }
    sẽ hay hơn cho các trường hợp $rows:$page không chẵn.

  • http://baocaosuformentravinh.net16.net kaka

    Thanks, rat bo ich

  • http://chamsocda.khonggianwebviet.com cham soc da

    Hay lắm, thanks anh

  • Alice Pham

    Em đã làm theo hướng dẫn trong clip đã làm thành công. Anh cho em hỏi, em muốn tạo thêm 1 text fileld khi nhập số trang vào đó khi enter thì nó sẽ nhảy đến số trang mà mình đã nhập trên text filed với cái hiển thị số trang trên tổng số trang gióng như hình
    http://no7.upanh.com/b6.s26.d2/ce8a7478073dafb2b48bd6ad84e5c657_46759307.img.png

    • viet

      ah có video nào dạy tạo webchat không ? có thì cho em xin link download với.
      (bằng jquery hoăc php nhé)
      gửi g mail em với : Gmail : itweb.iz@gmail.com

  • tammao

    ac cho e hỏi lúc khi chạy bài này trên web nó hiện cả 2 dòng dữ liệu.Giờ e muốn sửa khi bấm vào nut 1 thì sẽ hiện dòng 1 , khi chuyển sang nút 2 thì sẽ hiện dòng 2.Chứ không nó cứ hiện cả 2 dòng lên ah..Chep2..thank nhiu

  • hùng

    hay quá cám ơn rất nhiều

  • http://tzwebz.zymichost.com nhocyeuhoc

    1. Em chân thành cảm ơn trang web đã mang lại cho em những điều thú vị mà em chưa biết khi còn đang học hỏi…

    2. Em có một vấn đề muốn admin or lãng khách giúp em như sau.

    - Phân trang: 3 trang một

    - Demo như sau: ví dụ: $totalpage = 8.

    if(current=1) 1 | 2 | 3 >> – link: http://…./page_1

    if(current!=1) <> ….link: http://…./page_2

    if(current=8) <>’ nó sẽ hiển thị 3 trang tiếp theo: <>

    * Nếu đang ở trang số 8 khi click vào ‘<<' nó sẽ hiển thị 3 trang trước: <>

    và cuối cùng tất nhiên là khi đang ở trang nào đó nếu ta click vào trang đó sẽ không có hiện tượng request gửi về server…

    3. Chúc website luôn phát triển để có thể giúp cho cộng đồng được tiến bộ…Thanks !

Newbie

Các series nên xem trên izwebz cho newbie

Khi vào izwebz chắc nhiều bạn cho rằng các bài viết trên izwebz đều không có hệ thống gì cả? Thực chất, các bài biết đều đi theo một series của riêng nó, ví dụ như PHP, HTML & CSS, PSD2HTML, Photoshop, illustrator,… Trong bài viết này, mình sẽ tổng hợp lại các series bài viết cần thiết cho một newbie.

Izwebz facebook group

Social connect

Recent Comments

Archives