Sabtu, 11 Februari 2012

MENYIMPAN DATA KE BEBERAPA TABEL

Seperti dijelaskan sebelumnya tidak ada cara khusus untuk menyimpan data ke beberapa tabel. Berikut adalah cara menyimpan data ke beberapa tabel berdasarkan tipe relasi tabel.
Menyimpan Data ke Tabel Berelasi Satu-ke-satu

Disini akan diambil contoh seperti contoh di atas, menyimpan produk dengan tipe buku. Pertama buat html form dengan kode di bawah.
  1.   <form name="form1" action="simpan.php" method="post">  
  2.     <dl>  
  3.         <dt>Nama</dt>  
  4.         <dd><input type="text" name="nama"/></dd>  
  5.         <dt>Harga</dt>  
  6.         <dd><input type="text" name="harga"/></dd>  
  7.         <dt>Jenis</dt>  
  8.         <dd>  
  9.             <select name="jenis">  
  10.                 <option value="BUKU">Buku</option>  
  11.             </select>  
  12.         </dd>  
  13.         <dt>Penulis</dt>  
  14.         <dd><input type="text" name="penulis"/></dd>  
  15.         <dt>Penerbit</dt>  
  16.         <dd><input type="text" name="penerbit"/></dd>  
  17.         <dt>ISBN</dt>  
  18.         <dd><input type="text" name="isbn"/></dd>  
  19.         <dt>Tanggal Terbit</dt>  
  20.         <dd><input type="text" name="tgl_terbit"/></dd>  
  21.         <dt></dt>  
  22.         <dd><input type="submit" value="Simpan"/></dd>  
  23.     </dl>  
  24. </form>  



Simpan kode di atas dengan nama form.php, kemudian buat file simpan.php untuk menyimpan data ke tabel product dan tabel buku, dengan kode di bawah.
  1. <?php  
  2. if($_POST){  
  3.     $conn = mysql_connect("localhost","root","");  
  4.     mysql_select_db("test",$conn);   
  5.     //menyimpan ke table product  
  6.     $sql = "insert into product (nama,harga,jenis) values ('{$_POST['nama']}','{$_POST['harga']}','{$_POST['jenis']}')";  
  7.     mysql_query($sql) or die('Gagal menyimpan produk');  
  8.     //mencari id produk  
  9.     $sql = "select max(id_produk) as last_id from product limit 1";  
  10.     $hasil = mysql_query($sql);  
  11.     $row = mysql_fetch_array($hasil);  
  12.     $lastId = $row['last_id'];  
  13.     //menyimpan data buku ke table buku  
  14.     $sql = "insert into buku (id_produk,penulis,penerbit,isbn,tgl_terbit)   
  15.     values ('$lastId','{$_POST['penulis']}','{$_POST['penerbit']}','{$_POST['isbn']}','{$_POST['tgl_terbit']}')";  
  16.     mysql_query($sql) or die('Gagal menyimpan data buku');  
  17.     echo 'data tersimpan';  
  18. }  

Bisa dilihat kode di atas hampir sama dengan kode untuk menyimpan data ke satu tabel. Pada baris ke-2 dilakukan pengecekan apakah ada data yang dikirim atau tidak. Jika ada data yang dikirim, di baris ke-3 dan 4 dilakukan koneksi ke database. Kemudian pada baris ke-6 dan 7 menyimpan data ke tabel product. Selanjutnya dari ke ke-9 sampai 16 adalah untuk menyimpan data ke tabel buku.
Setiap tabel yang berelasi, tabel anak (dalam kasus ini tabel buku) memiliki sebuah foreign key, nilai foreign key ini diambil dari nilai referenced column -- primary key tabel induk (referenced table, tabel product dalam contoh ini). Pada contoh ini, kolom id_produk pada tabel buku adalah foreign key dan primary key tabel product (kolom id_produk) adalah referenced column. Nilai dari foreign key tidak boleh berisi nilai nilai yang tidak ada di reference colomn kecuali null.
Sekarang lihat kembali baris ke-9. Baris ke-9 sampai 12 adalah untuk mencari id_produk yang baru saja disimpan pada tabel product (baris ke-6 dan 7). Kenapa proses ini diperlukan? Karena nilai dari kolom id_produk tabel buku tidak boleh berisi nilai nilai selain nilai yang ada di kolom id_produk tabel product. Selanjutnya baris ke-14 sampai 16 adalah untuk menyimpan data ke tabel buku, dan kolom id_produk diisi dengan nilai yang diperoleh dari baris sebelumnya (baris ke-9 sampai 12).
Menyimpan Data ke Tabel Berelasi Satu-ke-banyak

