Sunday, January 8, 2017

Bab 13. PHP/MySQL Untuk Pemula


Pelbagai Teknik Pemrograman PHP & MySQL



Mengirimkan Nilai Ke Sebuah Skrip
Pada contoh-contoh sebelumnya, semua data yang diterima pada skrip PHP berasal dari apa yang dimasukkan pengguna dalam sebuah form. Cara pertama agar Anda dapat melewatkan variabel dan nilai kepada sebuah skrip. Hal ini dilakukan dengan tipe masukan hidden dari HTML:

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

Cara kedua dalam mengirimkan nilai kepada sebuah skrip PHP adalah dengan melekatkannya pada URL, seperti:

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

Kasus berikut akan memperbarui skrip lihat_pengguna.php, sehingga disediakan beberapa link untuk melakukan pengeditan dan penghapusan rekaman pengguna yang telah ada. Link-link tersebut akan melewatkan id pengguna kepada halaman-halaman tertentu.

<?php # lihat_pengguna.php
// Skrip ini membaca semua rekaman
// dari tabel pengguna.

$judul_halaman = 'Registrasi';
include ('C:\wamp\www\header.html');

// Header halaman:
echo '<h1>Daftar Pengguna yang Terdaftar</h1>';

// Koneksi ke database
require_once ('C:\wamp\www\koneksi_mysqli.php');

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

// Menghitung jumlah baris yang dihasilkan
$jum = mysqli_num_rows($r);

if ($jum > 0) { // Jika berjalan Ok, tampilkan rekaman
    // Menampilkan berapa banyak pengguna
    echo "<p>Sekarang terdapat $jum
         pengguna yang terdaftar.</p>\n";
             
    // Header 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_pengguna.php?id=' .
                    $baris['id_pengguna'] . '">Edit</a></td>
            <td align="left"><a href="hapus_pengguna.php?id=' .
                    $baris['id_pengguna'] . '">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>'; // Menutup tabel

    mysqli_free_result ($r); // Membebaskan sumber-daya

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

} // Akhir dari IF.

mysqli_close($dbc); // Menutup koneksi ke database

include ('C:\wamp\www\footer.html');
?>





Menggunakan Masukan Form Hidden
Pada contoh sebelumnya, versi baru dari lihat_pengguna.php telah dituliskan. Versi tersebut memuat dua link ke halaman edit_pengguna.php dan hapus_pengguna.php, yang melewatkan setiap id pengguna melalui URL. Pada contoh ini, file hapus_pengguna.php akan mengambil id pengguna yang dilewatkan sehingga administrator dapat menghapus pengguna tersebut.

<?php # hapus_pengguna.php

// Halaman ini untuk menghapus rekaman pengguna
// Halaman ini diakses melalui lihat_pengguna.php

$judul_halaman = 'Hapus Pengguna';
include ('C:\wamp\www\header.html');
echo '<h1>Hapus Pengguna</h1>';

// Memeriksa id pengguna yang valid melalui GET atau POST:
if ( (isset($_GET['id'])) && (is_numeric($_GET['id'])) ) {
    // Dari lihat_pengguna.php
    $id = $_GET['id'];
} elseif ( (isset($_POST['id'])) && (is_numeric($_POST['id'])) ) {
    // Submisi form
    $id = $_POST['id'];
} else { // tidak ada id yang valid
    echo '<p class="error">Halaman ini diakses dengan error.</p>';
    include ('C:\wamp\www\footer.html');
    exit();
}

require_once ('C:\wamp\www\koneksi_mysqli.php');

// Memeriksa apakah form terlah disubmit
if (isset($_POST['submitted'])) {
    if ($_POST['pasti'] == 'Ya') {
          // Hapus rekaman
        // Melakukan query
        $q = "DELETE FROM pengguna
                WHERE id_pengguna = $id LIMIT 1";
        $r = @mysqli_query ($dbc, $q);

        if (mysqli_affected_rows($dbc) == 1) { // Jika OK
            // Tampilkan pesan
            echo '<p>Pengguna tersebut telah dihapus.</p>';
        } else { // Jika tidak OK
            echo '<p class="error">Pengguna tidak dapat
                  dihapus karena error pada sistem.</p>';
                         
            // Pesan debugging
                  echo '<p>' . mysqli_error($dbc) . '<br/>Query: ' . $q . '</p>';
        }

    } else { // Tidak ada konfirmasi penghapusan
        echo '<p>Pengguna belum dihapus.</p>';
    }
     
} else { // Menampilkan form
    // Membaca informasi pengguna
    $q = "SELECT CONCAT(nama_belakang, ', ', nama_depan)
          FROM pengguna
            WHERE id_pengguna = $id";
    $r = @mysqli_query ($dbc, $q);

    if (mysqli_num_rows($r) == 1) { // id pengguna valid, tampilkan form
        // Membaca informasi pengguna
        $baris = mysqli_fetch_array ($r, MYSQLI_NUM);

        // Menciptakan form
        echo '<form action="hapus_pengguna.php" method="post">
        <h3>Nama: ' . $baris[0] . '</h3>
           
        <p>Apakah Anda yakin ingin menghapus pengguna ini??<br />
        <input type="radio" name="pasti" value="Ya" /> Ya
            <input type="radio" name="pasti" value="Tidak"
            checked="checked" /> Tidak </p>
           
        <p><input type="submit" name="submit" value="Submit" /></p>
        <input type="hidden" name="submitted" value="TRUE" />
        <input type="hidden" name="id" value="'. $id . '" />
        </form>';
           
    } else { //id pengguna tidak valid
        echo '<p class="error">Halaman ini error.</p>';
    }
} // Akhir submisi utama

