Wednesday, December 14, 2016

Bab 7. PHP/MySQL: Langkah Demi Langkah




Menggunakan PHP dan MySQL






7.1 Memodifikasi Template

Karena semua halaman pada bab ini dan bab berikutnya akan menjadi bagian dari aplikasi Web yang sama, akan lebih baik bila menggunakan sistem template yang sama. Daripada membuat template yang baru, tata-letak dari Bab 3 akan digunakan kembali, dengan sedikit modifikasi pada beberapa link navigasi pada file kepala (header).

Membuat file kepala
1.   Buka file kepala.html pada editor teks Anda.
2.   Ubah beberap link yang ada (Skript 7.1).

<li><a href="indeks.php">Halaman Beranda</a></li>
<li><a href="registrasi.php">Registrasi</a></li>
<li><a href="lihat_user.php">Lihat User</a></li>
<li><a href="password.php">Ubah Password</a></li>
<li><a href="#">Link Lima</a></li>

Semua contoh pada bab ini akan melibatkan halaman registrasi, daftar user, dan pengubahan password. Link kalkulator dan form tanggal dari Bab 3 dihapus.

3.   Simpan file sebagai kepala.html.
4.   Uji file kepala baru dengan menjalankan indeks.php pada browser Web Anda (Gambar 7.1).

SKRIPT 7.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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title><?php echo $judul_hal;?></title>
        <link rel="stylesheet" href="style.css" type="text/css" media="screen"/>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
   
  </head>
  <body>
    <div id="kepala">
      <h1>Situs Web Anda</h1>
      <h2>Slogan hidup Anda...</h2>
    </div>
    <div id="navigasi">
      <ul>
        <li><a href="indeks.php">Halaman Beranda</a></li>
        <li><a href="registrasi.php">Registrasi</a></li>
        <li><a href="lihat_user.php">Lihat User</a></li>
        <li><a href="password.php">Ubah Password</a></li>
        <li><a href="#">Link Lima</a></li>
      </ul>
    </div>
    <div id="isi"><!-- Awal dari isi halaman spesifik. -->
    <!-- Skript 3.2 - kepala.html -->
  </body>
</html>


Gambar 7.1 Halaman beranda yang dibangkitkan secara dinamis yang memiliki beberapa link navigasi.



7.2 Terhubung Ke MySQL
Langkah pertama untuk berinteraksi dengan MySQL adalah melakukan koneksi ke server menggunakan fungsi mysqli_connect():

$dbc = mysqli_connect (namahost, namauser, password, nama_db);

Tiga argumen pertama yang dikirim ke fungsi adalah (namahost, namauser, dan password) adalah nilai-nilai yang dipilih oleh user. Nilai host di sini adalah localhost.

Argumen keempat adalah nama database yang digunakan. Ini ekivalen dengan

USE namadatabase

Jik koneksi dilakukan, variabel $dbc akan menjadi titik referensi untuk semua interaksi dengan database. Hampir semua fungsi PHP yang bekerja dengan MySQL akan mengambil argumen ini sebagai argumen pertama.

Jika ada masalah dengan koneksi, Anda dapat memanggil fungsi mysqli_connect_error(), yang menghasilkan pesan error koneksi.

Menghubungkan ke dan memilih database
1.   Ciptakan sebuah dokumen PHP yang baru pada editor teks atau IDE Anda (Skript 7.2).

<?php # Skritp 7.2 - mysqli_connect.php

File ini akan dicantumkan oleh skript PHP lain, jadi ia tidak perlu memuat HTML apapun.

SKRIPT 7.2
1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php # Skritp 7.2 - mysqli_connect.php
// File ini memuat informasi akses database.
// File ini melakukan koneksi ke MySQL
// dan menyeleksi database.

// Menetapkan konstanta-konstanta informasi akses database:
DEFINE ('DB_USER', 'rismon');
DEFINE ('DB_PASSWORD', '1977sihol1');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'namasitusku');

// Melakukan koneksi:
$dbc = @mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
OR die ('Tidak dapat terhubung ke MySQL: ' . mysqli_connect_error());

?>

2.   Tetapkan nama host, nama user, password, dan nama database sebagai konstanta.