Disini akan diberikan contoh menyimpan Album musik. Album musik yang memiliki beberapa lagu. Struktur tabel album dan lagu seperti:

Pertama buatlah form html berikut:
  1. <!-- file album.php -->  
  2. <form name="formalbum" action="simpan-album.php" method="post">  
  3. Judul Album: <input type="text" name="judul"/> Nama Artis: <input type="text" name="artis"/>  
  4. <table id="tabel-lagu" cellspacing="0" border="1" cellpadding="3">  
  5.     <tr>  
  6.         <td>NO. Track</td>  
  7.         <td>Judul</td>  
  8.         <td>Durasi</td>  
  9.         <td>Delete</td>  
  10.     </tr>  
  11.     <tr>  
  12.         <td><input type="text" name="no_track[0]"/></td>  
  13.         <td><input type="text" name="judul_lagu[0]"/></td>  
  14.         <td><input type="text" name="durasi[0]"/></td>  
  15.         <td><button type="button" class="del">Del</button></td>  
  16.     </tr>  
  17.     <tr id="last">  
  18.         <td colspan="4" align="right"><button type="button" id="addRow">Add</button></td>  
  19.     </tr>  
  20. </table>  
  21. <input type="submit" value="Simpan"/>  
  22. </form>  
  23. <script type="text/javascript" src=" https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>  
  24. <script type="text/javascript">  
  25. var i = 1;  
  26. $(function(){  
  27.     $("#addRow").click(function(){  
  28.         row = '<tr>'+  
  29.         '<td><input type="text" name="no_track['+i+']"/></td>'+  
  30.         '<td><input type="text" name="judul_lagu['+i+']"/></td>'+  
  31.         '<td><input type="text" name="durasi['+i+']"/></td>'+  
  32.         '<td><button type="button" class="del">Del</button></td>'+  
  33.         '</tr>';  
  34.         $(row).insertBefore("#last");  
  35.         i++;  
  36.         });  
  37.     });  
  38.     $(".del").live('click', function(){  
  39.         $(this).parent().parent().remove();  
  40.         });  
  41. </script>  

Kode diatas akan membentuk form seperti berikut:

Yang perlu diperhatikan adalah atribut name dari element form (baris ke-12 sampai 14) yang diberi nilai seperti no_track[0], judul_lagu[0], durasi[0]. Penamaan seperti itu bertujuan agar data dikirim ke server berupa array. Selanjut buatlah file simpan-album.php untuk menyimpan data ke database.
  1. <?php  
  2. //file simpan-album.php  
  3. if(!$_POST){  
  4.     die('Tidak ada data yang disimpan!');  
  5. }  
  6. //koneksi ke database  
  7. $conn = mysql_connect("localhost","root","blah");  
  8. mysql_select_db("test");  
  9. //simpan ke tabel album  
  10. $sql = "insert into album (judul,artis) values ('{$_POST['judul']}','{$_POST['artis']}')";  
  11. mysql_query($sql) or die('Gagal menyimpan album');  
  12. //mencari id album  
  13. $sql = "select max(id) as id_album from album limit 1";  
  14. $row = mysql_fetch_array(mysql_query($sql));  
  15. $id_album = $row['id_album'];  
  16. //menyimpan data ke tabel lagu  
  17. foreach($_POST['judul_lagu'] as $key => $judul){  
  18.     $sql = "insert into lagu(id_album, no_track,judul,durasi)   
  19.     values ('{$id_album}','{$_POST['no_track'][$key]}','{$judul}','{$_POST['durasi'][$key]}')";  
  20.     mysql_query($sql);  
  21. }  
  22. echo 'Data telah disimpan';  