mysqli_close($dbc);

include ('C:\wamp\www\footer.html');
 ?>






Mengedit Rekaman
Hal yang biasa dilakukan pada situs web berbasis database adalah mengedit rekaman yang telah ada. Konsep ini cukup menakutkan bagi programer pemula, tetapi Anda bisa belajar hanya dengan mengamati kode yang diberikan pada buku ini.

Simpan file berikut dengan nama edit_pengguna.php.






<?php # edit_pengguna.php

// Halaman ini untuk menghapus rekaman pengguna
// Halaman ini diakses melalui lihat_pengguna.php

$judul_halaman = 'Edit Pengguna';
include ('C:\wamp\www\header.html');

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

// Memeriksa validitas id pengguna dengan GET atau POST
if ( (isset($_GET['id'])) && (is_numeric($_GET['id'])) ) {
    // Dari lihat_pengguna.php
    $id = $_GET['id'];
} elseif ( (isset($_POST['id'])) && (is_numeric($_POST['id'])) ) {
    // Submisi form
    $id = $_POST['id'];
} else { // Tidak valid, keluar skrip
    echo '<p class="error">Halaman ini diakses dengan error.</p>';
    include ('C:\wamp\www\footer.html');
    exit();
}

require_once ('C:\wamp\www\koneksi_mysqli.php');

// Memeriksa apakah form telah disubmit
if (isset($_POST['submitted'])) {
    $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 OK,
        // Menguji keunikan alamat email
        $q = "SELECT id_pengguna
                FROM pengguna
                  WHERE email='$e' AND id_pengguna != $id";
        $r = @mysqli_query($dbc, $q);

        if (mysqli_num_rows($r) == 0) {
            // Melakukan query
            $q = "UPDATE pengguna
                      SET nama_depan='$fn',
                            nama_belakang='$ln',
                              email='$e'
                WHERE id_pengguna=$id LIMIT 1";
            $r = @mysqli_query ($dbc, $q);
           
                  if (mysqli_affected_rows($dbc) == 1) { // Jika OK
                // Tampilkan pesan
                echo '<p>Pengguna telah diedit.</p>';
            } else { // Jika jidak OK
                echo '<p class="error">Pengguna tidak bisa
                    diedit karena error pada sistem.
                    Maaf atas ketidak-nyamanan ini.
                    </p>'; // pesan umum
               
                        echo '<p>' . mysqli_error($dbc) . '<br/>Query: ' .
                             $q . '</p>'; // pesan debuggin
            }

        } else { // Telah terdaftar
            echo '<p class="error">Email telah didaftar.</p>';
        }
    } else { // Melaporkan error
        echo '<p class="error">Terjadi error berikut:<br />';
        foreach ($errors as $msg) { // Menampilkan tiap error
            echo " - $msg<br />\n";
        }
        echo '</p><p>Silahkan coba lagi.</p>';
    } // Akhir dari IF.
} // Akhir dari submisi kondisional

// Selalu menampilkan form

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

if (mysqli_num_rows($r) == 1) { // id pengguna valid, tampilkan form
    // Membaca informasi pengguna
    $baris = mysqli_fetch_array ($r, MYSQLI_NUM);

    // Menciptakan form
    echo '<form action="edit_pengguna.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="submitted" value="TRUE" />
    <input type="hidden" name="id" value="' . $id . '" />
    </form>';
     
} else { // id user tidak valid
    echo '<p class="error">Halaman ini diakses dengan error.</p>';
}

mysqli_close($dbc);

include ('C:\wamp\www\footer.html');
?>