// Menetapkan konstanta-konstanta informasi akses database:
DEFINE ('DB_USER', 'rismon');
DEFINE ('DB_PASSWORD', '1977sihol1');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'namasitusku');

Tiga konstanta pertama ditetapkan ketika Anda melakukan instalasi server PHP/MySQL. Anda bisa mengunduh beberapa server seperti WAMP server untuk kebutuhan ini.

3.   Lakukan koneksi ke MySQL.

// Melakukan koneksi:
$dbc = @mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
OR die ('Tidak dapat terhubung ke MySQL: ' . mysqli_connect_error());

Jika koneksi tidak berhasil dilakukan, maka pesan error koneksi akan ditampilkan (Gambar 7.2).


Gambar 7.2 Jika koneksi tidak berhasil dilakukan, pesan informatif akan ditampilkan dan skript berhenti dijalankan.


4.   Simpan file dengan nama mysqli_connect.php.



7.3 Mengeksekusi Query Sederhana
Setelah Anda berhasil melakukan koneksi ke database yang dipilih, Anda dapat melakukan query. Query ini dapat berupa penyisipan, pembaruan, penghapusan, atau operasi-operasi join yang lebih kompleks. Pada kasus tersebut, fungsi PHP untuk mengeksekusi sebuah query adalah mysqli_query():

hasil = mysqli_query(dbc, query);

Fungsi tersebut mengambil koneksi database sebagai argumen pertamanya dan query sebagai argumen kedua. Jadi, contoh eksekusi atas sebuah query tampak seperti ini:

$r = mysqli_query($dbc, $q);

Mengeksekusi query sederhana
1.   Ciptakan sebuah dokumen PHP yang baru pada editor teks atau IDE Anda (Skript 7.3).

$judul_hal = 'Registrasi';
include ('kepala.html');

2.   Ciptakan kondisional untuk pengiriman form dan inisialisasi $arrayError.

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

3.   Validasi nama depan.

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

4.   Validasi nama belakang dan alamat email.

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

5.   Validasi password.

// Memeriksa password dan mencocokkan password konfirmasi:
if (!empty($_POST['pass1'])) {
    if ($_POST['pass1'] != $_POST['pass2']) {
            $arrayError[] = 'Password Anda tidak cocok dengan password konfirmasi.';
    } else {
            $p = trim($_POST['pass1']);
    }
} else {
    $arrayError[] = 'Anda lupa memasukkan password Anda.';
}

6.   Periksa apakah tidak ada masalah dengan registrasi user.

if (empty($arrayError)) {

7.   Tambahkan user ke dalam database.

// Registrasi user di dalam database...
require_once ('mysqli_connect.php'); // Koneksi ke db.
           
// Melakukan query:
$q = "INSERT INTO pengguna (nama_depan, nama_belakang, email, pass, tanggal_registrasi)
VALUES ('$fn', '$ln', '$e', SHA1('$p'), NOW() )";          
$r = @mysqli_query ($dbc, $q); // Menjalankan query.

8.   Laporkan keberhasilan query.

if ($r) { // If it ran OK.
// Menampilkan pesan:
echo '<h1>Terimakasih!</h1>
    <p>Anda sekarang telah terdaftar!</p><p><br /></p>';   
           
} else { // Jika ada masalah.
    // Pesan error:
    echo '<h1>Error sistem</h1>
    <p class="error">Anda belum terdaftar!.</p>';
                   
    // Pesan debugging:
    echo '<p>' . mysqli_error($dbc) . '<br /><br />Query: ' . $q . '</p>';
                                           
} // Akhir dari if ($r) IF.

9.   Tutup koneksi database dan tutupk kode HTML.

// Mencantumkan file kaki dan keluar skript:
include ('kaki.html');
exit();

10.  Tampilkan pesan error dan tutup kondisional.

} else { // Melaporkan arrayError.
            echo '<h1>Error!</h1>
            <p class="error">Berikut adalah error yang terjadi:<br />';
            foreach ($arrayError as $psn) { // Menampilkan tiap error.
               echo " - $psn<br />\n";
            }
            echo '</p><p>Silahkan coba lagi.</p><p><br /></p>';
           
    } // Keluar dari if (empty($arrayError)) IF.
} // Keluar dari kondisional utama.

11.  Tutup kode PHP dan awali form HTML.

