Aplikasi
Database Pada Web
Membuat File Header
Buka kembali file header.html
pada editor teks Anda. Lakukan beberapa modifikasi pada sejumlah link, sebagai
berikut:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/
xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php
echo $judul_halaman;?></title>
<link rel="stylesheet" href="includes/style.css"
type="text/css" media="screen" />
<meta
http-equiv="content-type" content="text/html;
charset=utf-8" />
</head>
<body>
<div
id="header">
<h1>Situs Web
Anda</h1>
<h2>Slogan
hidup...</h2>
</div>
<div
id="navigasi">
<ul>
<li><a
href="indeks.php">Halaman Rumah</a></li>
<li><a
href="lihat_pengguna.php">Lihat Pengguna</a></li>
<li><a
href="registrasi_pengguna.php">Registrasi</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. -->
<!-- header.html -->
File indeks.php sama seperti
sebelumnya, sebagai berikut:
<?php # indeks.php
$judul_halaman = 'Selamat Datang ke Situs ini!';
include ('C:\wamp\www\header.html');
?>
<h1>Isi Header</h1>
<p>Ini merupakan isi dari halaman spesifik. Bagian ini, dan header
terkait
akan berubah dari
satu halaman ke halaman lainnya.</p>
<p>Volutpat at varius sed sollicitudin et, arcu. Vivamus viverra.
Nullam turpis. Vestibulum
sed etiam. Lorem ipsum sit amet dolore. Nulla facilisi. Sed
tortor. Aenean felis.
Quisque eros. Cras lobortis commodo metus. Vestibulum vel purus.
In eget odio in sapien
adipiscing blandit. Quisque augue tortor, facilisis sit amet,
aliquam, suscipit vitae,
cursus sed, arcu
lorem ipsum dolor sit amet.</p>
<?php
include ('C:\wamp\www\footer.html');
?>
Dan file footer.html sama seperti
sebelumnya, sebagai berikut:
<!-- footer.html -->
<!-- Akhir dari isi halaman spesifik. --></div>
<div id="footer">
<p>Copyright © <a href="#">Plain and
Simple</a> 2007 | Didesain oleh <a href="http://
www.edg3.co.uk/">edg3.co.uk</a> | Disponsori oleh
<a href="http://www.opendesigns.org/">Desain
terbuka</a> | Valid <a
href="http://jigsaw.w3.org/css-validator/">CSS</a> &
<a
href="http://validator.w3.org/">XHTML</a></p>
</div>
</body>
</html>
Kemudian, Anda perlu menjalankan
indeks.php pada web browser untuk memastikan hasil yang telah diperoleh,
sebagai berikut:
Koneksi Ke MySQL
Berikut merupakan skrip untuk melakukan
koneksi ke MySQL. Anda menyimpan file tersebut dengan nama koneksi_mysqli.php.
<?php # koneksi_mysqli.php.php
// File ini memuat informasi akses database.
// File ini juga menetapkan koneksi ke MySQL
// dan memilih database.
// Menetapkan informasi akses database sebagai konstanta
DEFINE ('DB_USER', 'rismon');
DEFINE ('DB_PASSWORD', 'Dolokulu77');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'namasitus');
// Melakukan koneksi
$dbc = @mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
OR die ('Tidak dapat terkoneksi ke MySQL: ' .
mysqli_connect_error() );
?>
Mengeksekusi Query Sederhana
Berikut merupakan skrip untuk melakukan
query sederhana untuk menambahkan rekaman pada database. Simpan file tersebut
dengan nama registrasi_pengguna.php. Berikut merupakan tampilan ketika file
tersebut dijalankan:
<?php #
registrasi_pengguna.php
$judul_halaman
= 'Registrasi';
include
('C:\wamp\www\header.html');
//
Memeriksa apakah form telah disubmit
if
(isset($_POST['submitted'])) {
$arrayError = array(); // Menginisialisasi
sebuah array error
// Memeriksa nama depan
if (empty($_POST['nama_depan'])) {
$arrayError[] = 'Anda lupa memasukkan
nama depan Anda.';
} else {
$fn = trim($_POST['nama_depan']);
}
// Memeriksa nama belakang
if (empty($_POST['nama_belakang'])) {
$arrayError[] = 'Anda lupa memasukkan
nama belakang Anda.';
} else {
$ln = trim($_POST['nama_belakang']);
}
// Memeriksa alamat email
if (empty($_POST['email'])) {
$arrayError[] = 'Anda lupa memasukkan
alamat email Anda.';
} else {
$e = trim($_POST['email']);
}
// Memeriksa password dan kecocokannya
if (!empty($_POST['pass1'])) {
if ($_POST['pass1'] != $_POST['pass2'])
{
$arrayError[] = 'Password Anda
tidak cocok.';
}
else {
$p = trim($_POST['pass1']);
}
} else {
$arrayError[] = 'Anda lupa memasukkan
password Anda.';
}
if (empty($arrayError)) { // Semuanya
berjalan OK
// Registrasi pengguna dalam database...
require_once('C:\wamp\www\koneksi_mysqli.php');
// Koneksi ke database
// 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); // Jalankan
query
if ($r) { // Jika OK
// Tampilkan sebuah pesan
echo '<h1>Terimakasih!</h1>
<p>Anda sekarang
terdaftar!</p><p><br /></p>';
} else { // Jika tidak OK
// Tampilkan pesan
echo '<h1>Sistem Error/h1>
<p
class="error">Anda tidak dapat terdaftar
karena adanya gangguan sistem.
Mohon maaf atas ketidak-nyamanan
ini.</p>';
// Pesan debugging:
echo '<p>'
. mysqli_error($dbc) . '<br /><br />Query: ' . $q . '</p>';
} // Akhir dari IF
mysqli_close($dbc); // Menutup koneksi
database
// Mencantumkan footer dan keluar dari
skrip
include ('C:\wamp\www\footer.html');
exit();
} else { // Laporkan arrayError.
echo '<h1>Error!</h1>
<p
class="error">Terjadi error berikut:<br />';
foreach ($arrayError as $msg) { //
Tampilkan tiap error
echo " - $msg<br
/>\n";
}
echo '</p><p>Silahkan coba
kembali.</p><p><br /></p>';
} // Akhir IF.
} // Akhir
dari submit kondisional
?>
<h1>Register</h1>
<form
action="registrasi_pengguna.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="Register"
/></p><input type="hidden" name="submitted"
value="TRUE" />
</form>
<?php
include ('C:\wamp\www\footer.html');
?>
Membaca Hasil Query
Berikut merupakan skrip untuk membaca
hasil query. Simpan file tersebut dengan nama lihat_pengguna.php.
<?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 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); // Jalankan query
if ($r) { // Jika berjalan Ok, tampilkan rekaman
// Header tabel
echo '<table align="center" cellspacing="3"
cellpadding="3" width="75%">
<tr><td
align="left"><b>Name</b></td><td
align="left"><b>
Tanggal
terdaftar</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>';
// Menutup tabel
mysqli_free_result
($r); // Membebaskan sumber-daya
} else { // Jika tidak berjalan OK
// Tampilkan pesan
echo '<p class="error">Daftar pengguna tidak dapat dibaca.
Mohon maaf
atas
ketidak-nyamanan ini.</p>';
// Pesan debugging
echo '<p>' . mysqli_error($dbc) . '<br/><br />Query: ' . $q .
'</p>';
} // Akhir dari IF.
mysqli_close($dbc); // Menutup koneksi ke database
include ('C:\wamp\www\footer.html');
?>
Memastikan Keamanan SQL
Keamanan database bertujuan untuk:
1. Melindungi informasi akses MySQL.
2. Tidak terlalu banyak menyingkapkan
informasi tentang database.
3. Hati-hati ketika menjalankan
query khususnya yang terkait dengan data yang disubmit oleh pengguna.
Buka kembali file
registrasi_pengguna.php pada editor teks Anda. Pindahkan inklusi dari file
koneksi_mysqli ke tepat setelah kondisional utama. Karena fungsi
mysqli_real_escape_string() memerlukan koneksi database, maka skrip
koneksi_mysqli.php diperlukan di awal skrip.
<?php #
registrasi_pengguna.php
$judul_halaman
= 'Register';
include
('C:\wamp\www\header.html');
// Memeriksa
apakah form telah disubmit
if
(isset($_POST['submitted'])) {
require_once('C:\wamp\www\koneksi_mysqli.php');
// Koneksi ke database
$arrayError = array(); // Menginisialisasi
sebuah array error
// Memeriksa nama depan
if (empty($_POST['nama_depan'])) {
$arrayError[] = 'Anda lupa memasukkan
nama depan Anda.';
} 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 Anda.';
} else {
$ln = mysqli_real_escape_string($dbc,
trim($_POST['nama_belakang']));
}
// Memeriksa alamat email
if (empty($_POST['email'])) {
$arrayError[] = 'Anda lupa memasukkan
alamat email Anda.';
} else {
$e = mysqli_real_escape_string($dbc,
trim($_POST['email']));
}
// Memeriksa password dan kecocokannya
if (!empty($_POST['pass1'])) {
if ($_POST['pass1'] != $_POST['pass2'])
{
$arrayError[] = 'Password Anda
tidak cocok.';
} else {
$p = mysqli_real_escape_string($dbc,
trim($_POST['pass1']));
}
} else {
$arrayError[] = 'Anda lupa memasukkan
password Anda.';
}
if (empty($arrayError)) { // Semuanya
berjalan OK
// Registrasi pengguna dalam database...
// 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); // Jalankan
query
if ($r) { // Jika OK
// Tampilkan sebuah pesan
echo '<h1>Terimakasih!</h1>
<p>Anda sekarang
terdaftar!</p><p><br /></p>';
} else { // Jika tidak OK
// Tampilkan pesan
echo '<h1>Sistem Error/h1>
<p
class="error">Anda tidak dapat terdaftar
karena adanya gangguan sistem.
Mohon maaf atas ketidak-nyamanan
ini.</p>';
// Pesan debugging:
echo '<p>'
. mysqli_error($dbc) . '<br /><br />Query: ' . $q . '</p>';
} // Akhir dari IF
mysqli_close($dbc); // Menutup koneksi
database
// Mencantumkan footer dan keluar dari
skrip
include ('C:\wamp\www\footer.html');
exit();
} else { // Laporkan arrayError.
echo '<h1>Error!</h1>
<p
class="error">Terjadi error berikut:<br />';
foreach ($arrayError as $msg) { //
Tampilkan tiap error
echo " - $msg<br
/>\n";
}
echo '</p><p>Silahkan coba
kembali.</p><p><br /></p>';
} // Akhir IF.
mysqli_close($dbc); // Menutup koneksi
database
} // Akhir
dari submit kondisional
?>
<h1>Register</h1>
<form
action="registrasi_pengguna.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="Register"
/></p><input type="hidden" name="submitted"
value="TRUE" />
</form>
<?php
include
('C:\wamp\www\footer.html');
?>
Memodifikasi File registrasi_pengguna.php
Fungsi mysqli_num_rows() dapat dipakai
pada file registrasi_pengguna.php untuk mencegah seseorang agar tidak mendaftar
dengan alamat email yang sama beberapa kali. Meskipun indeks UNIQUE pada kolom
tersebut dalam database dapat mencegah hal tersebut, tindakan pengguna tersebut
akan menciptakan error MySQL. Agar hal ini tidak terjadi pada PHP, Anda perlu
menjalankan query SELECT untuk memastikan bahwa alamat email belum terdaftar.
Hal ini memerlukan query sebagai berikut:
SELECT id_pengguna FROM pengguna WHERE email='$e'
<?php # lihat_pengguna.php
// Skrip ini membaca semua rekaman
// dari tabel pengguna.
$judul_halaman = 'Register';
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 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); // Jalankan query
// Menghitung jumlah baris yang dihasilkan
$jum = mysqli_num_rows($r);
if ($jum > 0) { // Jika berjalan Ok, tampilkan rekaman
// Header tabel
echo '<table align="center" cellspacing="3"
cellpadding="3" width="75%">
<tr><td
align="left"><b>Name</b></td><td
align="left"><b>
Tanggal
terdaftar</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>';
// 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');
?>
Memperbarui Rekaman
Teknik terakhir pada bab ini akan
menunjukkan bagaiman memperbarui rekaman-rekaman database melalui skrip PHP.
Untuk itu, Anda memerlukan sebuah query UPDATE, dan keberhasilannya dapat
diverifikasi dengan fungsi PHP mysqli_affected_rows().
Simpan file berikut dengan nama password.php.
<?php #
password.php
// Halaman
ini untuk pengubahan password oleh pengguna
$judul_halaman
= 'Ubah Password Anda';
include
('C:\wamp\www\header.html');
//
Memeriksa apakah form telah disubmit
if
(isset($_POST['submitted'])) {
// Koneksi ke database
require_once
('C:\wamp\www\koneksi_mysqli.php');
$arrayError = array(); // Menginisialisasi
array error
// Memeriksa alamat email
if (empty($_POST['email'])) {
$arrayError[] = 'Anda lupa memasukkan
email Anda';
} else {
$e = mysqli_real_escape_string($dbc,
trim($_POST['email']));
}
// Memeriksa password terkini
if (empty($_POST['pass'])) {
$arrayError[] = 'Anda lupa memasukkan
password';
} else {
$p = mysqli_real_escape_string($dbc,
trim($_POST['pass']));
}
// Memeriksa kecocokan password baru
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 pengguna telah
memasukkan
// kombinasi email/password yang tepat
$q = "SELECT id_pengguna FROM
pengguna
WHERE (email='$e' AND pass=SHA1('$p') )";
$r = @mysqli_query($dbc, $q);
$jum = @mysqli_num_rows($r);
if ($jum == 1) { // Ada kecocokan
// Mendapatkan id_pengguna
$baris = mysqli_fetch_array($r,
MYSQLI_NUM);
// Melakukan query UPDATE
$q = "UPDATE pengguna SET
pass=SHA1('$np')
WHERE id_pengguna = $baris[0]";
$r = @mysqli_query($dbc, $q);
if (mysqli_affected_rows($dbc) ==
1) { // Jika berjalan OK
// Tampilkan pesan
echo
'<h1>Terimakasih!</h1>
<p>Password baru Anda telah diperbarui!</p><p><br
/></p>';
} else { // Jika tidak berjalan OK
// Tampilkan pesan
echo '<h1>Sistem
Error</h1>
<p class="error">Password baru tidak dapat diperbarui
karena ada error sistem.
Kami minta maaf atas
ketidak-nyamanan ini.</p>';
// Pesan debugging
echo '<p>' . mysqli_error($dbc) . '<br/><br />Query:
' . $q .'</p>';
}
// Mencantumkan footer dan keluar
include
('C:\wamp\www\footer.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">Terjadi error berikut:<br />';
foreach ($arrayError as $msg) { //
Tampilkan tiap error
echo " - $msg<br />\n";
}
echo '</p><p>Silahkan coba
lagi.</p><p><br /></p>';
} // Akhir dari 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="Ubah Password" /></p>
<input type="hidden"
name="submitted" value="TRUE" />
</form>
<?php
include
('C:\wamp\www\footer.html');
?>
No comments:
Post a Comment