Baris ke-1 sampai 15 sama dengan cara yang dilakukan untuk menyimpan data ke tabel berelasi satu ke satu. Pertama membuka koneksi ke database (baris ke-7 dan 8). Kemudian menyimpan data ke tabel album (baris ke-10 dan 11). Selanjutnya mencari id album yang baru saja disimpan (baris ke-13 s/d 15). Langkah terakhir (baris ke-17 s/d 21) adalah melakukan perulangan dan menyimpan satu persatu data ke tabel lagu, serta id_album diisi dengan nilai yang diperoleh sebelumnya di baris ke-13 s/d 15.
Menyimpan Data ke Tabel Berelasi Banyak-ke-banyak

Menyimpan data ke tabel yang berelasi banyak ke banyak merupakan bagian yang paling kompleks. Menyimpan datanya tidak bisa seperti cara cara sebelumnya, yang hanya sekali langkah. Menyimpan data ke tabel yang berelasi banyak ke banyak paling sedikit melewati 3 langkah. Agar lebih jelas akan dicontohkan relasi antara mahasiswa dan mata_kuliah yang direlasikan oleh tabel mahasiswa_mk, sebagai berikut:

Langkah Pertama: Menyimpan Data Mahasiswa.
Untuk menyimpan data mahasiswa gunakan kode php di bawah. Kode di bawah sama seperti yang digunakan untuk menyimpan data ke satu tabel.
  1. // file mahasiswa.php  
  2. if($_POST){  
  3.     $conn = mysql_connect("localhost","root","blah");  
  4.     mysql_select_db("test",$conn);   
  5.     $sql = "insert into mahasiswa (nim,nama,jurusan) values ('{$_POST['nim']}','{$_POST['nama']}','{$_POST['jurusan']}')";  
  6.     mysql_query($sql);  
  7.     echo 'Data telah disimpan';  
  8. }   
  9. ?>  
  10. <h3>Input Mahasiswa</h3>  
  11. <form name="form1" method="post" action="">  
  12. <dl>  
  13.     <dt>NIM</dt>  
  14.     <dd><input type="text" name="nim"/></dd>  
  15.     <dt>Nama</dt>  
  16.     <dd><input type="text" name="nama"/></dd>  
  17.     <dt>Jurusan</dt>  
  18.     <dd><input type"text" name="jurusan"/></dd>  
  19.     <dt></dt>  
  20.     <dd><input type="submit" value="Simpan"/></dd>  
  21. </dl>  
  22. </form>  

Simpan kode di atas dengan nama file mahasiswa.php
Langkah Kedua: Menyimpan Data Mata Kuliah
Menyimpan data mata kuliah sama seperti menyimpan data mahasiswa. Gunakan kode di bawah dan simpan dengan nama mata_kuliah.php.
  1. <?php  
  2. //file mata_kuliah.php  
  3. if($_POST){  
  4.     $conn = mysql_connect("localhost","root","blah");  
  5.     mysql_select_db("test",$conn);   
  6.     $sql = "insert into mata_kuliah (kode,nama) values ('{$_POST['kode']}','{$_POST['nama']}')";  
  7.     mysql_query($sql);  
  8.     echo 'Data telah disimpan';  
  9. }   
  10. ?>  
  11. <h3>Input Mata Kuliah</h3>  
  12. <form name="form1" method="post" action="">  
  13. <dl>  
  14.     <dt>Kode MK</dt>  
  15.     <dd><input type="text" name="kode"/></dd>  
  16.     <dt>Nama</dt>  
  17.     <dd><input type="text" name="nama"/></dd>  
  18.     <dt></dt>  
  19.     <dd><input type="submit" value="Simpan"/></dd>  
  20. </dl>  
  21. </form>  

