Tuesday, December 27, 2016

Bab 7. PHP/MySQL Untuk Programer


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