آموزش صفحه بندی یا pagination ساده با php و mysql

1396/8/28 علیرضا حاتمی نیا 512
 

 

علاقه مندان به آموزش های ویژه سلام. با یک آموزش برنامه نویسی دیگر تحت عنوان آموزش صفحه بندی ساده با php در خدمت شما هستم. در این آموزش سعی بر آن شده تا نحوه صفحه بندی در php را به صورت خیلی مبتدی و آسان توضیح دهم تا در تفهمیم آموزش مشکلی نداشته باشید.
صفحه بندی در php چگونه انجام می شود ؟
یک وبسایت خبری ، فروشگاهی و محتوا محور را در نظر بگیرید. هنگامی که یک لیست بزرگ از اقلام (نتایج جستجو، لیست محصولات، مقالات وبلاگ و غیره) را در صفحه جهت نمایش در اختیار داشته باشید خیلی بهتر است که آن ها را به صورت صفحه بندی به کاربران نمایش دهید تا از طریق یک صفحه به صفحه دیگر و به وسیله لینک های هدایت شونده هدایت شوند.

how create pagination php mysql

پیش نیازهای مورد نیاز برای این آموزش

جهت یادگیری این آموزش لازم است تا با مفاهیم زیر در حد کمی آشنایی داشته باشید. البته این روند کار در زبان های دیگر بسته به نوع دستورات و امکانات زبان نیز قابل استفاده است.

شروع کدنویسی جهت ساخت صفحه بندی در php

همانطور که مشاهده کردید برای نمایش هر دسته از مطالب در یک صفحه باید تعداد محدودی از شروع یک سطر در جدول پایگاه داده را انتخاب و به کاربر نمایش دهید. برای این کار باید با دستور LIMIT در mysql آشنایی داشته باشید. فرض کنید از سطر اول یعنی سطر 0 تا 5 سطر بعدی را select یا انتخاب می کنیم. این دستور به شکل زیر می باشد:
SELECT * FROM content LIMIT 0,5
و همچنین از سطر 5 تا 5 سطر بعدی نیز به این صورت نوشته میشود
SELECT * FROM content LIMIT 4,5

به این نکته توجه داشته باشید که شروع اولین سطر در mysql از عدد 0 حساب می شود. یعنی اولین سطر index برابر با 0 و دومین سطر index برابر 1 و الی آخر دارد. 

بسیار خب. در صفحه html جدولی با کلاس page جهت نمایش محتوا یا همان سطر های جدول داریم و همچنین جدول دیگری با کلاس pagination جهت نمایش لینک های هدایتگر به صفجه هات قبلی و بعدی داریم.
کدهای HTML
<body>
<h1>Simple Pagination with PHP</h1>
<table class="page">
 <tr>
  <td> ACKRQD </td>
  <td> acknowledgment required </td>
 </tr>
 <tr>
  <td> API </td>
  <td> application programming interface </td>
 </tr>
 <tr>
  <td> APPC </td>
  <td> Advanced Program-to-Program Communications </td>
 </tr>
 <tr>
  <td> ASCII </td>
  <td> American Standard Code for Information Interchange </td>
 </tr>
</table>
<table class="pagination">
 <tr>
  <td> 1 </td>
  <td> 2 </td>
  <td class="active"> 3 </td>
  <td> 4 </td>
  <td> 5 </td>
 </tr>
</table>
</body>
کدهای CSS
h1 {
  text-align: center;
}
.page {
  width: 900px;
  margin: 0 auto;
}
.page td {
  border-bottom: solid 1px #b3b5b7;
  margin: 0;
  padding: 10px;
        }
.pagination {
  margin: 10px auto;
  width: 300px;
  text-align: center;
}
.pagination td {
  border: solid 1px #1081d0;
}
.pagination td a {
  color: #1081d0;
}
.active {
  background: #1081d0;
  color: #ffffff;
}

حال در پایگاه داده content جدول book را با 15 سطر حاوی 3 فیلد و 15 سطر اینگونه ایجاد می کنیم:

CREATE TABLE IF NOT EXISTS `book` (
   `id` int(11) NOT NULL auto_increment,
   `abbreviation` varchar(255) NOT NULL,
   `description` text NOT NULL,
   PRIMARY KEY  (`id`)
 )

و سپس اطلاعات 15 سطر این جدول را insert می کنیم

 
INSERT INTO `book` (`id`, `abbreviation`, `description`)
 VALUES (NULL, 'acr','acknowledgment required'),
 (NULL, 'API', 'application programming interface'),
 (NULL, 'APPC', 'Advanced Program to rogram Communications'),
 (NULL, 'ASCII', 'American Standard Code for Information Interchange'),
 (NULL, 'BBI', 'begin bracket indicator'),
 (NULL, 'BBIUI', 'begin basic information unit indicator'),
 (NULL, 'BCI', 'begin chain indicator'),
 (NULL, 'BETB', 'between-brackets'),
 (NULL, 'BICB', 'bind information control block'),
 (NULL, 'DAF', 'destination address field'),
 (NULL, 'CDI', 'change direction indicator'),
 (NULL, 'CEI', 'chain ending indicator'),
 (NULL, 'CICB', 'connection information control block'),
 (NULL, 'CPI-C', 'Common Programming Interface for Communications'),
 (NULL, 'CRC', 'cyclical redundancy check');
سپس به پایگاه داده content توسط php متصل می شویم:
$con = mysqli_connect("localhost","root","","content")
or die("error to connet mysql");
جدول اول را که حاوی محتویات جدول content است را توسط php اییجاد می کنیم :
<?php
$per_page = 5;
if(isset($_GET['page'])) {
    $page = $_GET['page'];
} else {
    $page = 1;
}
$start = $per_page * $page;
$start = $start - $per_page;
$query = "SELECT * FROM book LIMIT $start , $per_page";
$result = mysqli_query($con,$query);
while ($row = mysqli_fetch_assoc($result)) {
        echo "
            <tr>
                <td>
                    ".$row['id']."
                </td>
                <td>
                    ".$row['Abbreviation']."
                </td>
                <td>
                    ".$row['Description']."
                </td>
            ";


    }
?>
همچنین لینک های هدایتگر به صفحات را نیز اینگونه می نویسیم
<?php
$query2 = "SELECT COUNT(*) as total FROM book";
$result2 = mysqli_query($con,$query2);
$total = mysqli_fetch_assoc($result2);
$total_page = (ceil($total['total'] / $per_page));

            $prev = $page-1;
            if($page <=1) {
                echo "
                <td> < prev </td>
            ";
            }else {
                echo "
                <td><a href=\"?page=".$prev."\"> < prev </a></td>
            ";
            }

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

                if($i==$page) {
                    echo "
                    <td class='active'>$i</td>
                ";
                }
                else {
                    echo "
                    <td><a href=\"?page=".$i."\">".$i."</a></td>
                ";
                }
            }
            $next = $page+1;
            if($page>=$total_page) {
                echo "
                 <td>next ></td>
            ";
            } else {
                echo "
                 <td><a href=\"?page=$next\">next ></a></td>
            ";
            }
?>