Skip to content


Create, Update dan Delete Data Master Dengan Ajax

KurangBiasaLumayanBagusLuar Biasa (9 votes, average: 4.89 out of 5)
Loading ... Loading ...
2,719 views

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 ^_^

Posted in JQuery, PHP, Tips & Trick. Tagged with , , , , , .

21 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. pertamax juragan……

  2. terima kasih mas chandra…atas tutoriallnya…

  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. keren mas tutorialnya…

  5. mantab….gan….terus share yach…

  6. sembilanbelas_media said

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

  7. Rius said

    Keren Mas,
    sekalian pagingnya donk :)

    Makasih

  8. wah jadi tertarik nih belajar bikin aplikasi berbasis web…

    tengkiu pak …

  9. bram said

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

  10. aester said

    excellent..

    keep posting, mas..

    2 thumbs…

  11. pemula said

    semoga ilmunya terus bertambah……..

  12. wah keren nih… terima kasih mas :D

  13. ijoks said

    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 said

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

  15. mantap2 nih tutorialnya..master ariel….

  16. ucen said

    keren Kang
    saya lagi belajar web programming nih, terima kasih

    hidup programmer

  17. polkst said

    Thank for ur tutorial

  18. ok bangeet dah. trims

  19. Zeech said

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

  20. subame said

    thx kkak tuk tutornya..
    berguna banget

Continuing the Discussion

  1. Create, Update dan Delete Data Master Dengan Ajax Dan Dynamic Grid | T-10 Homepage v3.0 linked to this post on February 5, 2010

    [...] dari banyak request untuk pengembangan artikel sebelumnya tentang “Create, Update dan Delete Data Master Dengan Ajax” maka saya coba kembangkan form CRUD dengan metoda table dinamis (Dynamic Grid), maksudnya [...]

Some HTML is OK

(required)

(required, but never shared)

or, reply to this post via trackback.