?>
<h1>Registrasi</h1>
<form action="registrasi.php" method="post">
    <p>Nama Depan: <input type="text" name="nama_depan" size="15" maxlength="20"
       value="<?php if (isset($_POST['nama_depan'])) echo $_POST['nama_depan']; ?>" /></p>
    <p>Nama Belakang: <input type="text" name="nama_belakang" size="15" maxlength="40"
       value="<?php if (isset($_POST['nama_belakang'])) echo $_POST['nama_belakang']; ?>" /></p>
    <p>Alamat Email: <input type="text" name="email" size="20" maxlength="80"
       value="<?php if (isset($_POST['email'])) echo $_POST['email']; ?>"  /> </p>
    <p>Password: <input type="password" name="pass1" size="10" maxlength="20" /></p>
    <p>Konfirmasi Password: <input type="password" name="pass2" size="10" maxlength="20" /></p>
    <p><input type="submit" name="submit" value="Registrasi" /></p>
    <input type="hidden" name="disubmit" value="TRUE" />
</form>

12.  Tutup template.

<?php
include ('kaki.html');
?>

13.  Simpan file sebagai registrasi.php.

SKRIPT 7.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
<?php # Skript 7.3 - registrasi.php
$judul_hal = 'Registrasi';
include ('kepala.html');

// Memeriksa apakah form telah disubmit:
if (isset($_POST['disubmit'])) {
   $arrayError = array(); // Inisialisasi array error.
       
   // Memeriksa nama depan:
   if (empty($_POST['nama_depan'])) {
      $arrayError[] = 'Anda lupa memasukkan nama depan.';
   } else {
      $fn = trim($_POST['nama_depan']);
   }
       
   // Memeriksa nama belakang:
   if (empty($_POST['nama_belakang'])) {
      $arrayError[] = 'Anda lupa memasukkan nama belakang.';
   } else {
      $ln = trim($_POST['nama_belakang']);
   }
       
   // Memeriksa alamat email:
   if (empty($_POST['email'])) {
      $arrayError[] = 'Anda lupa memasukkan alamat email.';
   } else {
      $e = trim($_POST['email']);
   }
       
   // Memeriksa password dan mencocokkan password konfirmasi:
   if (!empty($_POST['pass1'])) {
      if ($_POST['pass1'] != $_POST['pass2']) {
         $arrayError[] = 'Password Anda tidak cocok dengan password konfirmasi.';
      } else {
         $p = trim($_POST['pass1']);
      }
   } else {
      $arrayError[] = 'Anda lupa memasukkan password Anda.';
   }
       
   if (empty($arrayError)) { // Jika segala sesuatu OK.
      // Registrasi user di dalam database...
      require_once ('mysqli_connect.php'); // Koneksi ke db.
               
      // Melakukan query:
      $q = "INSERT INTO pengguna (nama_depan, nama_belakang, email, pass, tanggal_registrasi)
            VALUES ('$fn', '$ln', '$e', SHA1('$p'), NOW() )";          
      $r = @mysqli_query ($dbc, $q); // Menjalankan query.
      if ($r) { // If it ran OK.
         // Menampilkan pesan:
         echo '<h1>Terimakasih!</h1>
         <p>Anda sekarang telah terdaftar!</p><p><br /></p>';  
      } else { // Jika ada masalah.
      // Pesan error:
      echo '<h1>Error sistem</h1>
      <p class="error">Anda belum terdaftar!.</p>';
                       
      // Pesan debugging:
      echo '<p>' . mysqli_error($dbc) . '<br /><br />Query: ' . $q . '</p>';
                                               
   } // Akhir dari if ($r) IF.
   mysqli_close($dbc); // Menutup koneksi ke database.
               
   // Mencantumkan file kaki dan keluar skript:
   include ('kaki.html');
   exit();
               
   } else { // Melaporkan arrayError.
      echo '<h1>Error!</h1>
      <p class="error">Berikut adalah error yang terjadi:<br />';
      foreach ($arrayError as $psn) { // Menampilkan tiap error.
         echo " - $psn<br />\n";
      }
      echo '</p><p>Silahkan coba lagi.</p><p><br /></p>';
               
   } // Keluar dari if (empty($arrayError)) IF.
} // Keluar dari kondisional utama.
?>
<h1>Registrasi</h1>
<form action="registrasi.php" method="post">

