Menampilkan Semua Data dan Paginasi

Pada konten kelas ini Anda akan menampilkan semua data pengguna yang mana akan menampilkan semua kolom berdasarkan semua tabel yang ada. Hal tersebut seharusnya tidak di bolehkan karena jika ada data yang sensitif seperti kata sandi pengguna, maka kolom untuk kata sandi harus tidak ditampilkan.

Daftar isi:

Menampilkan Semua Data

Akan menampilkan semua data yang ada pada tabel users, tentu ini akan menampilkan data yang sangat banyak. Bila data Anda sudah 1k maka akan memuat waktu yang sangat banyak. Salin dan tempelkan skrip dibawah ini pada berkas users.php.

<?php

header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: GET");

if ($_SERVER['REQUEST_METHOD'] !== 'GET') {

    http_response_code(405);

    echo json_encode([
        'message' => 'Method tidak ditemukan.'
    ]);

    return;
}

include 'config.php';

$sql = "SELECT * FROM users";

$result = $conn->query($sql);

$rows = [];

while ($row = $result->fetch_object()) {
    $rows[] = $row;
}

http_response_code(200);

echo json_encode($rows);

Hal yang paling memakan waktu lama proses pemuatan ialah menggunakan perulangan while, karena akan memasukan data satu-satu ke variavel $rows. Jika Anda langsung saja menerapkannya seperti json_encode($result->fetch_object()) ini, maka data yang di hasilkan cuma satu saja yaitu data pertama.

Catatan: Menggunakan cara diatas akan mengeluarkan semua kolom pada tabel.

Berikut cara untuk mengeluarkan hanya kolom yang telah ditentukan dan sebagai contohnya saja.

while ($row = $result->fetch_object()) {
    $rows[] = [
        'id' => $row->id,
        'name' => $row->name,
        'email' => $row->email,
    ];
}

Menambahkan Fitur Paginasi

Jika Anda suka dengan fitur paginasi atau lebih dikenal pagination maka ini adalah pilihan yang tepat, karena Anda akan menampilkan data yang telah dibagi perhalaman. Salin dan tempelkan pada skrip sebelumnya yang dimulai dari include dan ganti semua skrip di bawahnya.

// bagian 1
$perPage = $_GET['per_page'] ?? 5;

$page = $_GET['page'] ?? 1;

$start = (($page) - 1) * $perPage;

// bagian 2
$sql = "SELECT * FROM users LIMIT $start, $perPage";

$result = $conn->query($sql);

$rows = [];

while ($row = $result->fetch_object()) {
    $rows[] = $row;
}

// bagian 3
$count = $conn->query("SELECT count(*) AS count FROM users")
    ->fetch_object()->count;

http_response_code(200);

// bagian 4
echo json_encode([
    'data' => $rows,
    'page' => (int) $page,
    'per_page' => (int) $perPage,
    'total' => (int) $count
]);

Pembahasan perbagian:

  1. Secara asali akan memberikan nilai bawaan sebagai berikut variabel $page bernilai 1, sedangkan variabel $perPage bernilai 5 yang akan memberikan data pengguna sebanyak 5 data perhalaman. Variabel $start berdasarkan perhitungan dari variabel $page dikurang 1 lalu di kali variabel $perPage.
  2. Variabel $sql yang memiliki skrip SQL (Structured Query Language) yang memanfaatkan LIMIT, saya artikan berdasarkan skrip SQL yang diterapkan. Jadi Limit 0, 5 akan memulai data dari baris 0 dan banyak data 5 untuk halaman pertama. Jika Anda menentukan halaman kedua maka LIMIT 5, 5, jadi sudah ke banyakan hasil dari paginasi yang ditetapkan.
  3. Kebanyakan REST API akan memberikan informasi yaitu berapa banyak data yang ada, terutama banyak data pengguna dari tabel users. Maka dari itu saya memberikan opsi sendiri untuk mengambil banyak data pada tabel users.
  4. Agar intergasi di sisi klien lebih mudah maka Anda harus juga menerapkannya dengan cara tersebut, terutama data pengguna, halaman berapa, jumlah perhalaman, dan total semua data. Hal ini nanti akan mempermudah di sisi klien untuk membuat paginasi.

Cara Menggunakannya?

Berikut ini dari hasil tanggapan layar untuk permintaan datanya.

2.1 users 1

Contoh tautan yang bisa Anda minta dengan memberikan parameter query pada tautan API:

  • users.php?page=1
  • users.php?per_page=10
  • users.php?page=1&per_page=10