Wednesday, 17 April 2013

Pemesanan Barang Sederhana Berbasis Web



Mungkin kita sudah biasa membuat program pemesanan barang. Tapi disini akan penulis paparkan yang berbasis web. Ya berbasis web, dengan PHP dan MySQl sebagai databasenya. Penulis juga sedang belajar jadi maaf bila ada bagian yang salah (mohon koreksinya).

Baiklah kita buat dulu databasenya. Sebagai contoh kita buat tabel dengan susunan sebagai berikut (bisa disesuaikan dengan keinginan Anda):
CREATE TABLE `pesan` (
  `id_brg` char(4) NOT NULL,
  `nama` varchar(30) NOT NULL,
  `harga` int(11) NOT NULL,
  PRIMARY KEY  (`id_brg`));
Ok, silahkan diisi dengan data sembarang. Lalu kita buat koneksi ke databasenya terlebih dahulu (konek.php):
<?
$namadatabase = "dbpesan";//nama db
$namauser = "root";   //namauser
$password = "";       //password Anda
$host = "localhost";  // host
mysql_connect($host,$namauser,$password)
        or die("Koneksi gagal : " . mysql_error());
mysql_select_db($namadatabase);
?>
Kemudian kita buat formnya. Contohnya seperti berikut ini:
<html>
<head>
<title>www.rose-see.co.nr - Form Pemesanan Barang</title>
</head>
 
<body>
<form name="formpesan" method="post" action="pesan_proses.php">
  <table width="75%" border="0" align="center">
    <tr>
      <td colspan="4"><div align="center">
      <b>Form Pemesanan Barang</b></div></td>
    </tr>
    <tr bgcolor="#CCCCCC">
      <td><div align="center">Kode Barang</div></td>
      <td><div align="center">Nama Barang</div></td>
      <td><div align="center">Harga 
 
Barang</div></td>
      <td><div align="center">Jumlah 
 
Pesan</div></td>
    </tr>
    <tr>
               <?
               include "konek.php";
               $query = "SELECT * FROM pesan";
               $hasil = mysql_query($query);
               $dataq = mysql_fetch_array($hasil);
               echo"
        <td>$dataq[0]</td>
               <input type='hidden' name='kode' value='$dataq[0]'>
        <td>$dataq[1]</td>
               <input type='hidden' name='nama' value='$dataq[1]'>
        <td> <div align=\"right\">Rp. 
 
$dataq[2]</div></td>
               <input type='hidden' name='harga' value='$dataq[2]'>
        <td> <div align=<right>
          <input name=\"jml\" type=\"text\" size=\"10\" maxlength=\"3\"
        <div><td>";
               ?>
 
    </tr>
    <tr bgcolor="#CCCCCC">
      <td colspan="4"><div align="right">
          <input type="submit" name="Submit" value="Pesan">
        </div></td>
    </tr>
  </table>
</form>
</body>
</html>
Form diatas akan terlihat seperti:



Setelah form selesai kita buat, baru kita buat file yang akan menangani form tersebut. Disini penulis lebih suka memisahkan fungsi untuk mengitung pemesanan barang. Tetapi Anda bisa menggabungkannya, itu terserah Anda. Misalkan fungsinya kita beri nama func.php dengan sintaks seperti ini:
<?
function Hit_pesan($harga, $pesan)
        {
    return $bayar = $harga * $pesan;
    }
?>
Dikit khan sintaksnya? :D. OK kita buat file yang akan menggunakan fungsi tersebut. Seperti pada form sebelumnya bahwa form akan di "post" ke file "pesan_proses.php". Ya khan? Coba dibaca lagi sintaks form yang tadi. Berikut file pesan_proses.php:
<?
include "func.php";
echo "<b>Data pemesanan barang:</b>



    Kode barang : $kode



    Nama Barang : $nama



    Harga Barang: Rp.$harga



    Jumlah Pesan: $jml



    <b>Total Bayar : Rp.";
echo number_format(Hit_pesan($harga,$jml),2,",",".");
?>
Sudah selese :). Sekarang kita coba ;). Misalkan kita memesan 2 maka:



