Wednesday, December 14, 2016

Bab 8. PHP/MySQL: Langkah Demi Langkah



Lebih Lanjut dengan PHP dan MySQL






8.1 Mengirim Nilai Ke Sebuah Skript

Pada contoh-contoh sejauh ini, semua data yang diterima di dalam skript PHP berasal dari apa yang dimasukkan user di dalam suatu form. Namun, ada dua cara yang berbeda yang bisa Anda pakai untuk melewatkan variabel dan nilai kepada sebuah skript PHP.

Metode pertama adalah menggunakan tipe masukan tersembunyi dari HTML:

<input type="hidden" name="lakukan" value="ini" />

Sepanjang kode ini ditempatkan di antara tag-tag form, variabel $_POST[‘lakukan’] akan menerima nilai ini di dalam skript PHP yang menangani form. Anda telah menggunakan teknik ini dengan sebuah masukan tersembunyi dengan nama disubmit, yang digunakan untuk menguji ketika sebuah form ditangani.

Metode kedua untuk mengirim nilai kepada sebuah skript PHP adalah dengan menempelkan nilai tersebut pada URL:

www.contoh.com/halaman.php?lakukan=ini

Teknik ini memanfaatkan metode GET dari sebuah form HTML. Pada contoh ini, halaman.php menerima sebuah variabel, $_GET[‘lakukan’] dengan nilai ini.


Mengirim nilai secara manual kepada skript PHP
1.   Buka lihat_user.php pada editor teks atau IDE Anda.

2.   Ubah query SQL (Skript 8.1).

// Melakukan query:
$q = "SELECT nama_belakang, nama_depan,
DATE_FORMAT(tanggal_registrasi, '%M %d, %Y') AS dr, id_user
FROM pengguna ORDER BY tanggal_registrasi ASC";

Nama depan dan nama belakang diseleksi secara terpisah, tidak disambung. Nilai id_user juga sekarang diseleksi, karena diperlukan untuk menciptakan link-link.

3.   Tambahkan tiga lagi kolom pada tabel utama.

// Kepala tabel.
   echo '<table align="center" cellspacing="3" cellpadding="3" width="75%">
   <tr>
      <td align="left"><b>Edit</b></td>
      <td align="left"><b>Hapus</b></td>
      <td align="left"><b>Nama Belakang</b></td>
      <td align="left"><b>Nama Depan</b></td>
      <td align="left"><b>Tanggal Registrasi</b></td>
   </tr>';

4.   Ubah statemen echo di dalam loop while untuk menyesuaikan dengan struktur baru dari tabel.

echo '<tr>
    <td align="left"><a href="edit_user.php?id=' . $baris['id_user'] . '">Edit</a></td>
    <td align="left"><a href="hapus_user.php?id=' . $baris['id_user'] . '">Hapus</a></td>
    <td align="left">' . $baris['nama_belakang']. '</td>
    <td align="left">' . $baris['nama_depan'] . '</td>
    <td align="left">' . $baris['dr'] . '</td>
</tr>';

5.   Simpan sebagai lihat_user.php, tempatkan pada direktori Web, dan jalankan dengan browser Web Anda (Gambar 8.1).

SKRIPT 8.1
1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php # Skript 8.1 - lihat_user.php
// Skript ini membaca semua rekaman dari tabel pengguna.

$judul_hal = 'Melihat Semua User';
include ('kepala.html');

// Header halaman:
echo '<h1>Daftar User Yang Terdaftar</h1>';

require_once ('mysqli_connect.php'); // Koneksi ke db.

// Melakukan query:
$q = "SELECT nama_belakang, nama_depan,
     DATE_FORMAT(tanggal_registrasi, '%M %d, %Y') AS dr, id_user
     FROM pengguna ORDER BY tanggal_registrasi ASC";

$r = @mysqli_query ($dbc, $q); // Menjalankan query.

// Menghitung banyak baris yang dihasilkan query:
$jum = mysqli_num_rows($r);

if ($jum > 0) { // Jika OK, tampilkan semua rekaman.
   // Menampilkan berapa banyak user:
   echo "<p>Ada sebanyak $jum user yang telah terdaftar.</p>\n";
  
   // Kepala tabel.
   echo '<table align="center" cellspacing="3" cellpadding="3" width="75%">
   <tr>
      <td align="left"><b>Edit</b></td>
      <td align="left"><b>Hapus</b></td>
      <td align="left"><b>Nama Belakang</b></td>
      <td align="left"><b>Nama Depan</b></td>
      <td align="left"><b>Tanggal Registrasi</b></td>
   </tr>';

   // Menampilkan semua rekaman:
   while ($baris = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
      echo '<tr>
         <td align="left"><a href="edit_user.php?id=' . $baris['id_user'] . '">Edit</a></td>
         <td align="left"><a href="hapus_user.php?id=' . $baris['id_user'] . '">Hapus</a></td>
         <td align="left">' . $baris['nama_belakang']. '</td>
         <td align="left">' . $baris['nama_depan'] . '</td>
         <td align="left">' . $baris['dr'] . '</td>
      </tr>';
   }
   echo '</table>'; // Tutup tabel.
   mysqli_free_result ($r); // Membebaskan resource
} else { // Jika tidak ada rekaman yang dihasilkan.
   echo '<p class="error">Tidak ada user yang telah terdaftar.</p>';
} // Akhir dari if ($r) IF.

