Pagination dengan php dan mysql

Dalam tutorial kali ini kita akan belajar tentang pagination atau dikenal juga dengan paging yaitu membagi data yang ditampilkan menjadi beberapa halaman.

Kenapa kita perlu menggunakan paging ?

Mengambil keseluruhan data dari database secara sekaligus dan menampilkannya dalam satu halaman yang panjang tentu tidaklah bagus jika data sudah terlalu banyak.

Akan lebih baik dan lebih bijak jika kita membaginya kedalam beberapa halaman.

Membuat paging sebenarnya bukan hal yang susah jika kita memahami logika dari paging itu sendiri.

Cara membuat paging

Cara membuat paging sebenarnya sederhana, logikanya adalah saat kita ambil data dari database tentukan kita mau ambil mulai data keberapa dan berapa banyak yang diambil.

Pada MySQL kita bisa menggunakan perintah LIMIT untuk membatasi berapa banyak maksimal data yang diambil dan perintah OFFSET untuk menentukan mulai dari mana data yang akan kita ambil.

Contohnya misal kita mempunyai table dengan nama paging yang mempunyai 15 data didalamnya dan kita hanya ingin menampilkan 5 data mulai dari data pertama, kita bisa menggunakan query berikut :


SELECT * FROM paging LIMIT 5 OFFSET 0

Kemudian jika kita ingin menampilkan data yang ke 6 sampe ke 10 querynya seperti dibawah ini


SELECT * FROM paging LIMIT 5 OFFSET 5

atau bisa juga menuliskannya dengan syntax yang lebih singkat seperti dibawah, dimana argument setelah perintah LIMIT adalah offset kemudian koma lalu limitnya.


SELECT * FROM paging LIMIT 5, 5 

Lalu untuk menampilkan data yang ke 11 sampai 15 kita menggunakan query seperti ini


SELECT * FROM paging LIMIT 10, 5

Sebelum membuat paging kita akan buat database terlebih dahulu misal nama databasenya adalah pagingdb dan nama tablenya adalah paging.

Lalu kolom yang terdapat dalam table paging yaitu kolom id sebagai primary key dan auto increment serta kolom content, kemudian kita isi 15 data.

Untuk mempermudah membuat database, sobat buat file dengan nama install.php kemudian isikan seperti dibawah ini (dsn, user dan password sesuaikan dengan punya sobat) :


<?php

$dsn  = 'mysql:host=localhost';
$user = 'root';
$pass = '';

$sql  = "CREATE DATABASE pagingdb;

		USE pagingdb;

		CREATE TABLE paging(
			id INT(11) AUTO_INCREMENT PRIMARY KEY,
			content varchar(100) NOT NULL
		);

		INSERT INTO paging(content) VALUES ('Content 1');
		INSERT INTO paging(content) VALUES ('Content 2');
		INSERT INTO paging(content) VALUES ('Content 3');
		INSERT INTO paging(content) VALUES ('Content 4');
		INSERT INTO paging(content) VALUES ('Content 5');
		INSERT INTO paging(content) VALUES ('Content 6');
		INSERT INTO paging(content) VALUES ('Content 7');
		INSERT INTO paging(content) VALUES ('Content 8');
		INSERT INTO paging(content) VALUES ('Content 9');
		INSERT INTO paging(content) VALUES ('Content 10');
		INSERT INTO paging(content) VALUES ('Content 11');
		INSERT INTO paging(content) VALUES ('Content 12');
		INSERT INTO paging(content) VALUES ('Content 13');
		INSERT INTO paging(content) VALUES ('Content 14');
		INSERT INTO paging(content) VALUES ('Content 15');";

try
{    
    $pdo = new PDO($dsn, $user, $pass);
    
	$pdo->exec($sql);
   
    echo 'Successfully created!';
    
}
catch(PDOException $e)
{    
    die('Failed : ' . $e->getMessage());   
}

Kemudian jalankan script diatas melalui browser sobat, jika berhasil tampilannya seperti dibawah ini

pagination-dengan-php-dan-mysql-install.png

Tampilan database dan tablenya

pagination-dengan-php-dan-mysql-database.png

Setelah membuat database, sobat buat file dengan nama paging.php kemudian isi scriptnya seperti dibawah (dsn, user dan password sesuaikan dengan punya sobat) :


<?php

$dsn  = 'mysql:host=localhost;port=3306;dbname=pagingdb';
$user = 'root';
$pass = '';