<p>Nama Depan: <input type="text" name="nama_depan" size="15" maxlength="20"
value="<?php if (isset($_POST['nama_depan'])) echo $_POST['nama_depan']; ?>" /></p>

<p>Nama Belakang: <input type="text" name="nama_belakang" size="15" maxlength="40"
value="<?php if (isset($_POST['nama_belakang'])) echo $_POST['nama_belakang']; ?>" /></p>

<p>Alamat Email: <input type="text" name="email" size="20" maxlength="80"
value="<?php if (isset($_POST['email'])) echo $_POST['email']; ?>"  /> </p>

<p>Password: <input type="password" name="pass1" size="10" maxlength="20" /></p>
<p>Konfirmasi Password: <input type="password" name="pass2" size="10" maxlength="20" /></p>

<p><input type="submit" name="submit" value="Registrasi" /></p>
<input type="hidden" name="disubmit" value="TRUE" />

</form>
<?php
include ('kaki.html');
?>


Gambar 7.3 Tampilan halaman registrasi.php

  
Gambar 7.4 Konfirmasi ketika user telah berhasil didaftarkan.


Gambar 7.5 Pesan error ditampilkan ketika form tidak diisi dengan benar.



7.4 Membaca Hasil Query
Bab 6 telah mendemonstrasikan bagaimana mengeksekusi query-query sederhana pada sebuah database MySQL. Sekarang waktunya bagi Anda untuk mendemonstrasikannya di dalam file PHP.

1.   Ciptakan sebuah dokumen PHP yang baru pada editor teks atau IDE Anda (Skript 7.4).

<?php # Skript 7.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>';

2.   Koneksi ke database dan lakukan query:

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

// Melakukan query:
$q = "SELECT CONCAT(nama_belakang, ', ', nama_depan) AS nama,
DATE_FORMAT(tanggal_registrasi, '%M %d, %Y') AS dr FROM pengguna
ORDER BY tanggal_registrasi ASC";
$r = @mysqli_query ($dbc, $q); // Menjalankan query.

3.   Tampilkan hasil query.

if ($r) { // Jika OK, tampilkan semua rekaman.
   // Kepala tabel.
   echo '<table align="center" cellspacing="3" cellpadding="3" width="75%">
         <tr><td align="left"><b>Name</b></td><tdalign="left">
             <b>Tanggal Daftar</b></td></tr>';

   // Menampilkan semua rekaman:
   while ($baris = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
      echo '<tr><td align="left">' .
      $baris['nama'] . '</td><td align="left">'
     . $baris['dr'] . '</td></tr>';
   }
   echo '</table>'; // Tutup tabel.

4.   Bebesakan resouce.

mysqli_free_result ($r); // Membebaskan resource

5.   Sempurnakan kondisional utama.

} else { // If it did not run OK.
   // Pesan umum:
   echo '<p class="error">Daftar user tidak bisa dibaca. Maaf...</p>';

   // Pesan debugging:
   echo '<p>' . mysqli_error($dbc) . '<br/><br />Query: ' . $q . '</p>';
} // Akhir dari if ($r) IF.

6.   Tutup koneksi database dan halaman.

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

7.   Simpan file dengan nama lihat_user.php, tempatkan pada direktori Web, dan uji dengan browser Web Anda (Gambar 7.6).

SKRIPT 7.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
<?php # Skript 7.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.

// Melakukan query:
$q = "SELECT CONCAT(nama_belakang, ', ', nama_depan) AS nama,
DATE_FORMAT(tanggal_registrasi, '%M %d, %Y') AS dr FROM pengguna
ORDER BY tanggal_registrasi ASC";
$r = @mysqli_query ($dbc, $q); // Menjalankan query.

if ($r) { // Jika OK, tampilkan semua rekaman.
   // Kepala tabel.
   echo '<table align="center" cellspacing="3" cellpadding="3" width="75%">
         <tr><td align="left"><b>Nama</b></td><tdalign="left">
                 <b>Tanggal Daftar</b></td></tr>';

   // Menampilkan semua rekaman:
   while ($baris = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
      echo '<tr><td align="left">' .
      $baris['nama'] . '</td><td align="left">'
     . $baris['dr'] . '</td></tr>';
   }
   echo '</table>'; // Tutup tabel.
   mysqli_free_result ($r); // Membebaskan resource
} else { // Jika ada masalah.
   // Pesan umum:
   echo '<p class="error">Daftar user tidak bisa dibaca. Maaf...</p>';

   // Pesan debugging:
   echo '<p>' . mysqli_error($dbc) . '<br/><br />Query: ' . $q . '</p>';
} // Akhir dari if ($r) IF.

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