mysqli_close($dbc); // Tutup koneksi database
include ('kaki.html');
?>


Gambar 8.1 Versi revisi dari halaman lihat_user.php, dengan kolom-kolom dan link-link baru.


6.   Jika diinginkan, Anda bisa melihat kode sumber HTML untuk melihat setiap link yang dibangkitkan secara dinamis (Gambar 8.2).


Gambar 8.2 Kode sumber HTML menunjukkan ID user ditambahkan pada URL setiap link.



8.2 Menggunakan Masukan Form Tersembunyi
Pada contoh sebelumnya, versi revisi dari skript lihat_user.php telah ditulis. Versi ini mencakup link ke halaman edit_user.php dan ke halaman hapus_user.php, yang melewatkan setiap ID user melalui URL. Pada contoh selanjutnya, hapus_user.php akan mengambil ID user yang dilewatkan dan mengijinkan administrator untuk menghapus user tersebut. Meskipun Anda hanya akan mengeksekusi sebuah query DELETE pada halaman ini, untuk kepentingan keamanan, ada beberapa tahap yang perlu dilakukan:
1.   Halaman harus memeriksa bahwa ia hanya menerima ID user numerik.
2.   Sebuah pesan diberikan untuk memastikan bahwa user telah dihapus.
3.   ID user akan disimpan di dalam sebuah form masukan tersembunyi.
4.   Setelah mengirim form, user terkait akan dihapus dari database.

Menggunakan masukan form tersembunyi
1.   Ciptakan sebuah dokumen PHP baru pada editor teks atau IDE Anda (Skript 8.2).

<?php # Skript 8.2 - hapus_user.php

2.   Cantumkan kepala halaman.

$judul_hal = 'Hapus User';
include ('kepala.html');
echo '<h1>Hapus User</h1>';

3.   Periksa validitas nilai ID user.

// Memeriksa ID user yang valid, melalui metode GET atau POST:
if ( (isset($_GET['id'])) && (is_numeric($_GET['id'])) ) { // Dari lihat_user.php
   $id = $_GET['id'];
} elseif ( (isset($_POST['id'])) && (is_numeric($_POST['id'])) ) { // Submisi form.
   $id = $_POST['id'];
} else { // ID tak-valid, hentikan skript.
   echo '<p class="error">Halaman ini diakses dengan error.</p>';
   include ('kaki.html');
   exit();
}

4.   Cantumkan skript untuk melakukan koneksi dengan MySQL.

require_once ('mysqli_connect.php');

5.   Awali kondisional submit utama.

if (isset($_POST['disubmit'])) {

6.   Hapus user.

if ($_POST['yakin'] == 'Ya') { // Hapus rekaman.
   // Membuat query:
   $q = "DELETE FROM pengguna
        WHERE id_user=$id LIMIT 1";
   $r = @mysqli_query ($dbc, $q);

7.   Periksa apakah penghapusan berhasil dilakukan.

if (mysqli_affected_rows($dbc) == 1) { // Jika OK.
   // Tampilkan pesan:
   echo '<p>User telah dihapus.</p>';
} else { // Jika query tidak berhasil dijalankan.
   echo '<p class="error">User tidak dihapus karena error.</p>';
   echo '<p>' . mysqli_error($dbc) . '<br/>Query: ' . $q . '</p>';
}

8.   Sempurnakan kondisional $_POST[‘yakin’].

} else {
   echo '<p>User TIDAK berhasil dihapus.</p>';
}

9.   Baca informasi untuk user yang akan dihapus.

$q = "SELECT CONCAT(nama_belakang, ', ', nama_depan)
     FROM pengguna
     WHERE id_user=$id";
$r = @mysqli_query ($dbc, $q);

10.  Tampilkan form.

// Membaca informasi user:
$baris = mysqli_fetch_array ($r, MYSQLI_NUM);

// Menciptakan form:
echo '<form action="hapus_user.php" method="post">
      <h3>Nama: ' . $baris[0] . '</h3>
      <p>Apakah Anda yakin ingin menghapus user ini?<br />
      <input type="radio" name="yakin" value="Ya" /> Ya
      <input type="radio" name="yakin" value="Tidak" checked="checked" /> Tidak</p>
      <p><input type="submit" name="submit" value="Submit" /></p>
      <input type="hidden" name="disubmit" value="TRUE" />
      <input type="hidden" name="id" value="'. $id . '" />
</form>';

11.  Tutup halaman PHP.

} // Akhir dari kondisional utama.

mysqli_close($dbc);
include ('kaki.html');
?>

SKRIPT 8.2
1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php # Skript 8.2 - hapus_user.php
// Halaman ini untuk menghapus sebuah rekaman user.
// Halaman ini diakses melalui lihat_user.php.

$judul_hal = 'Hapus User';
include ('kepala.html');
echo '<h1>Hapus User</h1>';

// Memeriksa ID user yang valid, melalui metode GET atau POST:
if ( (isset($_GET['id'])) && (is_numeric($_GET['id'])) ) { // Dari lihat_user.php
   $id = $_GET['id'];
} elseif ( (isset($_POST['id'])) && (is_numeric($_POST['id'])) ) { // Submisi form.
   $id = $_POST['id'];
} else { // ID tak-valid, hentikan skript.
   echo '<p class="error">Halaman ini diakses dengan error.</p>';
   include ('kaki.html');
   exit();
}

