Home > JQuery, PHP, Tips & Trick > Create, Update dan Delete Data Master Dengan Ajax

Create, Update dan Delete Data Master Dengan Ajax

September 2nd, 2009 Leave a comment Go to comments

CRUD dengan Ajax

Proses Create, Update dan Delete (CRUD) adalah proses dasar dalam management data. Kali ini saya akan membangun proses CRUD dengan metode Ajax.

Data yang diinput adalah data karyawan, pertama-tama ciptakan dulu table karyawan dan master departement:

CREATE TABLE `master_pegawai` (
	`ID` INT( 5 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
	`NIP` CHAR( 5 ) NOT NULL ,
	`Name` VARCHAR( 50 ) NOT NULL ,
	`Address` VARCHAR( 255 ) NOT NULL ,
	`Department` INT( 5 ) NOT NULL ,
	UNIQUE (`NIP`)
);
CREATE TABLE IF NOT EXISTS `master_department` (
  `ID` int(5) NOT NULL AUTO_INCREMENT,
  `DepartmentName` varchar(50) NOT NULL,
  PRIMARY KEY  (`ID`)
) ;

Isi data pada master department terlebih dahulu karena pada artikel kali ini saya akan berkonsentrasi pada management data master pegawai. Library javascript yang akan digunakan adalah:

  1. JQuery
  2. JQuery Ajax Form, untuk memproses data dari form dan request ke ajax lebih cepat dan mudah.
  3. JQuery Thickbox, untuk mengeluarkan popup form dengan metode Ajax.

Ada tiga file utama yang dapat anda temukan dengan fungsi masing-masing:

  1. index.php, menampung daftar lengkap pegawai dan menyediakan link untuk tambah, edit dan hapus data pegawai. Pada index.php juga di deklarasikan fungsi untuk request Ajax ketika tombol submit pada form ditekan.
  2. form.php, menampilkan form tambah atau edit data. File ini diakses melalui metode Ajax dengan bantuan popup Thickbox, jika file ini dipanggil dengan parameter ID pegawai maka form ini siap untuk mengedit satu record pegawai di database.
  3. proses.php, adalah file yang menjadi tempat request Ajax untuk menambah dan mengedit data. File ini akan mengembalikan nilai JSON untuk kemudian di proses index.php.

Isi file “index.php” pada bagian HEAD:

13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<script language="javascript" src="js/jquery.js"></script>
  <script language="javascript" src="js/thickbox.js"></script>
  <script language="javascript" src="js/jquery.form.js"></script>
  <script language="javascript" src="js/jsCalendar.js"></script>
  <script language="javascript">
    /*  Fungsi addRow untuk menambahkan baris pada table pegawai setelah 
		Ajax berhasil melakukan proses tambah data pegawai	*/
    function addRow(ID,NIP,Name,DeptName){
	   var str = '<tr id="tr'+ID+'">';
	   /* cara mengetahui jumlah baris pada table pegawai saat ini
		  untuk membuat nomor urut data pada table */
	   var countLine = Object($('#tableBody tr')).length; 
	   str += '<td align="center">'+(countLine+1)+'</td>';
	   str += '<td align="center">'+NIP+'</td>';
	   str += '<td>'+Name+'</td>';
	   str += '<td>'+DeptName+'</td>';
	   str += '<td align=center><a href="form.php?width=370&height=230&id_pegawai='+ID+'" class="thickbox">Edit</a> ';
	   str += '| <a href="javascript:deleteRow(\''+ID+'\')">Delete</a></td>';
	   str += '</tr>';
 
	   // kode html yang sudah disusun ditambahkan (append) ke dalam tag tbody
	   $('#tableBody').append(str);
 
	   /* setiap link dengan class='thickbox pada baris yang baru dibuat akan 
		  mempunyai fungsi mengeluarkan dialog thickbox ketika melakukan edit data */
	   tb_init('#tr'+ID+' td a.thickbox');
	}
	// untuk mengedit data pada baris tertentu di table daftar pegawai
	function editRow(ID,NIP,Name,DeptName){
	   var element = '#tr'+ID; // ambil ID dari baris yang ingin diubah
	   $(element+' td:nth-child(2)').text(NIP); // kolom kedua (NIP) dari baris diubah datanya
	   $(element+' td:nth-child(3)').text(Name); // kolom ketiga (Nama) dari baris diubah datanya
	   $(element+' td:nth-child(4)').text(DeptName); // kolom keempat (Department) dari baris diubah datanya
	}
 
	// untuk menghapus baris atau data pada table pegawai
	function deleteRow(ID){ // ID dari record pegawai dikirimkan sebagai parameter
	   $.post(
	      'delete.php',
		  {id_pegawai: ID},
		  function(response){
			if(response == 'ok')  // jika respon dari delete.php adalah 'ok' 
			  $('#tr'+ID).remove();  // hapus 1 baris
			else 
			  alert('Delete gagal');
		  }
	   );
	}
	/*  fungsi submitForm akan dipanggil pada saat melakukan inputan pada 
		form tambah atau edit pegawai. Di dalam fungsi ini ada fungsi ajaxSubmit 
		yang merupakan plugin dari jquery yaitu jquery.form.js
	*/
	function submitForm(){
		// beri tanda bahwa data sedang di proses dengan efek loading fade in
		$('#divResult').text('loading...').fadeIn();		
		$('#formData').ajaxSubmit({
		  success: function(response){	
			// sembunyikan element tempat hasil respon sementara agar efek fade in lebih nyata
			$('#divResult').hide(); 
			/* respon yang diterima berupa json dengan struktur 
			{status:(nomor status), IDPegawai: (id dari pegawai)}*/
			if(response.status == 1){
			  /* jika nilai status adalah 1 berarti ada error dan
			     response.text yang merupakan pesan error akan ditampilkan di 
				 element dengan ID = divResult */
			  // pesan error diberi efek fade in dengan background warna merah
			  $('#divResult').text(response.text).css({'color':'#FFFFFF','background-color':'#FF0000'}).fadeIn();				
			}else if(response.status == 2){
			  /* jika nilai status adalah 2 maka tandanya sedang berlangsung
				proses penambahan data pegawai baru oleh karena itu fungsi yang 
				dipakai selanjutnya adalah addRow untuk menambah baris di table pegawai */
			  // pesan sukses diberi efek fade in dengan background warna kuning
			  $('#divResult').text('Data berhasil ditambah').css({'color':'#000000','background-color':'#FFFF00'}).fadeIn();				
			  addRow(
				response.IDPegawai,
				$('input[@name=NIP]').val(),
				$('input[@name=Name]').val(),
				$('select[@name=Department] option:selected').text()
			  );
			  tb_remove();  
			}else if(response.status == 3){
			  /* jika nilai status adalah 3 maka sedang berlangsung 
				proses edit data pegawai maka fungsi yang dipanggil selanjutnya
				adalah fungsi editRow untuk mengedit baris data pegawai yang 
				sudah diubah di form */			  
			  // pesan sukses diberi efek fade in dengan background warna kuning
			  $('#divResult').text('Data berhasil diedit').css({'color':'#000000','background-color':'#FFFF00'}).fadeIn();				
			  editRow(
				$('input[@name=ID]').val(),
				$('input[@name=NIP]').val(),
				$('input[@name=Name]').val(),
				$('select[@name=Department] option:selected').text()
			  );
			  tb_remove();
			}
		  }, 
		  dataType: 'json' // menandakan bahwa ajax menginginkan respon berupa json
		});
		return false;
	}
  </script>

Isi file “index.php” pada bagian BODY:

121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
  <table cellspacing="0" cellpadding="4" border="1" width="500">
   <thead>
     <tr bgcolor="#CCCCCC">
	   <th>No</th>
	   <th>NIP</th>
	   <th>Nama</th>
	   <th>Department</th>
	   <th>Action</th>
     </tr>
   </thead>
   <tbody id="tableBody"><?
		include 'connect.inc.php';
		$query = mysql_query('SELECT p.*,d.DepartmentName FROM master_pegawai p JOIN master_department d ON p.Department = d.ID');
		if($query && mysql_num_rows($query) > 0){
		  $x = 1;
		  while($row = mysql_fetch_object($query)){
			echo "<tr id='tr{$row->ID}'>
					<td align='center'>$x</td>
					<td align='center'>{$row->NIP}</td>
					<td>{$row->Name}</td>
					<td>{$row->DepartmentName}</td>
					<td align='center'><a class='thickbox' href='form.php?id_pegawai={$row->ID}&width=370&height=230'>Edit</a> 
						| <a href='javascript:deleteRow(\"{$row->ID}\")'>Delete</a></td>
				  </tr>";
			$x++;
		  }
		}
   ?></tbody>
 </table>
 <br /><a href="form.php?width=370&height=230" class="thickbox" title="Tambah Data Pegawai">Tambah Data Pegawai</a>

Isi file “form.php” berikut penjelasannya:

<?
	include 'connect.inc.php';
	$id = isset($_GET['id_pegawai']) ? intval($_GET['id_pegawai']) : false;
 
	if($id){
	   $query = mysql_query('SELECT * FROM master_pegawai WHERE ID = "'.$id.'"');
	   if($query && mysql_num_rows($query) == 1){
	      $data = mysql_fetch_object($query);
	   }else 
	      die('Data pegawai tidak ditemukan');
	}
?>
<div id="divResult" style="font-size:11px;text-align:center;display:none"></div>
<form action="process.php" method="post" id="formData" onSubmit="return submitForm();">
 <table>
   <tr>
	 <td>NIP</td>
	 <td>:</td>
	 <td><input type="text" name="NIP" size="6" maxlength="6" value="<?=@$data->NIP?>" onKeyUp="this.value = String(this.value).toUpperCase()" /></td>
   </tr>
   <tr>
	 <td>Nama Pegawai</td>
	 <td>:</td>
	 <td><input type="text" name="Name" size="30" value="<?=@$data->Name?>" /></td>
   </tr>
   <tr valign="top">
	 <td>Alamat</td>
	 <td>:</td>
	 <td><textarea name="Address" rows="6" cols="30"><?=@$data->Address?></textarea></td>
   </tr>
   <tr>
	 <td>Departement</td>
	 <td>:</td>
	 <td>
	    <select name="Department">
		<?
		   $query = mysql_query('SELECT * FROM master_department');
		   if($query && mysql_num_rows($query) > 0){
			  while($row = mysql_fetch_object($query)){
				 echo '<option value="'.$row->ID.'"';
				 if($row->ID == @$data->Department) echo ' selected';
				 echo '>'.$row->DepartmentName.'</option>';
			  }
		   }	   
		?>
		</select>
	 </td>
   </tr>
   <tr>
	 <td>&nbsp;</td>
	 <td>&nbsp;</td>
	 <td>
		<input type="hidden" name="ID" value="<?=@$data->ID?>" />
		<input type="submit" name="submit" value="Simpan" />
		<input type="button" value="Batal" onClick="tb_remove()" />
	 </td>
   </tr>
 </table>
</form>

Isi file “proses.php” berikut penjelasannya:

<?
	/* proses.php akan menjadi file yang di request oleh Ajax 
	   dan akan mengembalikan nilai dengan struktur JSON */
	if(isset($_POST['ID'])){
	  include 'connect.inc.php';
      $ID = getPost('ID');
      $NIP = getPost('NIP');
      $Name = getPost('Name');
      $Address = getPost('Address');
      $Department = getPost('Department');
	  if($NIP && $Name){
	    if($ID){
		  $SQLUpdate = "UPDATE master_pegawai SET					
						 NIP = '$NIP',
						 Name = '$Name',
						 Address = '$Address',
						 Department = '$Department'
						WHERE ID = '$ID'";				
		  $query = mysql_query($SQLUpdate) or die(mysql_error());
		  echo '{status:3}'; // memberikan respon nilai status = 3 ketika berhasil mengedit
		}else{	  
		  $SQLInsert = "INSERT INTO master_pegawai
							(NIP,Name,Address,Department)
						  VALUES('$NIP','$Name','$Address','$Department')";				
		  $query = mysql_query($SQLInsert) or die(mysql_error());
		  $lastID = mysql_insert_id();
		  /* memberikan respon nilai status = 2 dan ID dari record pegawai 
			ketika berhasil menambah data pegawai baru */
		  echo '{status:2,IDPegawai:'.$lastID.'}';
		}
	  // mengembalikan respon nilai status = 1 dan text error message
	  }else echo '{status:1,text:"Lengkapi Isi Form. NIP dan Nama Harus Diinput"}';
	}
?>

Untuk melihat demo klik link ini.

Untuk download source program klik link ini.

Terima kasih atas kunjungannya, maaf sudah lama menunggu perkembangan artikel di website ini, penulis lagi banyak banget kerjaan…hehehe ^_^

  1. September 2nd, 2009 at 23:34 | #1

    pertamax juragan……

  2. September 6th, 2009 at 10:32 | #2

    terima kasih mas chandra…atas tutoriallnya…

  3. September 10th, 2009 at 16:00 | #3

    Blog anda OK dan unik Banget!. Submit tulisan anda di Kombes.Com Bookmarking, Agar member kami vote tulisan anda. Silakan submit/publish disini : http://bookmarking.kombes.com Semoga bisa lebih mempopulerkan blog/tulisan anda!

    Kami akan sangat berterima kasih jika teman blogger memberikan sedikit review/tulisan tentang Kombes.Com Bookmarking pada blog ini.

    Salam hormat
    http://kombes.Com

  4. September 11th, 2009 at 19:18 | #4

    keren mas tutorialnya…

  5. September 11th, 2009 at 20:42 | #5

    mantab….gan….terus share yach…

  6. sembilanbelas_media
    September 29th, 2009 at 00:36 | #6

    mantap mas chandra, makin cihuy aja neh..
    ajarin dong…

  7. Rius
    October 15th, 2009 at 23:12 | #7

    Keren Mas,
    sekalian pagingnya donk :)

    Makasih

  8. October 21st, 2009 at 17:11 | #8

    wah jadi tertarik nih belajar bikin aplikasi berbasis web…

    tengkiu pak …

  9. bram
    October 22nd, 2009 at 14:30 | #9

    MANTAB ini yang lagi ku butuhkan, terima kasih banyak mas……

  10. aester
    November 1st, 2009 at 21:04 | #10

    excellent..

    keep posting, mas..

    2 thumbs…

  11. pemula
    November 2nd, 2009 at 11:05 | #11

    semoga ilmunya terus bertambah……..

  12. November 14th, 2009 at 22:32 | #12

    wah keren nih… terima kasih mas :D

  13. ijoks
    November 26th, 2009 at 18:47 | #13

    mantaaaaaaaaab Om salam kenal neh aku dah browsing ke mana mana gak ketemu eh iseng iseng cari lagi alhamdulilah ketemu web nya ente om makasih bgt om bantuan nya
    salam…. Ijoks

  14. pepi
    November 27th, 2009 at 14:23 | #14

    siip bro tutornnya. saat mengedit data gimana mas caranya agar bis seperti saat mengadd data baru. kirim di email juga….

  15. December 17th, 2009 at 12:44 | #15

    mantap2 nih tutorialnya..master ariel….

  16. ucen
    December 25th, 2009 at 02:51 | #16

    keren Kang
    saya lagi belajar web programming nih, terima kasih

    hidup programmer

  17. polkst
    January 3rd, 2010 at 05:01 | #17

    Thank for ur tutorial

  18. January 24th, 2010 at 15:16 | #18

    ok bangeet dah. trims

  19. Zeech
    March 1st, 2010 at 00:45 | #19

    waahh ..
    sipp ..
    bner’ bermanfaat ..
    thanks .. :D

  20. subame
    March 7th, 2010 at 04:42 | #20

    thx kkak tuk tutornya..
    berguna banget

  21. syaiful anwar
    March 28th, 2010 at 20:38 | #21

    ok banget bos. tks a lot, mudah2an sukses terus.

  22. April 21st, 2010 at 09:57 | #22

    terimakasih mas materinya…sangat bermanfaat mas untuk saya…..

  23. Nikolas
    May 18th, 2010 at 09:30 | #23

    Bermanfaat sekali tutorial nya..
    sudah saya download, tp kok ga bisa jalan ya, saya coba di localhost..ini pake php versi brp ?

    ada masalah pada query
    malah muncul seperti :
    $x = 1; while($row = mysql_fetch_object($query)){ echo “”; $x++; }

    data – datanya tidak tampil…
    tolong donk mas..

  24. June 4th, 2010 at 11:51 | #24

    mungkin versi PHPnya bermasalah ato apache gak bisa baca PHP sampe script PHP ketampil di browser kyk gitu… ??

  25. June 26th, 2010 at 03:08 | #25

    terima kasih tutor nya .. ijin buat nyedot ya …

  26. robitul
    July 19th, 2010 at 08:29 | #26

    mas pas sy install pake xampp lite hasilnya kok gak jalan ya mas… dan muncul halaman seperti dibawah ini mhon penjelasan lebih lanjut. trima kasih.

    0){ $x = 1; while($row = mysql_fetch_object($query)){ echo “”; $x++; } } ?>
    No NIP Nama Department Action
    $x {$row->NIP} {$row->Name} {$row->DepartmentName} Edit | Delete

    Tambah Data Pegawai

  27. July 19th, 2010 at 08:41 | #27

    coba cek lagi versi PHP-nya mas. error semacam itu krn PHP gak diterjemahkan dengan baik oleh Apache.
    bisa jadi versi xampp lite gak stabil atau kurang setting utk jalanin PHP di apache ini.
    saran saya mah pake xampp 1.6 aja, gak pernah ada keluhan sampai saat ini :)

  1. February 5th, 2010 at 16:21 | #1