Gambar 7.6 Semua rekaman dibaca dari database dan ditampilkan pada browser Web.



7.5 Mengamankan SQL
Keamanan database dilakukan dengan:
1.   Melindungi informasi akses MySQL.
2.   Tidak memberitahu informasi terlalu banyak mengenai database.
3.   Hati-hati dengan query, khususnya yang melibatkan data yang disubmit oleh user.

Oleh karena alasan ini, fungsi mysqli_real_escape_string() sebaiknya digunakan pada tiap masukan teks pada sebuah form. Untuk mendemonstrasikannya, halaman registrasi.php akan diperbaiki.

1.   Bukan halaman registrasi.php pada editor teks atau IDE Anda.
2.   Pindahkan inklusi file myslqi_connect.php ke tepat sebelum kondisional utama (Skript 7.5).
3.   Ubah validasi agar menggunakan fungsi mysqli_real_escape_string().

// 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']));
   }
   
   // Memeriksa password dan mencocokkan password konfirmasi:
   if (!empty($_POST['pass1'])) {
      if ($_POST['pass1'] != $_POST['pass2']) {
         $arrayError[] = 'Password Anda tidak cocok dengan password konfirmasi.';
      } else {
         $p = mysqli_real_escape_string($dbc, trim($_POST['pass1']));
      }
   } else {
      $arrayError[] = 'Anda lupa memasukkan password Anda.';
   }

4.   Tambahkan panggilan kedua pada mysqli_cloce() tepat sebelum akhir dari kondisional utama.

5.   Simpan file dengan nama registrasi.php, tempatkan pada direktori Web, dan uji dengan browser Web Anda (Gambar 7.7 dan Gambar 7.8).

SKRIPT 7.5
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
<?php # Skript 7.5 - registrasi.php
$judul_hal = 'Registrasi';
include ('kepala.html');

// Memeriksa apakah form telah disubmit:
if (isset($_POST['disubmit'])) {
   // Registrasi user di dalam database...
   require_once ('mysqli_connect.php'); // Koneksi ke db.

   $arrayError = array(); // Inisialisasi array error.
       
   // 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']));
   }
       
   // Memeriksa password dan mencocokkan password konfirmasi:
   if (!empty($_POST['pass1'])) {
      if ($_POST['pass1'] != $_POST['pass2']) {
         $arrayError[] = 'Password Anda tidak cocok dengan password konfirmasi.';
      } else {
         $p = mysqli_real_escape_string($dbc, trim($_POST['pass1']));
      }
   } else {
      $arrayError[] = 'Anda lupa memasukkan password Anda.';
   }
       
   if (empty($arrayError)) { // Jika segala sesuatu OK.
      // Melakukan query:
      $q = "INSERT INTO pengguna (nama_depan, nama_belakang, email, pass, tanggal_registrasi)
            VALUES ('$fn', '$ln', '$e', SHA1('$p'), NOW() )";          
      $r = @mysqli_query ($dbc, $q); // Menjalankan query.
      if ($r) { // If it ran OK.
         // Menampilkan pesan:
         echo '<h1>Terimakasih!</h1>
         <p>Anda sekarang telah terdaftar!</p><p><br /></p>';  
      } else { // Jika ada masalah.
      // Pesan error:
      echo '<h1>Error sistem</h1>
      <p class="error">Anda belum terdaftar!.</p>';
                       
      // Pesan debugging:
      echo '<p>' . mysqli_error($dbc) . '<br /><br />Query: ' . $q . '</p>';
                                               
   } // Akhir dari if ($r) IF.
   mysqli_close($dbc); // Menutup koneksi ke database.
               
   // Mencantumkan file kaki dan keluar skript:
   include ('kaki.html');
   exit();
               
   } else { // Melaporkan arrayError.
      echo '<h1>Error!</h1>
      <p class="error">Berikut adalah error yang terjadi:<br />';
      foreach ($arrayError as $psn) { // Menampilkan tiap error.
         echo " - $psn<br />\n";
      }
      echo '</p><p>Silahkan coba lagi.</p><p><br /></p>';
               
   } // Keluar dari if (empty($arrayError)) IF.
  
   mysqli_close($dbc); // Menutup koneksi ke database.
  
} // Keluar dari kondisional utama.
?>
<h1>Registrasi</h1>
<form action="registrasi.php" method="post">