require_once ('mysqli_connect.php');

// Memeriksa apakah form telah dikirim:
if (isset($_POST['disubmit'])) {
   if ($_POST['yakin'] == 'Ya') { // Hapus rekaman.
      // Membuat query:
      $q = "DELETE FROM pengguna
               WHERE id_user=$id LIMIT 1";
      $r = @mysqli_query ($dbc, $q);
      if (mysqli_affected_rows($dbc) == 1) { // Jika OK.
         // Tampilkan pesan:
         echo '<p>User telah dihapus.</p>';
      } else { // Jika query tidak berhasil dijalankan.
         echo '<p class="error">User tidak dihapus karena error.</p>';
         echo '<p>' . mysqli_error($dbc) . '<br/>Query: ' . $q . '</p>';
      }

   } else {
      echo '<p>User TIDAK berhasil dihapus.</p>';
   }
} else { // Menampilkan form.
   // Membaca informasi user:
   $q = "SELECT CONCAT(nama_belakang, ', ', nama_depan)
        FROM pengguna
                WHERE id_user=$id";
   $r = @mysqli_query ($dbc, $q);

   if (mysqli_num_rows($r) == 1) { // Jika ID user valid, tampilkan form.
      // Membaca informasi user:
      $baris = mysqli_fetch_array ($r, MYSQLI_NUM);

      // Menciptakan form:
      echo '<form action="hapus_user.php" method="post">
         <h3>Nama: ' . $baris[0] . '</h3>
         <p>Apakah Anda yakin ingin menghapus user ini?<br />
         <input type="radio" name="yakin" value="Ya" /> Ya
         <input type="radio" name="yakin" value="Tidak" checked="checked" /> Tidak</p>
         <p><input type="submit" name="submit" value="Submit" /></p>
         <input type="hidden" name="disubmit" value="TRUE" />
         <input type="hidden" name="id" value="'. $id . '" />
      </form>';
   } else { // ID user tak-valid.
      echo '<p class="error">Halaman ini diakses dengan error.</p>';
   }
} // Akhir dari kondisional utama.

mysqli_close($dbc);
include ('kaki.html');
?>


Gambar 8.3 Halaman konfirmasi untuk mamastikan apakah user terkait akan dihapus atau tidak.


Gambar 8.4 Halaman konfirmasi untuk memastikan user terkait telah dihapus dari database.


Gambar 8.5 Halaman lihat_user.php untuk melihat user telah dihapus dari database.



8.3 Mengedit Rekaman
Di sini, Anda akan mengedit rekaman-rekaman yang tersimpan di dalam database. Konsep ini cukup menakutkan bagi banyak programer, tetapi proses yang akan ditunjukkan cukup sederhana. Proses ini melibatkan:
·         Pembuatan sticky form.
·         Penggunaan masukan tersembunyi.
·         Validasi data registrasi.
·         Pengeksekusian query.

Mengedit rekaman di dalam database
1.   Ciptakan sebuah dokumen PHP yang baru pada editor teks atau IDE Anda (Skript 8.3).

// Halaman ini untuk mengedit rekaman user.
// Halaman ini diakses melalui lihat_user.php.

$judul_hal = 'Edit User';
include ('kepala.html');
echo '<h1>Edit User</h1>';

2.   Periksa validitas dari nilai ID user.

// Memeriksa validitas ID user melalui GET atau POST:
if ( (isset($_GET['id'])) && (is_numeric($_GET['id'])) ) { // Dari lihat_user.php
   $id = $_GET['id'];
} elseif ( (isset($_POST['id'])) && (is_numeric($_POST['id'])) ) {
   $id = $_POST['id'];
} else { // Jika ID tidak valid, hentikan skript.
   echo '<p class="error">Halaman ini diakses dengan error.</p>';
   include ('kaki.html');
   exit();
}

3.   Cantumkan skript koneksi MySQL dan mulai kondisional submit utama.

require_once ('mysqli_connect.php');