try
{
    $pdo = new PDO($dsn, $user, $pass);
}
catch(PDOException $e)
{
    die('Error : ' . $e->getMessage());
}

$currentpage = 1;


if(isset($_GET['page']) && !empty($_GET['page'])){
	$currentpage = (int) $_GET['page'];
}

$perpage = 5;

$statement = $pdo->prepare('SELECT COUNT(*) FROM paging');
$statement->execute();

$rowcount = $statement->fetch();
$rowcount = (int) $rowcount[0];

$totalpage = ceil($rowcount / $perpage); 

$first = ($currentpage - 1) * $perpage;
$limit = $perpage;

$statement = $pdo->prepare("SELECT * FROM paging LIMIT ?,?"); 
$statement->bindValue(1, $first, PDO::PARAM_INT);
$statement->bindValue(2, $limit, PDO::PARAM_INT);
$statement->execute();

$paging = $statement->fetchAll();


?>

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="description" content="">
        <meta name="author" content="">
	    <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Paging</title>
        <style type="text/css">
		
			body{
				width:600px;
				margin:0 auto;
			}
        
            table{
                border-collapse: collapse;
                border:1px solid #E1E1E1;
            }
            
            th, td{
                padding:5px 10px;
                border:1px solid #E1E1E1;
            }
			
			ul.pager{
				display:inline-block;
				margin:0;
				padding:0;
			}

			ul.pager li{
				display:inline;
			}

			ul.pager li a{
				float:left;
				margin:2px;
				padding:8px 16px;
				text-decoration:none;
				border: 1px solid #E1E1E1; 
			}

			ul.pager li a.currentpager{
				background-color:#38424B;
				border:1px solid #38424B;
				color:#fff;
			}
            
        </style>
    </head>
    <body>
        
    <h1>Paging</h1>
        
    
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>Content</th>
            </tr>
        </thead> 
        <tbody>
            
            <?php
            
            foreach($paging as $p){
                
                ?>
                
                <tr>
                    <td><?php echo $p['id']; ?></td>
                    <td><?php echo $p['content']; ?></td>
                </tr>
            
                <?php   
            }
			
            ?>
			
        </tbody>
    </table>
	
	<br />
	
	<ul class="pager">
		<?php
		
		for ($i = 1; $i <= $totalpage; $i++) { 
		
			if($i == $currentpage){ 
				?><li><a class="currentpager" href="paging.php?page=<?php echo $i; ?>"><?php echo $i; ?></a></li><?php
			}else{
				?><li><a href="paging.php?page=<?php echo $i; ?>"><?php echo $i; ?></a></li><?php
			}
		
		}
		?>
	</ul>
        
    </body>
</html>


Berikut adalah tampilan dari paging.php pada browser.

pagination-dengan-php-dan-mysql-paging-navigation.png

Demikian, jika ada yang mau sobat tanyakan atau sampaikan silahkan melalui komentar dibawah.

Semoga tulisan ini dapat bermanfaat.


Komentar

Rizal

Hallo min , saya boleh minta file database sql nya gak? saya sudah coba selalu gagal pada database nya min , cara koneksinya bagaimana yaa min?

2 September 2019

Ajat Sudrajat

Hallo @rizal, source diatas itu sudah lengkap semua dan sudah saya testing ga ada masalah, tinggal sesuaikan aja dsn, user sama passwordnnya. Gagalnya kenapa? apa ada pesan errornya?

2 September 2019

Rizal

Error nya seperti ini min Parse error: syntax error, unexpected T_ECHO in /home/achmatim/public_html/test_paging/error-php/error1.1.php on line 4 itu kenapa yaa min?

2 September 2019

Rizal

Sudah bisa min kurang koma saya min

2 September 2019

Ajat Sudrajat

Iya betul, biasanya kalo errornya gitu cuma kurang tanda petik atau titik koma.

2 September 2019

Rizal

Iya min makasih min.

2 September 2019

Ajat Sudrajat

Sama-sama :)

2 September 2019

Syntia

Min ijin comot yaa , Makasih!

3 September 2019

Ajat Sudrajat

@Syntia, iya silahkan. sama-sama

3 September 2019

Faizal

Gan , request konten CRUD dong gan! Makasih gan!

3 September 2019

Ajat Sudrajat

@Faizal, konten CRUD udah ada gan, silahkan cek : https://ajatsudrajat.net/crud-database-dengan-php-pdo

3 September 2019