<p>Nama Depan: <input type="text" name="nama_depan" size="15" maxlength="20"
value="<?php if (isset($_POST['nama_depan'])) echo $_POST['nama_depan']; ?>" /></p>

<p>Nama Belakang: <input type="text" name="nama_belakang" size="15" maxlength="40"
value="<?php if (isset($_POST['nama_belakang'])) echo $_POST['nama_belakang']; ?>" /></p>

<p>Alamat Email: <input type="text" name="email" size="20" maxlength="80"
value="<?php if (isset($_POST['email'])) echo $_POST['email']; ?>"  /> </p>

<p>Password: <input type="password" name="pass1" size="10" maxlength="20" /></p>
<p>Konfirmasi Password: <input type="password" name="pass2" size="10" maxlength="20" /></p>

<p><input type="submit" name="submit" value="Registrasi" /></p>
<input type="hidden" name="disubmit" value="TRUE" />

</form>
<?php
include ('kaki.html');
?>

Gambar 7.7 User baru melakukan registrasi.


Gambar 7.8 User baru telah terdaftar di dalam database.



7.6 Menghitung Banyak Rekaman
Fungsi lain yang akan didiskusikan adalah mysqli_num_rows(). Fungsi ini menghasilkan jumlah baris yang dibacak oleh query SELECT, dengan sintaksis berikut:

$jum = mysqli_num_rows($r);

1.   Buka lihat_user.php pada editor teks atau IDE Anda.

2.   Tepat sebelum kondisional if ($r), tambahkan baris ini (Skript 7.6).

$jum = mysqli_num_rows($r);

Baris ini akan menugaskan banyak baris yang dihasilkan oleh query kepada variabel $jum.