// Memeriksa apakah form telah disubmit:
if (isset($_POST['disubmit'])) {
   $arrayError = array();

4.   Validasi nama depan.

// Memeriksa nama depan:
if (empty($_POST['nama_depan'])) {
   $arrayError[] = 'Anda lupa memasukkan nama depan.';
} else {
   $fn = mysqli_real_escape_string($dbc, trim($_POST['nama_depan']));
}

5.   Validasi nama belakang dan alamat email.

// Memeriksa nama belakang:
if (empty($_POST['nama_belakang'])) {
   $arrayError[] = 'Anda lupa memasukkan nama belakang.';
} else {
   $ln = mysqli_real_escape_string($dbc, trim($_POST['nama_belakang']));
}

// Memeriksa alamat email:
if (empty($_POST['email'])) {
   $arrayError[] = 'Anda lupa memasukkan alamat email.';
} else {
   $e = mysqli_real_escape_string($dbc, trim($_POST['email']));
}

6.   Jika tidak ada error, periksa bahwa alamat email yang disubmit tidak lagi dapat digunakan.

if (empty($arrayError)) { // Jika semuanya OK.
   // Uji keunikan alamat email:
   $q = "SELECT id_user FROM pengguna
   WHERE email='$e' AND id_user != $id";
   $r = @mysqli_query($dbc, $q);

7.   Perbarui database.

// Membuat query:
$q = "UPDATE pengguna
      SET nama_depan = '$fn', nama_belakang ='$ln', email='$e'
      WHERE id_user=$id LIMIT 1";
$r = @mysqli_query ($dbc, $q);

8.   Laporkan hasil pembaruan database.

if (mysqli_affected_rows($dbc) == 1) { // Jika OK.
   // Tampilkan pesan:
   echo '<p>User berhasil diedit.</p>';
} else { // If it did not run OK.
   echo '<p class="error">User tidak dapat diedit karena error sistem.</p>';
   echo '<p>' . mysqli_error($dbc) . '<br/>Query: ' . $q . '</p>';
}

9.   Sempurnakan kondisional email.

} else { // Telah terdaftar.
   echo '<p class="error">Alamat email telah terdaftar.</p>';
}

10.  Sempurnakan kondisional $arrayError dan kondisional submisi.

   } else { // Melaporkan arrayError.
      echo '<p class="error">Berikut setiap error yang terjadi:<br />';
      foreach ($arrayError as $psn) { // Tampilkan error.
         echo " - $psn<br />\n";
      }
      echo '</p><p>Silahkan coba lagi.</p>';

   } // Akhir dari if (empty($arrayError)) IF.
} // Akhir dari kondisional submit utama.

11.  Baca informasi dari user yang sedang diedit.

// Membaca informasi user:
$q = "SELECT nama_depan, nama_belakang, email
FROM pengguna WHERE id_user=$id";
$r = @mysqli_query ($dbc, $q);

12.  Menampilkan form.

// Membaca informasi user:
$baris = mysqli_fetch_array ($r, MYSQLI_NUM);

// Meciptakan form:
echo '<form action="edit_user.php" method="post">
      <p>Nama Depan: <input type="text" name="nama_depan" size="15" maxlength="15"
         value="' . $baris[0] . '" /></p>
      <p>Nama Belakang: <input type="text" name="nama_belakang" size="15" maxlength="30"
         value="' . $baris[1] . '" /></p>
      <p>Alamat Email: <input type="text" name="email" size="20" maxlength="40"
         value="' . $baris[2] . '" /> </p>
      <p><input type="submit" name="submit" value="Submit" /></p>
      <input type="hidden" name="disubmit" value="TRUE" />
      <input type="hidden" name="id" value="' . $id . '" />
</form>';

13.  Sempurnakan kondisional mysqli_num_rows().

} else { // ID user tak valid.
   echo '<p class="error">Halaman ini mengalami error.</p>';
}

14.  Sempurnakan halaman PHP.

mysqli_close($dbc);
include ('kaki.html');
?>

15.  Simpan file dengan nama edit_user.php dan jalankan dengan browser Web.

SKRIPT 8.3
1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php # Skript 8.3 - edit_user.php
// Halaman ini untuk mengedit rekaman user.
// Halaman ini diakses melalui lihat_user.php.

$judul_hal = 'Edit User';
include ('kepala.html');

echo '<h1>Edit User</h1>';

// Memeriksa validitas ID user melalui GET atau POST:
if ( (isset($_GET['id'])) && (is_numeric($_GET['id'])) ) { // Dari lihat_user.php
   $id = $_GET['id'];
} elseif ( (isset($_POST['id'])) && (is_numeric($_POST['id'])) ) {
   $id = $_POST['id'];
} else { // Jika ID tidak valid, hentikan skript.
   echo '<p class="error">Halaman ini diakses dengan error.</p>';
   include ('kaki.html');
   exit();
}

require_once ('mysqli_connect.php');

// Memeriksa apakah form telah disubmit:
if (isset($_POST['disubmit'])) {
   $arrayError = array();

   // Memeriksa nama depan:
   if (empty($_POST['nama_depan'])) {
      $arrayError[] = 'Anda lupa memasukkan nama depan.';
   } else {
      $fn = mysqli_real_escape_string($dbc, trim($_POST['nama_depan']));
   }

   // Memeriksa nama belakang:
   if (empty($_POST['nama_belakang'])) {
      $arrayError[] = 'Anda lupa memasukkan nama belakang.';
   } else {
      $ln = mysqli_real_escape_string($dbc, trim($_POST['nama_belakang']));
   }

   // Memeriksa alamat email:
   if (empty($_POST['email'])) {
      $arrayError[] = 'Anda lupa memasukkan alamat email.';
   } else {
      $e = mysqli_real_escape_string($dbc, trim($_POST['email']));
   }

   if (empty($arrayError)) { // Jika semuanya OK.
      // Uji keunikan alamat email:
      $q = "SELECT id_user FROM pengguna
      WHERE email='$e' AND id_user != $id";
      $r = @mysqli_query($dbc, $q);
      if (mysqli_num_rows($r) == 0) {
         // Membuat query:
         $q = "UPDATE pengguna
                 SET nama_depan = '$fn', nama_belakang ='$ln', email='$e'
         WHERE id_user=$id LIMIT 1";
         $r = @mysqli_query ($dbc, $q);
        
        if (mysqli_affected_rows($dbc) == 1) { // Jika OK.
            // Tampilkan pesan:
            echo '<p>User berhasil diedit.</p>';
         } else { // If it did not run OK.
            echo '<p class="error">User tidak dapat diedit karena error sistem.</p>';
            echo '<p>' . mysqli_error($dbc) . '<br/>Query: ' . $q . '</p>';
         }
      } else { // Telah terdaftar.
         echo '<p class="error">Alamat email telah terdaftar.</p>';
      }
   } else { // Melaporkan arrayError.
      echo '<p class="error">Berikut setiap error yang terjadi:<br />';
      foreach ($arrayError as $psn) { // Tampilkan error.
         echo " - $psn<br />\n";
      }
      echo '</p><p>Silahkan coba lagi.</p>';

   } // Akhir dari if (empty($arrayError)) IF.
} // Akhir dari kondisional submit utama.