Melakukan Paginasi Pada Hasil Query
Paginasi merupakan sebuah konsep yang sering Anda gunakan meskipun Anda tidak mengetahuinya. Ketika Anda melakukan pencarian menggunakan mesin pencari seperti Google, mesin tersebut akan menampilkan sebagai suatu rangkaian atau runtun halaman dan bukan sebagai suatu daftar yang panjang. Skrip pada file lihat_pengguna.php dapat dibuat agar memiliki fitur semacam itu.

<?php # lihat_pengguna.php
// Skrip ini membaca semua rekaman
// dari tabel pengguna.

$judul_halaman = 'Registrasi';
include ('C:\wamp\www\header.html');

// Header halaman:
echo '<h1>Daftar Pengguna yang Terdaftar</h1>';

// Koneksi ke database
require_once ('C:\wamp\www\koneksi_mysqli.php');

// Jumlah halaman yang ditampilkan per halaman
$tampil = 10;

// Menentukan berapa banyak halaman yang ada
if (isset($_GET['p']) && is_numeric($_GET ['p'])) { // sudah ditentukan
    $halaman = $_GET['p'];
} else { // perlu ditentukan
    // Menghitung jumlah rekaman
    $q = "SELECT COUNT(id_pengguna) FROM pengguna";
    $r = @mysqli_query ($dbc, $q);
    $baris = @mysqli_fetch_array ($r, MYSQLI_NUM);
    $rekaman = $baris[0];
     
      // Menghitung jumlah halaman
    if ($rekaman > $tampil) { // Lebih dari 1 halaman
        $halaman = ceil ($rekaman/$tampil);
    } else {
       $halaman = 1;
    }
} // Akhir dari IF.

// 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_pengguna FROM pengguna
      ORDER BY tanggal_registrasi ASC LIMIT $mulai,
    $tampil";
     
$r = @mysqli_query ($dbc, $q); // Jalankan query

// Header 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_pengguna.php?id=' .
      $baris['id_pengguna'] . '">Edit</a></td>
   
    <td align="left"><a href="hapus_pengguna.php?id=' .
    $baris['id_pengguna'] . '">Hapus</a></td>
   
    <td align="left">' . $baris['nama_belakang'] . '</td>
    <td align="left">' . $baris['nama_depan'] . '</td>
    <td align="left">' . $baris['dr'] . '</td>
    </tr>';
} //Akhir loop while

echo '</table>'; // Menutup tabel

mysqli_free_result ($r); // Membebaskan sumber-daya

mysqli_close($dbc); // Menutup koneksi ke database