Langkah Ketiga: Menyimpan Data Mata Kuliah Seorang Mahasiswa
Untuk mempermudah proses menyimpan data Mata Kuliah Seorang Mahasiswa, diperlukan kode untuk menampilkan daftar mahasiswa di bawah.
  1. <?php  
  2. //file list-mahasiswa.php  
  3. $conn = mysql_connect("localhost","root","blah");  
  4. mysql_select_db("test",$conn);   
  5. $sql = "select * from mahasiswa";  
  6. $result = mysql_query($sql);  
  7. ?>  
  8. <table cellspacing="0" cellpadding="5" border="1">  
  9.     <tr>  
  10.         <td>NIM</td>  
  11.         <td>Nama</td>  
  12.         <td>Jurusan</td>  
  13.         <td>Aksi</td>  
  14.     </tr>  
  15.     <?php while($mhs = mysql_fetch_array($result)){?>  
  16.     <tr>  
  17.         <td><?php echo $mhs['nim'];?></td>  
  18.         <td><?php echo $mhs['nama'];?></td>  
  19.         <td><?php echo $mhs['jurusan'];?></td>  
  20.         <td><a href="mahasiswa_mk.php?nim=<?php echo $mhs['nim'];?>">Tambah Mata Kuliah</a></td>  
  21.     </tr>  
  22.     <?php }?>  
  23. </table>  

Simpan kode di atas dengan nama list-mahasiswa.php. Kode tersebut berfungsi untuk menampilkan daftar mahasiswa dan membuat link berjudul "Tambah Mata Kuliah" ke halaman mahasiswa_mk.php. Halaman mahasiswa_mk.php digunakan untuk menyimpan data mata kuliah seorang mahasiswa.
  1. <?php  
  2. //file mahasiswa_mk.php  
  3. $conn = mysql_connect("localhost","root","blah");  
  4. mysql_select_db("test",$conn);  
  5. //mencari data mahasiswa  
  6. $sql = "select * from mahasiswa where nim='".mysql_real_escape_string($_GET['nim'])."'";  
  7. $mhs = mysql_fetch_array(mysql_query($sql));  
  8. ?>  
  9. <h2>Tambah Mata Kuliah Mahasiswa: <?php echo $mhs['nama'];?></h2>  
  10. <form name="form" method="post" action="simpan_mahasiswa_mk.php">  
  11. <?php  
  12. //mencari semua data mata kuliah  
  13. $subquery = "select id_mk from mahasiswa_mk where nim='".$mhs['nim']."'";  
  14. $sql = "select * from mata_kuliah where id not in ({$subquery})";  
  15. $result = mysql_query($sql);  
  16. while($mataKuliah = mysql_fetch_array($result)){  
  17.     //membut checkbox  
  18.     echo '<input type="checkbox" name="mata_kuliah[]" value="'.$mataKuliah['id'].'"/>';  
  19.     echo $mataKuliah['kode'].': '.$mataKuliah['nama'].' ';  
  20. }  
  21. ?>  
  22. <input type="hidden" name="nim" value="<?php echo $mhs['nim'];?>"/>  
  23. <br/>  
  24. <input type="submit" value="Simpan"/>  
  25. </form>  

Baris ke-6 dan 7 kode di atas adalah untuk mencari data mahasiswa yang akan di tambahkan mata kuliahnya. Baris ke-8 menampilkan nama mahasiswa. Baris ke-13 dan 14 adalah membuat sql query untuk mencari mata kuliah yang belum ditambahkan ke mahasiswa bersangkutan. Untuk mempermudah di baris 13 dan 14 menggunakan subquery. Selanjutnya baris 15 s/d 20 untuk menampilkan checkbox mata kuliah yang belum dimiliki oleh mahasiswa bersangkutan.
Langkah berikutnya adalah membuat file simpan_mahasiswa_mk.php untuk menyimpan data mata kuliah mahasiswa.

  1. <?php  
  2. //file simpan_mahasiswa_mk.php  
  3. if($_POST){  
  4.     $conn = mysql_connect("localhost","root","blah");  
  5.     mysql_select_db("test",$conn);  
  6.     foreach($_POST['mata_kuliah'] as $id_matakuliah){  
  7.         $sql = "insert into mahasiswa_mk (nim,id_mk) values ('{$_POST['nim']}','{$id_matakuliah}')";  
  8.         mysql_query($sql) or die("Gagal Menyimpan Data".mysql_error());  
  9.     }  
  10. }  
  11. header("Location: list-mahasiswa.php");  
  12. exit('Data disimpan');  

0 komentar:

Posting Komentar