// Selalu menampilkan form...
// Membaca informasi user:
$q = "SELECT nama_depan, nama_belakang, email
FROM pengguna WHERE id_user=$id";
$r = @mysqli_query ($dbc, $q);

if (mysqli_num_rows($r) == 1) { // Jika ID user valid, tampilkan form.
   // Membaca informasi user:
   $baris = mysqli_fetch_array ($r, MYSQLI_NUM);

   // Meciptakan form:
   echo '<form action="edit_user.php" method="post">
      <p>Nama Depan: <input type="text" name="nama_depan" size="15" maxlength="15"
         value="' . $baris[0] . '" /></p>
      <p>Nama Belakang: <input type="text" name="nama_belakang" size="15" maxlength="30"
         value="' . $baris[1] . '" /></p>
      <p>Alamat Email: <input type="text" name="email" size="20" maxlength="40"
         value="' . $baris[2] . '" /> </p>
      <p><input type="submit" name="submit" value="Submit" /></p>
      <input type="hidden" name="disubmit" value="TRUE" />
      <input type="hidden" name="id" value="' . $id . '" />
   </form>';
} else { // ID user tak valid.
   echo '<p class="error">Halaman ini mengalami error.</p>';
}
mysqli_close($dbc);
include ('kaki.html');
?>

  
Gambar 8.6 Halaman untuk mengedit informasi user.


Gambar 8.7 Email dari user berhasil diedit.



8.4 Mempaginasi Hasil Query
1.   Buka dokumen PHP yang baru pada editor teks atau IDE Anda (Skript 9.4).

<?php # Skript 8.4 - lihat_user.php
// Skript ini membaca semua rekaman dari tabel pengguna.

$judul_hal = 'Melihat Semua User';
include ('kepala.html');

// Header halaman:
echo '<h1>Daftar User Yang Terdaftar</h1>';

require_once ('mysqli_connect.php'); // Koneksi ke db.

2.   Tetapkan banyak rekaman yang akan ditampilkan.

// Banyak rekaman per halaman:
$tampil = 10;

3.   Periksa apakah banyak halaman yang diperlukan telah ditetapkan.