SKRIPT 7.6
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
<?php # Skript 7.6 - 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 CONCAT(nama_belakang, ', ', nama_depan) AS nama,
DATE_FORMAT(tanggal_registrasi, '%M %d, %Y') AS dr 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>Nama</b></td><tdalign="left">
                 <b>Tanggal Daftar</b></td></tr>';

   // Menampilkan semua rekaman:
   while ($baris = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
      echo '<tr><td align="left">' .
      $baris['nama'] . '</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 7.9 Banyak user telah ditampilkan.


3.   Ubah kondisional $r menjadi:

if ($jum > 0) {

4.   Tepat sebelum menciptakan tabel HTML, tampilkan jumlah user yang telah terdaftar.

// Menampilkan berapa banyak user:
echo "<p>Ada sebanyak $jum user yang telah terdaftar.</p>\n";

5.   Ubah bagian else dari kondisional utama.

} else { // Jika tidak ada rekaman yang dihasilkan.
   echo '<p class="error">Tidak ada user yang telah terdaftar.</p>';

6.   Simpan file dengan nama lihat_user.php, tempatkan pada direktori Web, dan uji dengan browser Web Anda (Gambar 7.9).



7.7 Memperbarui Rekaman dengan PHP
Teknik terakhir yang akan didiskusikan pada bab ini adalah bagaimana memperbarui rekaman-rekaman database melalui sebuah skript PHP. Untuk melakukannya, diperlukan sebuah query UPDATE. Keberhasilan ekskusi dapat diverifikasi dengan fungsi PHP mysqli_affected_rows().

1.   Ciptakan sebuah skript PHP baru pada editor teks atau IDE Anda (Skript 7.7).

<?php # Skript 7.7 - password.php
// Halaman ini dipakai oleh user untuk mengubah passwordnya.

$judul_hal = 'Ubah password Anda';
include ('kepala.html');

2.   Awali kondisional utama.

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

SKRIPT 7.7
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
<?php # Skript 7.7 - password.php
// Halaman ini dipakai oleh user untuk mengubah passwordnya.

$judul_hal = 'Ubah password Anda';
include ('kepala.html');

// Memeriksa apakah form telah dikirim:
if (isset($_POST['disubmit'])) {
   require_once ('mysqli_connect.php');
   // Koneksi ke db.

   $arrayError = array(); // Menginisialisasi array error.

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

   // Check for the current password:
   if (empty($_POST['pass'])) {
      $arrayError[] = 'Anda lupa memasukkan password.';
   } else {
      $p = mysqli_real_escape_string($dbc, trim($_POST['pass']));
   }

   // Memeriksa password baru dan mencocokkan
   // dengan password konfirmasi:
   if (!empty($_POST['pass1'])) {
      if ($_POST['pass1'] != $_POST['pass2']) {
         $arrayError[] = 'Password baru Anda tidak cocok dengan password konfirmasi.';
      } else {
         $np = mysqli_real_escape_string($dbc, trim($_POST['pass1']));
      }
   } else {
      $arrayError[] = 'Anda lupa memasukkan password baru.';
   }

   if (empty($arrayError)) { // Jika semuanya OK.
      // Memeriksa apakah user memasukkan kombinasi
          // pasangan alamat email/password yang tepat:
      $q = "SELECT id_user FROM pengguna
               WHERE (email='$e' AND pass=SHA1('$p') )";
      $r = @mysqli_query($dbc, $q);
      $jum = @mysqli_num_rows($r);
      if ($jum == 1) { // Cocok.
         // Membaca id_user:
         $baris = mysqli_fetch_array($r, MYSQLI_NUM);

         // Melakukan query UPDATE:
         $q = "UPDATE pengguna SET
              pass=SHA1('$np')
                          WHERE id_user=$baris[0]";
         $r = @mysqli_query($dbc, $q);
         if (mysqli_affected_rows($dbc) ==1) { // Jika OK.
            // Tampilkan pesan.
            echo '<h1>Terimakasih!</h1>
                 <p>Password Anda telah diperbarui.</p><p><br /></p>';

         } else { // Jika ada masalah.
            // Pesan umum:
            echo '<h1>Error Sistem</h1>
                 <p class="error">Password Anda tidak dapat diperbarui. Maaf.</p>';

            // Pesan Debugging:
            echo '<p>' . mysqli_error($dbc) . '<br /><br />Query: ' . $q . '</p>';
         }

         // Mencantumkan file kaki dan keluar dari skript.
         include ('kaki.html');
         exit();
      } else { // Kombinasi email/password tak-valid
         echo '<h1>Error!</h1>
              <p class="error">Alamat email dan password tidak cocok.</p>';
      }
   } else { // Melaporkan arrayError.
      echo '<h1>Error!</h1>
           <p class="error">Berikut adalah error yang terjadi:<br />';
      foreach ($arrayError as $psn) { // Menampilkan tiap error.
         echo " - $psn<br />\n";
      }
      echo '</p><p>Silahkan coba lagi.</p><p><br /></p>';
   } // Akhir dari if (empty($arrayError)) IF.

   mysqli_close($dbc); // Menutup koneksi database.
} // Akhir dari kondisional utama.
?>
<h1>Ubah Password Anda</h1>
  <form action="password.php" method="post">
    <p>Alamat Email: <input type="text" name="email" size="20" maxlength="80"
       value="<?php if (isset($_POST['email'])) echo $_POST['email']; ?>" /> </p>
    <p>Password Sekarang: <input type="password" name="pass" size="10" maxlength="20" /></p>
    <p>Password Baru: <input type="password" name="pass1" size="10" maxlength="20"/></p>
    <p>Konfirmasi Password Baru: <input type="password" name="pass2" size="10" maxlength="20" /></p>
    <p><input type="submit" name="submit" value="Change Password" /></p>
    <input type="hidden" name="disubmit" value="TRUE" />
  </form>
<?php
include ('kaki.html');
?>

3.   Cantumkan koneksi database dan ciptakan sebuah array untuk menyimpan error.

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

$arrayError = array(); // Menginisialisasi array error.

4.   Validasi alamat email dan bidang password.

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

   // Check for the current password:
   if (empty($_POST['pass'])) {
      $arrayError[] = 'Anda lupa memasukkan password.';
   } else {
      $p = mysqli_real_escape_string($dbc, trim($_POST['pass']));
   }

5.   Validasi password baru.

// Memeriksa password baru dan mencocokkan
// dengan password konfirmasi:
   if (!empty($_POST['pass1'])) {
      if ($_POST['pass1'] != $_POST['pass2']) {
         $arrayError[] = 'Password baru Anda tidak cocok dengan password konfirmasi.';
      } else {
         $np = mysqli_real_escape_string($dbc, trim($_POST['pass1']));
      }
   } else {
      $arrayError[] = 'Anda lupa memasukkan password baru.';
   }

6.   Jika semua pemeriksaan dilewati, baca ID user.

if (empty($arrayError)) { // Jika semuanya OK.
   // Memeriksa apakah user memasukkan kombinasi
   // pasangan alamat email/password yang tepat:
   $q = "SELECT id_user FROM pengguna
        WHERE (email='$e' AND pass=SHA1('$p') )";
   $r = @mysqli_query($dbc, $q);
   $jum = @mysqli_num_rows($r);
   if ($jum == 1) { // Cocok.
      // Membaca id_user:
      $baris = mysqli_fetch_array($r, MYSQLI_NUM);

7.   Perbarui database.

// Melakukan query UPDATE:
$q = "UPDATE pengguna SET
     pass=SHA1('$np')
     WHERE id_user=$baris[0]";
$r = @mysqli_query($dbc, $q);

8.   Periksa hasil query.

if (mysqli_affected_rows($dbc) ==1) { // Jika OK.
   // Tampilkan pesan.
   echo '<h1>Terimakasih!</h1>
        <p>Password Anda telah diperbarui.</p><p><br /></p>';

} else { // Jika ada masalah.
   // Pesan umum:
   echo '<h1>Error Sistem</h1>
        <p class="error">Password Anda tidak dapat diperbarui. Maaf.</p>';

   // Pesan Debugging:
   echo '<p>' . mysqli_error($dbc) . '<br /><br />Query: ' . $q . '</p>';
}

9.   Cantumkan file kaki dan hentikan skript.

// Mencantumkan file kaki dan keluar dari skript.
include ('kaki.html');
exit();

10.  Sempurnakan kondisional if ($jum == 1).

} else { // Kombinasi email/password tak-valid
   echo '<h1>Error!</h1>
        <p class="error">Alamat email dan password tidak cocok.</p>';
}

11.  Tampilkan tiap pesan error validasi.

} else { // Melaporkan arrayError.
   echo '<h1>Error!</h1>
        <p class="error">Berikut adalah error yang terjadi:<br />';
   foreach ($arrayError as $psn) { // Menampilkan tiap error.
      echo " - $psn<br />\n";
   }
   echo '</p><p>Silahkan coba lagi.</p><p><br /></p>';
} // Akhir dari if (empty($arrayError)) IF.

12.  Tutup koneksi database dan kode PHP.

   mysqli_close($dbc); // Menutup koneksi database.
} // Akhir dari kondisional utama.
?>

13.  Tampilkan form.

<h1>Ubah Password Anda</h1>
  <form action="password.php" method="post">
    <p>Alamat Email: <input type="text" name="email" size="20" maxlength="80"
       value="<?php if (isset($_POST['email'])) echo $_POST['email']; ?>" /> </p>
    <p>Password Sekarang: <input type="password" name="pass" size="10" maxlength="20" /></p>
    <p>Password Baru: <input type="password" name="pass1" size="10" maxlength="20"/></p>
    <p>Konfirmasi Password Baru: <input type="password" name="pass2" size="10" maxlength="20" /></p>
    <p><input type="submit" name="submit" value="Change Password" /></p>
    <input type="hidden" name="disubmit" value="TRUE" />
  </form>


Gambar 7.10 User mengisi form untuk mengubah password.


Gambar 7.11 Pesan konfirmasi bahwa password telah diperbarui.


Gambar 7.12 Pesan yang menyatakan ketidak-sesuaian pasangan email/password.

14.  Cantumkan file kaki.

<?php
include ('kaki.html');
?>

15.  Simpan file dengan nama password.php, tempatkan pada direktori Web Anda, dan uji dengan browser Web Anda (Gambar 7.10, Gambar 7.11, dan Gambar 7.12).




















No comments:

Post a Comment