Eiit... tunggu dulu. Bagaimana kalo pemesan memasukkan angka -2?:



Ini bisa berarti kita hutang ke pemesan!. Waduh bangkrut donk kita! :(. (Sebenarnya jarang ada pemesan yang memasukkan negatif, tapi karena Anda suka iseng jadi bisa saja tho? :D) Ehm OK, permasalahan ada pada penghitungan karena menganggap semua pemesan tidak akan iseng seperti Anda (loh?). Pertama kita "paksa" nilai yang diinputkan user agar menjadi integer (Masih ingat dengan artikel penulis tentang "Jamu Penawar SQL Injection bagian 2"? ;)). Perhatikan perubahan pada fungsi yang kita buat tadi:
<?
function Hit_pesan($harga, $pesan)
        {
    $harga = (int) $harga;
    $pesan = (int) $pesan;
    if (($harga < 1)or($pesan < 1))
        {
        return 0;
        }
    else
        {
        return $bayar = $harga * $pesan;
        }
    }
?>
(ingat khan?). Mungkin ada sebagian pembaca yang bertanya (seperti Anda? :D), mengapa variabel $harga juga dirubah? bukannya pemesan cuman bisa menginputkan jumlah pemesanan? Ehm... tidak juga. Ya Anda tentu sudah tahu, bukan? (?). Ya benar, pemesan seperti Anda (!) bisa merubah harga barang dengan sangat amat mudah sekali :). Coba lihat source form dari browser. Maka, akan terjadi penampakan hi... (gambar saya ambil sebagian).



Pada yang penulis tandai ternyata value bisa dilihat oleh pemesan seperti Anda :(. Jadi itulah alasannya. Baiklah penulis kira itu tidak masalah bagi Anda. OK dengan begitu setiap ada pemesan yang memesan dengan input negatif (seperti Anda lagi :D), maka totalnya akan menjadi nol. Kita rubah sedikit file pesan_proses.php agar menampilkan bahwa input salah:
<?
include "func.php";
echo "<b>Data pemesanan barang:</b>



    Kode barang : $kode



    Nama Barang : $nama



    Harga Barang: Rp.$harga



    Jumlah Pesan: $jml



    <b>Total Bayar : ";
$cek = Hit_pesan($harga,$jml);
if ($cek < 1)
        {
    echo "Input Anda SALAH!!!";
    }
else
        {
    echo "Rp.";
        echo number_format(Hit_pesan($harga,$jml),2,",",".");
    }
?<


Mungkin Anda punya cara sendiri dalam mengatasi permasalahan itu. Dan itu terserah Anda, karena kita punya jalan masing-masing. Pertanyaannya adalah apakah itu sudah cukup aman? Ehm... tidak juga (weks...). Seperti saya sebutkan sebelumnya, pemesan bisa melihat input yang dihiden dan tentu juga bisa mengubahnya. Anda harus mencocokkan data yang dikirim pemesan dengan database yang ada. Jika data yang dikirimkan "ada dan cocok", baru dilakukan proses selanjutnya, jika tidak berarti data sudah dimanipulasi dan harus diblok. Maksudnya ada dan cocok?, misalkan Anda (maaf maksud saya pemesan :P) tidak merubah kode barang akan tetapi merubah nama barangnya seperti kode 1 yang seharusnya mempunyai nama barang A, tetapi Anda rubah namanya menjadi B. Tentu saja input ini akan membingungkan kita dalam memberikan barang. Karena antara kode dan namanya berbeda dan tentu saja harganya juga membingungkan:(. Makanya harus ada dan cocok. Apakah sudah aman mas? Percayalah tidak ada aplikasi apapun yang aman 100% (capek dech). Yang penting kita harus selalu mencoba untuk mencari kelemahannya, kalo sudah mentok dan tidak ketemu? Tantang saja komunitas hacker untuk menjebolnya. Pasti ketemu hehehe.... Segitu dulu ajah artikelnya ya?. Mohon maaf jika ada yang salah. Selamat mencoba ;)

No comments:

Post a Comment