// Menentukan banyak halaman...
if (isset($_GET['p']) && is_numeric($_GET['p'])) { // Sudah ditentukan
   $hal = $_GET['p'];
} else { // Perlu ditentukan.

4.   Hitung jumlah rekaman di dalam database.

// Menghitung banyak rekaman:
$q = "SELECT COUNT(id_user) FROM pengguna";
$r = @mysqli_query ($dbc, $q);
$baris = @mysqli_fetch_array ($r, MYSQLI_NUM);
$rekaman = $baris[0];

5.   Secara matematik, hitung berapa banyak halaman yang diperlukan.

// Menghitung banyak halaman...
if ($rekaman > $tampil) { // Lebih dari 1 halaman.
   $hal = ceil ($rekaman/$tampil);
} else {
   $hal = 1;
}

6.   Tentukan titik awal di dalam database.

// Menentukan di mana di dalam database untuk mulai memberikan hasil...
if (isset($_GET['s']) && is_numeric($_GET['s'])) {
   $mulai = $_GET['s'];
} else {
   $mulai = 0;
}

7.   Tuliskan query dengan sebuah klausa LIMIT.

// Melakukan query:
$q = "SELECT nama_belakang, nama_depan,
     DATE_FORMAT(tanggal_registrasi, '%M %d, %Y') AS dr, id_user
     FROM pengguna
     ORDER BY tanggal_registrasi ASC LIMIT $mulai, $tampil";

$r = @mysqli_query ($dbc, $q); // Menjalankan query.

8.   Ciptakan kepala tabel HTML.

// Kepala tabel.
echo '<table align="center" cellspacing="3" cellpadding="3" width="75%">
   <tr>
      <td align="left"><b>Edit</b></td>
      <td align="left"><b>Hapus</b></td>
      <td align="left"><b>Nama Belakang</b></td>
      <td align="left"><b>Nama Depan</b></td>
      <td align="left"><b>Tanggal Registrasi</b></td>
   </tr>';

9.   Inisialisasi variabel warna latar.

$bg = '#eeeeee'; // Menetapkan warna latar awal.

10.  Awali loop while yang membaca setiap rekaman.

while ($baris = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
   $bg = ($bg=='#eeeeee' ? '#ffffff' :'#eeeeee'); // Tukar warna latar.

11.  Tampilkan semua rekaman.


echo '<tr bgcolor="' . $bg . '">
         <td align="left"><a href="edit_user.php?id=' . $baris['id_user'] . '">Edit</a></td>
         <td align="left"><a href="hapus_user.php?id=' . $baris['id_user'] . '">Hapus</a></td>
         <td align="left">' . $baris['nama_belakang']. '</td>
         <td align="left">' . $baris['nama_depan'] . '</td>
         <td align="left">' . $baris['dr'] . '</td>
      </tr>';

12.  Sempurnakan loop while dan tabel, bebaskan resource hasil, dan tutup koneksi database.

}
echo '</table>'; // Tutup tabel.
mysqli_free_result ($r); // Membebaskan resource
mysqli_close($dbc);

13.  Awali bagian untuk menampilkan link-link ke halaman-halaman lain, jika diperlukan.

// Membuat link-link ke halaman lain, jika diperlukan.
if ($hal > 1) {
   // Tambahkan spasi dan mulai paragraf:
   echo '<br /><p>';

   // Menentukan halaman apa skript dimulai:
   $hal_sekarang = ($mulai/$tampil) + 1;

   // Jika tidak pada halaman pertama, ciptakan tombol Sebelumnya:
   if ($hal_sekarang != 1) {
      echo '<a href="lihat_user.php?s=' . ($mulai - $tampil) . '&p=' . $hal . '">Sebelumnya</a> ';
   }

14.  Ciptakan link-link numerik.

// Membuat halaman-halaman bernomor:
   for ($i = 1; $i <= $hal; $i++) {
      if ($i != $hal_sekarang) {
         echo '<a href="lihat_user.php?s=' . (($tampil * ($i - 1))) . '&p=' . $hal . '">' . $i . '</a> ';
      } else {
         echo $i . ' ';
      }
   } // Akhir loop FOR.

15.  Ciptakan link Selanjutnya.

// Jika tidak pada halaman terakhir, ciptakan tombol Selanjutnya:
if ($hal_sekarang != $hal) {
   echo '<a href="lihat_user.php?s=' . ($mulai + $tampil) . '&p=' . $hal . '">Selanjutnya</a>';
}

16.  Sempurnakan halaman.

   echo '</p>'; // Tutup paragraf.
} // Akhir bagian link.

include ('kaki.html');
?>

17.  Simpan file dengan nama lihat_user.php, tempatkan pada direktori Web, dan jalankan dengan browser Web Anda.

SKRIPT 8.4
1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?php # Skript 8.4 - lihat_user.php
// Skript ini membaca semua rekaman dari tabel pengguna.

$judul_hal = 'Melihat Semua User';
include ('kepala.html');

// Header halaman:
echo '<h1>Daftar User Yang Terdaftar</h1>';

require_once ('mysqli_connect.php'); // Koneksi ke db.

// Banyak rekaman per halaman:
$tampil = 10;

// Menentukan banyak halaman...
if (isset($_GET['p']) && is_numeric($_GET['p'])) { // Sudah ditentukan
   $hal = $_GET['p'];
} else { // Perlu ditentukan.
   // Menghitung banyak rekaman:
   $q = "SELECT COUNT(id_user) FROM pengguna";
   $r = @mysqli_query ($dbc, $q);
   $baris = @mysqli_fetch_array ($r, MYSQLI_NUM);
   $rekaman = $baris[0];

   // Menghitung banyak halaman...
   if ($rekaman > $tampil) { // Lebih dari 1 halaman.
      $hal = ceil ($rekaman/$tampil);
   } else {
      $hal = 1;
   }
} // Akhir dari IF p.

// Menentukan di mana di dalam database untuk mulai memberikan hasil...
if (isset($_GET['s']) && is_numeric($_GET['s'])) {
   $mulai = $_GET['s'];
} else {
   $mulai = 0;
}

// Melakukan query:
$q = "SELECT nama_belakang, nama_depan,
     DATE_FORMAT(tanggal_registrasi, '%M %d, %Y') AS dr, id_user
     FROM pengguna
     ORDER BY tanggal_registrasi ASC LIMIT $mulai, $tampil";

$r = @mysqli_query ($dbc, $q); // Menjalankan query.

// Kepala tabel.
echo '<table align="center" cellspacing="3" cellpadding="3" width="75%">
   <tr>
      <td align="left"><b>Edit</b></td>
      <td align="left"><b>Hapus</b></td>
      <td align="left"><b>Nama Belakang</b></td>
      <td align="left"><b>Nama Depan</b></td>
      <td align="left"><b>Tanggal Registrasi</b></td>
   </tr>';

// Menampilkan semua rekaman:
$bg = '#eeeeee'; // Menetapkan warna latar awal.
while ($baris = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
   $bg = ($bg=='#eeeeee' ? '#ffffff' :'#eeeeee'); // Tukar warna latar.
   echo '<tr bgcolor="' . $bg . '">
         <td align="left"><a href="edit_user.php?id=' . $baris['id_user'] . '">Edit</a></td>
         <td align="left"><a href="hapus_user.php?id=' . $baris['id_user'] . '">Hapus</a></td>
         <td align="left">' . $baris['nama_belakang']. '</td>
         <td align="left">' . $baris['nama_depan'] . '</td>
         <td align="left">' . $baris['dr'] . '</td>
      </tr>';
}
echo '</table>'; // Tutup tabel.
mysqli_free_result ($r); // Membebaskan resource
mysqli_close($dbc);

// Membuat link-link ke halaman lain, jika diperlukan.
if ($hal > 1) {
   // Tambahkan spasi dan mulai paragraf:
   echo '<br /><p>';

   // Menentukan halaman apa skript dimulai:
   $hal_sekarang = ($mulai/$tampil) + 1;

   // Jika tidak pada halaman pertama, ciptakan tombol Sebelumnya:
   if ($hal_sekarang != 1) {
      echo '<a href="lihat_user.php?s=' . ($mulai - $tampil) . '&p=' . $hal . '">Sebelumnya</a> ';
   }

   // Membuat halaman-halaman bernomor:
   for ($i = 1; $i <= $hal; $i++) {
      if ($i != $hal_sekarang) {
         echo '<a href="lihat_user.php?s=' . (($tampil * ($i - 1))) . '&p=' . $hal . '">' . $i . '</a> ';
      } else {
         echo $i . ' ';
      }
   } // Akhir loop FOR.
  
   // Jika tidak pada halaman terakhir, ciptakan tombol Selanjutnya:
   if ($hal_sekarang != $hal) {
      echo '<a href="lihat_user.php?s=' . ($mulai + $tampil) . '&p=' . $hal . '">Selanjutnya</a>';
   }
   echo '</p>'; // Tutup paragraf.
} // Akhir bagian link.

include ('kaki.html');
?>


Gambar 8.8 Hasil query yang telah dipaginasi.



8.5 Mengurutkan Hasil Query
Untuk mengakhiri bab ini, ada satu fitur akhir yang dapat ditambahkan pada lihat_user.php. Pada kondisinya sekarang, daftar user ditampilkan secara berurutan berdasarkan tanggal registrasi. Akan lebih baik jika Anda dapat mengurutkannya berdasarkan nama juga.
1.   Buka lihat_user.php pada editor teks atau IDE Anda.
2.   Tepat setelah menentukan titik awal, definisikan variabel $urut (Skript 8.5).

// Defaultnya berdasarkan tanggal registrasi.
$urut = (isset($_GET['urut'])) ? $_GET['urut'] : 'rd';

3.   Tentukan bagaimana hasil diurutkan.

// Menentukan pengurutan:
switch ($urut) {
   case 'nb':
      $berdasarkan = 'nama_belakang ASC';
      break;
   case 'nd':
      $berdasarkan = 'nama_depan ASC';
      break;
   case 'tr':
      $berdasarkan = 'tanggal_registrasi ASC';
      break;
   default:
      $berdasarkan = 'tanggal_registrasi ASC';
      $urut = 'tr';
      break;
}

4.   Modifikasi query agar menggunakan variabel $berdasarkan yang baru.

// Melakukan query:
$q = "SELECT nama_belakang, nama_depan,
     DATE_FORMAT(tanggal_registrasi, '%M %d, %Y') AS dr, id_user
     FROM pengguna
     ORDER BY $berdasarkan LIMIT $mulai, $tampil";

5.   Modifikasi statemen echo() untuk kepala tabel agar menciptakan link-link dari tiap kepala kolom.

// Kepala tabel.
echo '<table align="center" cellspacing="3" cellpadding="3" width="75%">
   <tr>
      <td align="left"><b>Edit</b></td>
      <td align="left"><b>Hapus</b></td>
      <td align="left"><b><a href="lihat_user.php?urut=nb">Nama Belakang</a></b></td>
      <td align="left"><b><a href="lihat_user.php?urut=nd">Nama Depan</a></b></td>
      <td align="left"><b><a href="lihat_user.php?urut=tr">Tanggal Registrasi</a></b></td>
   </tr>';

6.   Modifikasi statemen echo() yang menciptakan link Sebelumnya sehingga nilai urut juga dilewatkan.

echo '<a href="lihat_user.php?s=' . ($mulai - $tampil) .
     '&p=' . $hal . '&urut=' . $urut . '">Sebelumnya</a> ';

7.   Ulangi langkah 6 untuk link Selanjutnya.

// Membuat halaman-halaman bernomor:
for ($i = 1; $i <= $hal; $i++) {
   if ($i != $hal_sekarang) {
      echo '<a href="lihat_user.php?s=' . (($tampil * ($i - 1))) .
           '&p=' . $hal . '&urut=' . $urut . '">' . $i . '</a> ';
   } else {
      echo $i . ' ';
   }
} // Akhir loop FOR.
  
// Jika tidak pada halaman terakhir, ciptakan tombol Selanjutnya:
if ($hal_sekarang != $hal) {
   echo '<a href="lihat_user.php?s=' . ($mulai + $tampil) .
        '&p=' . $hal . '&urut=' . $urut . '">Selanjutnya</a>';
}

8.   Simpan file dengan nama lihat_user.php, tempatkan pada direktori Web Anda, dan jalankan dengan browser Web Anda. Lihat Gambar 8.9 dan Gambar 8.10.


Gambar 8.9 Tabel diurutkan berdasarkan nama belakang.


Gambar 8.10 Tabel diurutkan berdasarkan nama depan.



SKRIPT 8.4
1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php # Skript 8.4 - lihat_user.php
// Skript ini membaca semua rekaman dari tabel pengguna.

$judul_hal = 'Melihat Semua User';
include ('kepala.html');

// Header halaman:
echo '<h1>Daftar User Yang Terdaftar</h1>';

require_once ('mysqli_connect.php'); // Koneksi ke db.

// Banyak rekaman per halaman:
$tampil = 10;

// Menentukan banyak halaman...
if (isset($_GET['p']) && is_numeric($_GET['p'])) { // Sudah ditentukan
   $hal = $_GET['p'];
} else { // Perlu ditentukan.
   // Menghitung banyak rekaman:
   $q = "SELECT COUNT(id_user) FROM pengguna";
   $r = @mysqli_query ($dbc, $q);
   $baris = @mysqli_fetch_array ($r, MYSQLI_NUM);
   $rekaman = $baris[0];

   // Menghitung banyak halaman...
   if ($rekaman > $tampil) { // Lebih dari 1 halaman.
      $hal = ceil ($rekaman/$tampil);
   } else {
      $hal = 1;
   }
} // Akhir dari IF p.

// Menentukan di mana di dalam database untuk mulai memberikan hasil...
if (isset($_GET['s']) && is_numeric($_GET['s'])) {
   $mulai = $_GET['s'];
} else {
   $mulai = 0;
}

// Menentukan pengurutan...
// Defaultnya berdasarkan tanggal registrasi.
$urut = (isset($_GET['urut'])) ? $_GET['urut'] : 'rd';

// Menentukan pengurutan:
switch ($urut) {
   case 'nb':
      $berdasarkan = 'nama_belakang ASC';
      break;
   case 'nd':
      $berdasarkan = 'nama_depan ASC';
      break;
   case 'tr':
      $berdasarkan = 'tanggal_registrasi ASC';
      break;
   default:
      $berdasarkan = 'tanggal_registrasi ASC';
      $urut = 'tr';
      break;
}

// Melakukan query:
$q = "SELECT nama_belakang, nama_depan,
     DATE_FORMAT(tanggal_registrasi, '%M %d, %Y') AS dr, id_user
     FROM pengguna
     ORDER BY $berdasarkan LIMIT $mulai, $tampil";

$r = @mysqli_query ($dbc, $q); // Menjalankan query.

// Kepala tabel.
echo '<table align="center" cellspacing="3" cellpadding="3" width="75%">
   <tr>
      <td align="left"><b>Edit</b></td>
      <td align="left"><b>Hapus</b></td>
      <td align="left"><b><a href="lihat_user.php?urut=nb">Nama Belakang</a></b></td>
      <td align="left"><b><a href="lihat_user.php?urut=nd">Nama Depan</a></b></td>
      <td align="left"><b><a href="lihat_user.php?urut=tr">Tanggal Registrasi</a></b></td>
   </tr>';

// Menampilkan semua rekaman:
$bg = '#eeeeee'; // Menetapkan warna latar awal.
while ($baris = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
   $bg = ($bg=='#eeeeee' ? '#ffffff' :'#eeeeee'); // Tukar warna latar.
   echo '<tr bgcolor="' . $bg . '">
         <td align="left"><a href="edit_user.php?id=' . $baris['id_user'] . '">Edit</a></td>
         <td align="left"><a href="hapus_user.php?id=' . $baris['id_user'] . '">Hapus</a></td>
         <td align="left">' . $baris['nama_belakang']. '</td>
         <td align="left">' . $baris['nama_depan'] . '</td>
         <td align="left">' . $baris['dr'] . '</td>
      </tr>';
}
echo '</table>'; // Tutup tabel.
mysqli_free_result ($r); // Membebaskan resource
mysqli_close($dbc);

// Membuat link-link ke halaman lain, jika diperlukan.
if ($hal > 1) {
   // Tambahkan spasi dan mulai paragraf:
   echo '<br /><p>';

   // Menentukan halaman apa skript dimulai:
   $hal_sekarang = ($mulai/$tampil) + 1;

   // Jika tidak pada halaman pertama, ciptakan tombol Sebelumnya:
   if ($hal_sekarang != 1) {
      echo '<a href="lihat_user.php?s=' . ($mulai - $tampil) .
           '&p=' . $hal . '&urut=' . $urut . '">Sebelumnya</a> ';
   }

   // Membuat halaman-halaman bernomor:
   for ($i = 1; $i <= $hal; $i++) {
      if ($i != $hal_sekarang) {
         echo '<a href="lihat_user.php?s=' . (($tampil * ($i - 1))) .
              '&p=' . $hal . '&urut=' . $urut . '">' . $i . '</a> ';
      } else {
         echo $i . ' ';
      }
   } // Akhir loop FOR.
  
   // Jika tidak pada halaman terakhir, ciptakan tombol Selanjutnya:
   if ($hal_sekarang != $hal) {
      echo '<a href="lihat_user.php?s=' . ($mulai + $tampil) .
           '&p=' . $hal . '&urut=' . $urut . '">Selanjutnya</a>';
   }
   echo '</p>'; // Tutup paragraf.
} // Akhir bagian link.

include ('kaki.html');
?>







No comments:

Post a Comment