// Membuat link-link ke halaman lain jika diperlukan
if ($halaman > 1) {
    // Menambahkan beberapa spasi dan memulai sebuah paragraf
    echo '<br /><p>';

    // Mementukan halaman dimana skrip berada
    $halaman_skrg = ($mulai/$tampil) + 1;

    // Jika tidak ada pada halaman pertama, maka buat sebuah tombol Sebelumnya
    if ($halaman_skrg != 1) {
        echo '<a href="lihat_pengguna.php?s=' . ($mulai - $tampil) . '&p=' .
        $halaman . '">Sebelumnya</a> ';
    }

    // Membuat semua halaman bernomot
    for ($i = 1; $i <= $halaman; $i++) {
    if ($i != $halaman_skrg) {
        echo '<a href="lihat_pengguna.php?s=' . (($tampil * ($i - 1))) .
            '&p=' . $halaman . '">' . $i . '</a> ';
    } else {
        echo $i . ' ';
    }
} // Akhir dari loop for

// Jika pada halam terakhir,
// buat tombol Selanjutnya
if ($halaman_skrg != $halaman) {
    echo '<a href="lihat_pengguna.php?s=' . ($mulai + $tampil) .
      '&p=' . $halaman . '">Selanjutnya</a>';
}

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

include ('C:\wamp\www\footer.html');
?>






Membuat Tampilan Terurut
Untuk mengakhiri bab ini, ada satu fitur terakhir yang bisa ditambahkan pada file lihat_pengguna.php. Pada keadaannya sekarang, daftar pengguna ditampilkan terurut berdasarkan tanggal ketika pengguna mendaftar. Akan lebih bagus jika Anda bisa melihatnya terurut berdasarkan nama juga.

Dari perspektif MySQL, hal ini merupakan pekerjaan yang mudah. Anda hanya perlu mengubah klausa ORDER BY. Oleh karena itu, yang perlu dilakukan adalah menambahkan beberapa fungsionalitas dalam PHP untuk mengubah klausa ORDER BY tersebut. Cara yang logis untuk melakukannya adalah menghubungkan kepala-kepala kolom sehingga Anda bisa mengubah urutan dengan mengklik kepala kolom tersebut.

<?php # lihat_pengguna.php
// Skrip ini membaca semua rekaman
// dari tabel pengguna.

$judul_halaman = 'Registrasi';
include ('C:\wamp\www\header.html');

// Header halaman:
echo '<h1>Daftar Pengguna yang Terdaftar</h1>';

// Koneksi ke database
require_once ('C:\wamp\www\koneksi_mysqli.php');

// Jumlah halaman yang ditampilkan per halaman
$tampil = 10;

// Menentukan berapa banyak halaman yang ada
if (isset($_GET['p']) && is_numeric($_GET ['p'])) { // sudah ditentukan
    $halaman = $_GET['p'];
} else { // perlu ditentukan
    // Menghitung jumlah rekaman
    $q = "SELECT COUNT(id_pengguna) FROM pengguna";
    $r = @mysqli_query ($dbc, $q);
    $baris = @mysqli_fetch_array ($r, MYSQLI_NUM);
    $rekaman = $baris[0];
     
      // Menghitung jumlah halaman
    if ($rekaman > $tampil) { // Lebih dari 1 halaman
        $halaman = ceil ($rekaman/$tampil);
    } else {
       $halaman = 1;
    }
} // Akhir dari IF.

// 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 adalah tanggal registrasi
$urut = (isset($_GET['urut'])) ? $_GET ['urut'] : 'rd';

// Menentukan tatanan pengurutan
switch ($urut) {
    case 'ln':
        $urut_dengan = 'nama_belakang ASC';
        break;
    case 'fn':
        $urut_dengan = 'nama_depan ASC';
        break;
    case 'rd':
        $urut_dengan = 'tanggal_registrasi ASC';
        break;
    default:
        $urut_dengan = 'tanggal_registrasi ASC';
        $urut = 'rd';
        break;
}

// Melakukan query
$q = "SELECT nama_belakang, nama_depan,
    DATE_FORMAT(tanggal_registrasi, '%M %d, %Y')
      AS dr, id_pengguna FROM pengguna
      ORDER BY $urut_dengan
    LIMIT $mulai, $tampil";
     
$r = @mysqli_query ($dbc, $q); // Jalankan query

// Header tabel
echo '<table align="center" cellspacing="0" cellpadding="5" width="75%">
<tr>
  <td align="left"><b>Edit</b></td>
  <td align="left"><b>Hapus</b></td>
  <td align="left"><b><a href="lihat_pengguna.php?urut=ln">Nama Belakang</a></b></td>
  <td align="left"><b><a href="lihat_pengguna.php?urut=fn">Nama Depan</a></b></td>
  <td align="left"><b><a href="lihat_pengguna.php?urut=rd">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_pengguna.php?id=' .
      $baris['id_pengguna'] . '">Edit</a></td>
   
      <td align="left"><a href="hapus_pengguna.php?id=' .
      $baris['id_pengguna'] . '">Hapus</a></td>
   
      <td align="left">' . $baris['nama_belakang'] . '</td>
    <td align="left">' . $baris['nama_depan'] . '</td>
    <td align="left">' . $baris['dr'] . '</td>
    </tr>';
} //Akhir loop while

echo '</table>'; // Menutup tabel

mysqli_free_result ($r); // Membebaskan sumber-daya

mysqli_close($dbc); // Menutup koneksi ke database

// Membuat link-link ke halaman lain jika diperlukan
if ($halaman > 1) {
    // Menambahkan beberapa spasi dan memulai sebuah paragraf
    echo '<br /><p>';

    // Mementukan halaman dimana skrip berada
    $halaman_skrg = ($mulai/$tampil) + 1;

    // Jika tidak ada pada halaman pertama, maka buat sebuah tombol Sebelumnya
    if ($halaman_skrg != 1) {
        echo '<a href="lihat_pengguna.php?s=' . ($mulai - $tampil) .
            '&p=' . $halaman . '&urut=' . $urut . '">Sebelumnya</a> ';
    }

// Membuat semua halaman bernomot
for ($i = 1; $i <= $halaman; $i++) {
    if ($i != $halaman_skrg) {
        echo '<a href="lihat_pengguna.php?s=' . (($tampil * ($i - 1))) .
            '&p=' . $halaman . '&urut=' . $urut . '">' . $i . '</a> ';
    } else {
        echo $i . ' ';
    }
} // Akhir dari loop for

// Jika pada halam terakhir,
// buat tombol Selanjutnya
if ($halaman_skrg != $halaman) {
    echo '<a href="lihat_pengguna.php?s=' . ($mulai + $tampil) .
      '&p=' . $halaman . '&urut=' . $urut . '">Selanjutnya</a>';
}

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

include ('C:\wamp\www\footer.html');
?>









No comments:

Post a Comment