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