Memvalidasi
Masukan Pengguna
Validasi ke Situs Film
Untuk lebih memahami peranan validasi
terhadap masukan pengguna, Anda perlu melihatnya dalam praktek. Jadi, pertama
Anda perlu menambahkan beberapa bidang pada tabel film dalam database
situsfilm.
Aplikasi film menyediakan banyak kesempatan
untuk memeriksa masukan pengguna. Anda akan memerlukan beberapa fitur. Kasus
ini akan membantu Anda untuk mereview apa yang telah Anda pelajari pada bab-bab
terdahulu.
Contoh
|
Memperbarui
database situsfilm
|
1.
Bukalah editor teks Anda, dan masukkan kode ini:
<?php
//menghubungkan ke MySQL
$db =
mysql_connect('localhost', 'rismon', 'Dolokulu77') or
die ('Tidak bisa terhubung. Periksa parameter
koneksi.');
//memastikan bahwa database
yang baru dibuat menjadi
//database yang aktif
mysql_select_db('situsfilm',
$db) or die(mysql_error($db));
//mengubah tabel film untuk
mencantumkan dua bidang lain
$query = 'ALTER TABLE film
ADD COLUMN (
rilis_film INTEGER UNSIGNED DEFAULT 0,
rating_film TINYINT UNSIGNED DEFAULT 5)';
mysql_query($query, $db) or
die(mysql_error($db));
echo 'Database film berhasil
diperbarui';
?>
2.
Simpan file tersebut dengan nama tambahbidang_tabelfilm.php.
3.
Buka halaman tersebut dengan browser Anda. Anda akan
melihat pesan “Database film berhasil diperbarui”.
Contoh
|
Mengadaptasi
skript untuk memvalidasi masukan pengguna
|
1.
Buka file kode film.php
yang Anda telah tulis, dan modifikasilah seperti ditunjukkan pada teks yang
disoroti berikut:
<?php
//menghubungkan ke MySQL
$db = mysql_connect('localhost', 'rismon',
'Dolokulu77') or
die ('Tidak
bisa terhubung. Periksa parameter koneksi.');
//memastikan bahwa database yang baru dibuat menjadi
//database yang aktif
mysql_select_db('situsfilm', $db) or
die(mysql_error($db));
if ($_GET['aksi'] == 'edit') {
//membaca
informasi rekaman
$query =
'SELECT
nama_film, tipe_film, tahun_film, aktor_film, sutradara_film
FROM
film
WHERE
id_film = ' . $_GET['id'];
$hasil =
mysql_query($query, $db) or die(mysql_error($db));
extract(mysql_fetch_assoc($hasil));
} else {
//menetapkan
nilai-nilai menjadi kosong
$nama_film
= '';
$tipe_film
= 0;
$tahun_film = date('Y');
$aktor_film = 0;
$sutradara_film = 0;
}
?>
<html>
<head>
<title><?php echo ucfirst($_GET['aksi']);?> Film
</title>
<style
type="text/css">
<!--
#error
{ background-color: #600; border: 1px solid #FF0; color: #FFF;
text-align: center; margin: 10px; padding: 10px; }
-->
</style >
</head>
<body>
<?php
if (isset($_GET['error']) &&
$_GET['error'] != '') {
echo
'<div id="error">' . $_GET['error'] . '</div>';
}
?>
<form
action="komit.php?aksi=<?php echo $_GET['aksi'];
?>&tipe=film" method="post">
<table>
<tr>
<td> Nama Film </td>
<td><input type="text" name="nama_film"
value="<?php echo $nama_film;?> "/></td>
</tr><tr>
<td> Tipe Film </td>
<td><select name="tipe_film">
<?php
// memilih informasi tipe film
$query = 'SELECT
id_tipefilm, label_tipefilm
FROM
tipefilm
ORDER BY
label_tipefilm';
$hasil = mysql_query($query, $db) or
die(mysql_error($db));
// mengisi dengan hasil
while ($baris = mysql_fetch_assoc($hasil)) {
foreach
($baris as $value) {
if
($baris['id_tipefilm'] == $tipe_film) {
echo '<option value="' . $baris['id_tipefilm'] . '"
selected="selected">';
} else
{
echo '<option value="' . $baris['id_tipefilm'] . '">';
}
echo
$baris['id_tipefilm'] . ' </option> ';
}
}
?>
</select></td>
</tr><tr>
<td> Tahun Film </td>
<td><select name="tahun_film">
<?php
// mengisi dengan tahun
for ($thn = date("Y"); $thn >= 1970;
$thn--) {
if ($thn
== $tahun_film) {
echo
'<option value="' . $thn . '" selected="selected">' .
$thn . '</option>';
} else {
echo
'<option value="' . $thn . '"> ' . $thn . '</option> ';
}
}
?>
</select></td>
</tr><tr>
<td> Aktor Film </td>
<td><select name="aktor_film" >
<?php
// memilih rekaman-rekaman aktor
$query = 'SELECT
id_orang, namapenuh_orang
FROM
orang
WHERE
aktor_orang = 1
ORDER BY
namapenuh_orang';
$hasil = mysql_query($query, $db) or
die(mysql_error($db));
// mengisi dengan hasil
while ($baris = mysql_fetch_assoc($hasil)) {
foreach
($baris as $value) {
if
($baris['id_orang'] == $aktor_film) {
echo '<option value="' . $baris['id_orang'] . '"
selected="selected">';
} else
{
echo '<option value="' . $baris['id_orang'] . '">';
}
echo
$baris['namapenuh_orang'] . '</option>';
}
}
?>
</select></td>
</tr><tr>
<td> Sutradara </td>
<td><select name="sutradara_film">
<?php
// memilih rekaman-rekaman sutradara
$query = 'SELECT
id_orang, namapenuh_orang
FROM
orang
WHERE
sutradara_orang = 1
ORDER BY
namapenuh_orang';
$hasil = mysql_query($query, $db) or
die(mysql_error($db));
// mengisi dengan hasil
while ($baris = mysql_fetch_assoc($hasil)) {
foreach
($baris as $value) {
if
($baris['id_orang'] == $sutradara_film) {
echo '<option value="' . $baris['id_orang'] . '"
selected="selected">';
} else
{
echo '<option value="' . $baris['id_orang'] . '">';
}
echo
$baris['namapenuh_orang'] . '</option>';
}
}
?>
</select></td>
</tr><tr>
<td
colspan="2" style="text-align: center;">
<?php
if ($_GET['aksi'] == 'edit') {
echo '<input
type="hidden" value="' . $_GET['id'] . '"
name="id_film"/>';
}
?>
<input type="submit" name="submit"
value="<?php echo ucfirst($_GET['aksi']); ?>"/>
</td>
</tr>
</table>
</form>
</body>
</html>
2.
Bukalah file komit.php,
dan modifikasilah seperti ditunjukkan pada teks yang disoroti berikut:
<?php
//menghubungkan ke MySQL
$db =
mysql_connect('localhost', 'rismon', 'Dolokulu77') or
die ('Tidak bisa terhubung. Periksa parameter
koneksi.');
//memastikan bahwa database
yang baru dibuat menjadi
//database yang aktif
mysql_select_db('situsfilm',
$db) or die(mysql_error($db));
/*hapus baris ini
?>
<html>
<head>
<title> Komit </title>
</head>
<body>
<?php sampai baris ini*/
switch ($_GET['aksi']) {
case 'tambah':
switch ($_GET['tipe']) {
case 'film':
$error = array();
$nama_film = isset($_POST['nama_film'])
?
trim($_POST['nama_film']) : '';
if (empty($nama_film)) {
$error[] = urlencode('Silahkan
masukkan nama film.');
}
$tipe_film = isset($_POST['tipe_film'])
?
trim($_POST['tipe_film']) : '';
if (empty($tipe_film)) {
$error[] = urlencode('Silahkan
masukkan tipe film.');
}
$tahun_film = isset($_POST['tahun_film'])
?
trim($_POST['tahun_film']) : '';
if (empty($tahun_film)) {
$error[] = urlencode('Silahkan
masukkan tahun film.');
}
$aktor_film =
isset($_POST['aktor_film']) ?
trim($_POST['aktor_film']) : '';
if (empty($aktor_film)) {
$error[] = urlencode('Silahkan
masukkan aktor film.');
}
$sutradara_film =
isset($_POST['sutradara_film']) ?
trim($_POST['sutradara_film']) :
'';
if (empty($sutradara_film)) {
$error[] = urlencode('Silahkan
masukkan sutradara film.');
}
if (empty($error)) {
$query = 'INSERT INTO
film
(nama_film, tahun_film,
tipe_film, aktor_film, sutradara_film)
VALUES
("' . $nama_film .
'",
' . $tahun_film . ',
' . $tipe_film . ',
' . $aktor_film . ',
' . $sutradara_film .
')';
} else {
header('Location:film.php?aksi=tambah' .
' & error=' . join($error,
urlencode('<br/>')));
}
break;
}
break;
case 'edit':
switch ($_GET['tipe']) {
case 'film':
$error = array();
$nama_film = isset($_POST['nama_film'])
?
trim($_POST['nama_film']) : '';
if (empty($nama_film)) {
$error[] = urlencode('Silahkan
masukkan nama film.');
}
$tipe_film = isset($_POST['tipe_film'])
?
trim($_POST['tipe_film']) : '';
if (empty($tipe_film)) {
$error[] = urlencode('Silahkan
masukkan tipe film.');
}
$tahun_film =
isset($_POST['tahun_film']) ?
trim($_POST['tahun_film']) : '';
if (empty($tahun_film)) {
$error[] = urlencode('Silahkan
masukkan tahun film.');
}
$aktor_film =
isset($_POST['aktor_film']) ?
trim($_POST['aktor_film']) : '';
if (empty($aktor_film)) {
$error[] = urlencode('Silahkan
masukkan aktor film.');
}
$sutradara_film =
isset($_POST['sutradara_film']) ?
trim($_POST['sutradara_film']) :
'';
if (empty($sutradara_film)) {
$error[] = urlencode('Silahkan masukkan
sutradara film.');
}
if (empty($error)) {
$query = 'UPDATE
film
SET
nama_film = "' .
$nama_film . '",
tahun_film = ' .
$tahun_film . ',
tipe_film = ' . $tipe_film
. ',
aktor_film = ' .
$aktor_film . ',
sutradara_film = ' .
$sutradara_film . '
WHERE
id_film = ' .
$_POST['id_film'];
} else {
header('Location:film.php?aksi=edit&id=' . $_POST['id_film'] .
'&error=' . join($error,
urlencode('<br/>')));
}
break;
}
break;
}
if (isset($query)) {
$hasil = mysql_query($query, $db) or die(mysql_error($db));
}
?>
<html>
<head>
<title> Komit </title>
</head>
<body>
<p> Selesai! </p>
</body>
</html>
3.
Sekarang bukalah file admin.php dengan browser Anda, dan kemudian klik link untuk
menambah sebuah film. Anda akan dibawa ke skript film.php yang telah Anda perbarui. Cobalah untuk menambahkan sebuah
film tanpa nama, dan perhatikan pesan error yang menyatakan kesalahan pengisian
form, seperti ditunjukkan berikut:
Memeriksa Error Format
Pada titik ini, Anda memerlukan
ekspresi reguler. Ekspresi reguler dipakai untuk mendefinisikan pola. Ekspresi
reguler berguna untuk memeriksa tanggal, nomor KTP, dan sembarang data yang
memiliki format.
Contoh
|
Memeriksa
tanggal dan angka
|
1.
Bukalah file film.php
Anda, dan modifikasilah sebagai berikut:
<?php
//menghubungkan ke MySQL
$db = mysql_connect('localhost', 'rismon',
'Dolokulu77') or
die ('Tidak
bisa terhubung. Periksa parameter koneksi.');
//memastikan bahwa database yang baru dibuat menjadi
//database yang aktif
mysql_select_db('situsfilm', $db) or
die(mysql_error($db));
if ($_GET['aksi'] == 'edit') {
//membaca
informasi rekaman
$query =
'SELECT
nama_film, tipe_film, tahun_film, aktor_film, sutradara_film,
rilis_film,
rating_film
FROM
film
WHERE
id_film = ' . $_GET['id'];
$hasil =
mysql_query($query, $db) or die(mysql_error($db));
extract(mysql_fetch_assoc($hasil));
} else {
//menetapkan nilai-nilai menjadi kosong
$nama_film
= '';
$tipe_film
= 0;
$tahun_film = date('Y');
$aktor_film = 0;
$sutradara_film = 0;
$rilis_film
= time();
$rating_film = 5;
}
?>
<html>
<head>
<title><?php echo ucfirst($_GET['aksi']);?> Film
</title>
<style
type="text/css">
<!--
#error {
background-color: #600; border: 1px solid #FF0; color: #FFF;
text-align: center; margin: 10px; padding: 10px; }
-->
</style
>
</head>
<body>
<?php
if (isset($_GET['error']) && $_GET['error']
!= '') {
echo
'<div id="error">' . $_GET['error'] . '</div>';
}
?>
<form
action="komit.php?aksi=<?php echo $_GET['aksi'];
?>&tipe=film" method="post">
<table>
<tr>
<td> Nama Film </td>
<td><input type="text"
name="nama_film" value="<?php echo $nama_film;?>
"/></td>
</tr><tr>
<td> Tipe Film </td>
<td><select name="tipe_film">
<?php
// memilih informasi tipe film
$query = 'SELECT
id_tipefilm, label_tipefilm
FROM
tipefilm
ORDER BY
label_tipefilm';
$hasil = mysql_query($query, $db) or
die(mysql_error($db));
// mengisi dengan hasil
while ($baris = mysql_fetch_assoc($hasil)) {
foreach
($baris as $value) {
if
($baris['id_tipefilm'] == $tipe_film) {
echo '<option value="' .
$baris['id_tipefilm'] . '" selected="selected">';
} else
{
echo '<option value="' . $baris['id_tipefilm'] . '">';
}
echo
$baris['id_tipefilm'] . ' </option> ';
}
}
?>
</select></td>
</tr><tr>
<td> Tahun Film </td>
<td><select name="tahun_film">
<?php
// mengisi dengan tahun
for ($thn = date("Y"); $thn >= 1970;
$thn--) {
if ($thn
== $tahun_film) {
echo '<option value="' . $thn . '"
selected="selected">' . $thn . '</option>';
} else {
echo
'<option value="' . $thn . '"> ' . $thn . '</option> ';
}
}
?>
</select></td>
</tr><tr>
<td> Aktor Film </td>
<td><select name="aktor_film" >
<?php
// memilih rekaman-rekaman aktor
$query = 'SELECT
id_orang, namapenuh_orang
FROM
orang
WHERE
aktor_orang = 1
ORDER BY
namapenuh_orang';
$hasil = mysql_query($query, $db) or
die(mysql_error($db));
// mengisi dengan hasil
while ($baris = mysql_fetch_assoc($hasil)) {
foreach
($baris as $value) {
if
($baris['id_orang'] == $aktor_film) {
echo '<option value="' . $baris['id_orang'] . '"
selected="selected">';
} else
{
echo '<option value="' . $baris['id_orang'] . '">';
}
echo
$baris['namapenuh_orang'] . '</option>';
}
}
?>
</select></td>
</tr><tr>
<td> Sutradara </td>
<td><select name="sutradara_film">
<?php
// memilih rekaman-rekaman sutradara
$query = 'SELECT
id_orang, namapenuh_orang
FROM
orang
WHERE
sutradara_orang = 1
ORDER BY
namapenuh_orang';
$hasil = mysql_query($query, $db) or
die(mysql_error($db));
// mengisi dengan hasil
while ($baris = mysql_fetch_assoc($hasil)) {
foreach
($baris as $value) {
if
($baris['id_orang'] == $sutradara_film) {
echo '<option value="' .
$baris['id_orang'] . '" selected="selected">';
} else
{
echo '<option value="' . $baris['id_orang'] . '">';
}
echo
$baris['namapenuh_orang'] . '</option>';
}
}
?>
</select></td>
</tr><tr>
<td> Tanggal Rilis Film <br/>
<small> (dd-mm-yyyy) </small></td>
<td><input type="text" name="rilis_film"
value="<?php echo date('d-m-Y', $rilis_film);
?>"/></td>
</tr><tr>
<td> Rating Film <br/>
<small> (dari 0 sampai 10) </small></td>
<td><input type="text" name="rating_film"
value="<?php echo $rating_film; ?>"/></td>
</tr><tr>
<td
colspan="2" style="text-align: center;">
<?php
if ($_GET['aksi'] == 'edit') {
echo
'<input type="hidden" value="' . $_GET['id'] . '"
name="id_film"/>';
}
?>
<input type="submit"
name="submit" value="<?php echo ucfirst($_GET['aksi']);
?>"/>
</td>
</tr>
</table>
</form>
</body>
</html>
2.
Buka file film.php
dengan browser Anda kembali, dan perhatikan bahwa dua bidang baru telah
ditambahkan, seperti berikut:
3.
Sekarang buka file komit.php, dan modifikasilah file tersebut sebagai berikut
(ditunjukkan oleh teks yang disoroti);
<?php
//menghubungkan ke MySQL
$db = mysql_connect('localhost', 'rismon',
'Dolokulu77') or
die ('Tidak
bisa terhubung. Periksa parameter koneksi.');
//memastikan bahwa database yang baru dibuat menjadi
//database yang aktif
mysql_select_db('situsfilm', $db) or
die(mysql_error($db));
/*hapus baris ini
?>
<html>
<head>
<title> Komit </title>
</head>
<body>
<?php sampai baris ini*/
switch ($_GET['aksi']) {
case 'tambah':
switch
($_GET['tipe']) {
case
'film':
$error = array();
$nama_film = isset($_POST['nama_film']) ?
trim($_POST['nama_film']) : '';
if
(empty($nama_film)) {
$error[] = urlencode('Silahkan masukkan nama film.');
}
$tipe_film = isset($_POST['tipe_film']) ?
trim($_POST['tipe_film']) : '';
if
(empty($tipe_film)) {
$error[] = urlencode('Silahkan masukkan tipe film.');
}
$tahun_film = isset($_POST['tahun_film']) ?
trim($_POST['tahun_film']) : '';
if
(empty($tahun_film)) {
$error[] = urlencode('Silahkan masukkan tahun film.');
}
$aktor_film = isset($_POST['aktor_film']) ?
trim($_POST['aktor_film']) : '';
if (empty($aktor_film)) {
$error[] = urlencode('Silahkan masukkan aktor film.');
}
$sutradara_film = isset($_POST['sutradara_film']) ?
trim($_POST['sutradara_film']) : '';
if
(empty($sutradara_film)) {
$error[] = urlencode('Silahkan
masukkan sutradara film.');
}
$rilis_film
= isset($_POST['rilis_film'])?
trim($_POST['rilis_film']) : '';
if (!preg_match('|^\d{2}-\d{2}-\d{4}$|', $rilis_film)) {
$error[] = urlencode('Silahkan masukkan
tanggal dalam format dd-mm-yyyy.');
}
else {
list($hari, $bulan, $tahun) = explode('-', $rilis_film);
if (!checkdate($bulan, $hari, $tahun)) {
$error[] = urlencode('Silahkan masukkan tanggal yang valid.');
} else {
$rilis_film = mktime(0, 0, 0, $bulan, $hari, $tahun);
}
}
$rating_film = isset($_POST['rating_film']) ?
trim($_POST['rating_film']) : '';
if (!is_numeric($rating_film)) {
$error[] = urlencode('Silahkan masukkan rating numerik.');
}
else if ($rating_film < 0 || $rating_film > 10) {
$error[] = urlencode('Silahkan masukkan rating antara 0 dan 10.');
}
if
(empty($error)) {
$query = 'INSERT INTO
film
(nama_film, tahun_film, tipe_film, aktor_film, sutradara_film,
rilis_film, rating_film)
VALUES
("' . $nama_film . '",
' . $tahun_film . ',
' . $tipe_film . ',
' . $aktor_film . ',
' . $sutradara_film . ',
' . $rilis_film . ',
' . $rating_film . ')';
} else
{
header('Location:film.php?aksi=tambah' .
'
& error=' . join($error, urlencode('<br/>')));
}
break;
}
break;
case 'edit':
switch
($_GET['tipe']) {
case
'film':
$error = array();
$nama_film = isset($_POST['nama_film']) ?
trim($_POST['nama_film']) : '';
if
(empty($nama_film)) {
$error[] = urlencode('Silahkan masukkan nama film.');
}
$tipe_film
= isset($_POST['tipe_film']) ?
trim($_POST['tipe_film']) : '';
if
(empty($tipe_film)) {
$error[] = urlencode('Silahkan masukkan tipe film.');
}
$tahun_film = isset($_POST['tahun_film']) ?
trim($_POST['tahun_film']) : '';
if
(empty($tahun_film)) {
$error[] = urlencode('Silahkan masukkan tahun film.');
}
$aktor_film = isset($_POST['aktor_film']) ?
trim($_POST['aktor_film']) : '';
if
(empty($aktor_film)) {
$error[] = urlencode('Silahkan masukkan aktor film.');
}
$sutradara_film = isset($_POST['sutradara_film']) ?
trim($_POST['sutradara_film']) : '';
if
(empty($sutradara_film)) {
$error[] = urlencode('Silahkan masukkan sutradara film.');
}
$rilis_film
= isset($_POST['rilis_film'])?
trim($_POST['rilis_film']) : '';
if (!preg_match('|^\d{2}-\d{2}-\d{4}$|', $rilis_film)) {
$error[] = urlencode('Silahkan masukkan
tanggal dalam format dd-mm-yyyy.');
}
else {
list($hari, $bulan, $tahun) = explode('-', $rilis_film);
if (!checkdate($bulan, $hari, $tahun)) {
$error[] = urlencode('Silahkan masukkan tanggal yang valid.');
} else {
$rilis_film = mktime(0, 0, 0, $bulan, $hari, $tahun);
}
}
$rating_film = isset($_POST['rating_film']) ?
trim($_POST['rating_film']) : '';
if (!is_numeric($rating_film)) {
$error[] = urlencode('Silahkan masukkan rating numerik.');
}
else if ($rating_film < 0 || $rating_film > 10) {
$error[] = urlencode('Silahkan masukkan rating antara 0 dan 10.');
}
if
(empty($error)) {
$query = 'UPDATE
film
SET
nama_film = "' . $nama_film . '",
tahun_film = ' . $tahun_film . ',
tipe_film = ' . $tipe_film . ',
aktor_film = ' . $aktor_film . ',
sutradara_film = ' .
$sutradara_film . '
rilis_film
= ' . $rilis_film . '
rating_film = ' . $rating_film . '
WHERE
id_film = ' . $_POST['id_film'];
} else
{
header('Location:film.php?aksi=edit&id=' . $_POST['id_film'] .
'&error=' . join($error, urlencode('<br/>')));
}
break;
}
break;
}
if (isset($query)) {
$hasil =
mysql_query($query, $db) or die(mysql_error($db));
}
?>
<html>
<head>
<title> Komit </title>
</head>
<body>
<p>
Selesai! </p>
</body>
</html>
4.
Sekarang cobalah untuk menambahkan sebuah film baru,
dan masukkan 2014-20-08 pada bidang tanggal rilis. Anda akan dibawa kembali ke
fom, dengan pesan yang memberitahukan Anda bahwa format tanggal tak-valid,
seperti ditunjukkan berikut:
5.
Sekarang cobalah untuk memasukkan beberapa huruf pada
bidang rating. Nilai tersebut akan ditolak, seperti pada gambar berikut:
No comments:
Post a Comment