CRUD (Create, Read, Update, Delete) Dengan Ajax Tanpa Loading PHP – Part 2 Insert Data dan Validasinya – Hai ini merupakan kelanjutan postingan saya kemarin tentang CRUD (Create, Read, Update, Delete) Dengan Ajax Tanpa Loading PHP – Part 1 Menampilkan Data Ajax . Dan hari ini saya akan memposting tentang cara menyimpan data ke dalam database MySQL menggunakan ajax tanpa reload/loading halaman menggunakan PHP. Berbeda dengan CRUD yang pertama kita harus membuat file tambah_data.php dan tambah_data_action.php, setelah klik simpan pada file tambah_data.php maka akan menuju ke tambah_data_action.php terlebih dahulu barulah nanti menyimpan data dan setelah berhasil akan meredirect kembali ke halaman utama. Tentu itu sangat tidak enak jika digunakan oleh user. Sehingga sekarang banyak aplikasi yang menggunakan Ajax untuk menyimpan datanya sehingga tidak perlu redirect ke halaman lain dan bahkan tidak perlu reload halaman. Secara otomatis data pada table akan menambah tanpa reload.
Cara ini banyak disukai oleh developer khususnya developer PHP karena dengan cara ini dapat memberikan kenyamanan user dalam menggunakan aplikasi yang sobat buat karena terkesan ringan dan cepat. Untuk membuatnya juga tidak terlalu susah. Namun berbeda dengan cara yang pertama, dalam penggunaan ajax ini perlu juga membuat validasinya jika ada data yang wajib diisi. Tidak seperti cara menggunakan HTML biasa kita hanya perlu menambahkan “required” dan pada javascript ini itu tidak berlaku dan saya lebih suka untuk membuat validasinya secara manual karena dengan itu kita bisa membuatnya sesuka hati kita. Validasi untuk field input text, select dan radio button nanti akan saya bahas juga dalam postingan ini.
Cara Menyimpan Data Menggunakan Ajax Dan Membuat Validasi
Validasi yang dimaksud disini adalah peringatan bahwa field ini wajib diisi. Sebenarnya untuk form tambah data sudah dibuat pada part 1 namun belum ada actionnya jadi dika sobat klik simpan maka tidak terjadi apa-apa. Selain itu juga belum ada validasinya. Jadi kita perlu menambahkan validasinya disini. Kita ubah tag <form> menjadi seperti dibawah
1 2 3 4 5 6 7 8 9 10 11 12 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 |
<form method="post" class="form-data" id="form-data"> <div class="row"> <div class="col-sm-3"> <div class="form-group"> <label>Nama Mahasiswa</label> <input type="hidden" name="id" id="id"> <input type="text" name="nama_mahasiswa" id="nama_mahasiswa" class="form-control" required="true"> <p class="text-danger" id="err_nama_mahasiswa"></p> </div> </div> <div class="col-sm-3"> <div class="form-group"> <label>Jurusan</label> <select name="jurusan" id="jurusan" class="form-control" required="true"> <option value=""></option> <option value="Sistem Informasi">Sistem Informasi</option> <option value="Teknik Informatika">Teknik Informatika</option> </select> <p class="text-danger" id="err_jurusan"></p> </div> </div> <div class="col-sm-3"> <div class="form-group"> <label>Tanggal Masuk</label> <input type="date" name="tanggal_masuk" id="tanggal_masuk" class="form-control" required="true"> <p class="text-danger" id="err_tanggal_masuk"></p> </div> </div> <div class="col-sm-3"> <div class="form-group"> <label>Jenis Kelamin</label><br> <input type="radio" name="jenkel" id="jenkel1" value="Laki-laki" required="true"> Laki-laki <input type="radio" name="jenkel" id="jenkel2" value="Perempuan"> Perempuan </div> <p class="text-danger" id="err_jenkel"></p> </div> </div> <div class="form-group"> <label>Alamat</label> <textarea name="alamat" id="alamat" class="form-control" required="true"></textarea> <p class="text-danger" id="err_alamat"></p> </div> <div class="form-group"> <button type="button" name="simpan" id="simpan" class="btn btn-primary"> <i class="fa fa-save"></i> Simpan </button> </div> </form> |
Kita tambahkan baris ini
1 |
<p class="text-danger" id="err_nama_mahasiswa"></p> |
baris ini berfungsi untuk menampilkan pesan ketika data belum diisi.
Kemudian pada tag <script> kita tambahkan kode ajax sehingga akan menjadi seperti dibawah ini.
1 2 3 4 5 6 7 8 9 10 11 12 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 |
<script type="text/javascript"> $(document).ready(function(){ //Mengirimkan Token Keamanan $.ajaxSetup({ headers : { 'Csrf-Token': $('meta[name="csrf-token"]').attr('content') } }); $('.data').load("data.php"); $("#simpan").click(function(){ var data = $('.form-data').serialize(); var jenkel1 = document.getElementById("jenkel1").value; var jenkel2 = document.getElementById("jenkel2").value; var nama_mahasiswa = document.getElementById("nama_mahasiswa").value; var tanggal_masuk = document.getElementById("tanggal_masuk").value; var alamat = document.getElementById("alamat").value; var jurusan = document.getElementById("jurusan").value; if (nama_mahasiswa=="") { document.getElementById("err_nama_mahasiswa").innerHTML = "Nama Mahasiswa Harus Diisi"; } else { document.getElementById("err_nama_mahasiswa").innerHTML = ""; } if (alamat=="") { document.getElementById("err_alamat").innerHTML = "Alamat Mahasiswa Harus Diisi"; } else { document.getElementById("err_alamat").innerHTML = ""; } if (jurusan=="") { document.getElementById("err_jurusan").innerHTML = "Jurusan Mahasiswa Harus Diisi"; } else { document.getElementById("err_jurusan").innerHTML = ""; } if (tanggal_masuk=="") { document.getElementById("err_tanggal_masuk").innerHTML = "Tanggal Masuk Harus Diisi"; } else { document.getElementById("err_tanggal_masuk").innerHTML = ""; } if (document.getElementById("jenkel1").checked==false && document.getElementById("jenkel2").checked==false) { document.getElementById("err_jenkel").innerHTML = "Jenis Kelamin Harus Dipilih"; } else { document.getElementById("err_jenkel").innerHTML = ""; } if (nama_mahasiswa!="" && tanggal_masuk!="" && alamat!="" && jurusan!="" && (document.getElementById("jenkel1").checked==true || document.getElementById("jenkel2").checked==true)) { $.ajax({ type: 'POST', url: "form_action.php", data: data, success: function() { $('.data').load("data.php"); document.getElementById("id").value = ""; document.getElementById("form-data").reset(); }, error: function(response){ console.log(response.responseText); } }); } }); }); </script> |
Penjelasan :
Pada baris dibawah ini berarti #simpan adalah maksudnya jika tombol dengan id=”simpan” diklik maka akan memanggil perintah selanjutnya
1 |
$("#simpan").click(function(){ |
Untuk mengirim datanya kita perlu menambahkan baris dibawah yang artinya kita mengambil semua nilai yang ada di dalam inputan pada form yang mempunyai class=”form-data”
1 |
var data = $('.form-data').serialize(); |
Untuk mengirim attachment/input file nanti caranya agak sedikit berbeda dan akan saya bahas pada postingan saya yang lainnya karena pada contoh kali ini saya tidak menyertakan upload file.
Pada baris dibawah artinya kita mengambil isi yang telah diinputkan user pada field yang mempunyai id=”nama_mahasiswa”
1 |
var nama_mahasiswa = document.getElementById("nama_mahasiswa").value; |
Pada baris dibawah merupakan script untuk menampilkan peringatan eror, ini adalah script yang telah kita tambahkan pada tag <form> yang berjenis paragraf dan mempunyai id=’err_nama_mahasiswa’
1 2 3 4 5 |
if (nama_mahasiswa=="") { document.getElementById("err_nama_mahasiswa").innerHTML = "Nama Mahasiswa Harus Diisi"; } else { document.getElementById("err_nama_mahasiswa").innerHTML = ""; } |
Sedangkan
script dibawah merupakan pengecekan secara keseluruhan, jika sudah terisi semua dan radio button sudah tercentang salah satu baru lah dijalankan fungsi ajaxnya
1 |
if (nama_mahasiswa!="" && tanggal_masuk!="" && alamat!="" && jurusan!="" && (document.getElementById("jenkel1").checked==true || document.getElementById("jenkel2").checked==true)) { |
Berikut ini adalah fungsi ajaxnya
1 2 3 4 5 6 7 8 9 10 11 12 |
$.ajax({ type: 'POST', url: "form_action.php", data: data, success: function() { $('.data').load("data.php"); document.getElementById("id").value = ""; document.getElementById("form-data").reset(); }, error: function(response){ console.log(response.responseText); } }); |
sesuai yang tertulis diatas, kita menggunakan method POST karena tentunya lebih aman dibandingkan GET. untuk urlnya bernama form_action.php artinya kita perlu membuat file form_action.php untuk menjalankan aksinya. Jika sukses ada 2 baris yang perlu ditambahkan yaitu
Kode untuk merefresh tabel. Refresh disini bukanlah loading halaman web secara keseluruhan melainkan hanya tabelnya saja dan menggunakan ajax jadi tidak akan terasa oleh user dan tentunya lebih cepat dibandingkan dengan loading keseluruhan halaman. Kodenya adalah seperti dibawah
1 |
$('.data').load("data.php"); |
Kedua adalah mereset form isian tadi menjadi kosong, kodenya adalah seperti dibawah
1 |
document.getElementById("form-data").reset(); |
Selanjutnya adalah membuat file form_action.php yang berfungsi untuk menyimpan ke dalam database. Kemudian isikan dengan script dibawah ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php session_start(); include 'koneksi.php'; include 'csrf.php'; $nama_mahasiswa = stripslashes(strip_tags(htmlspecialchars($_POST['nama_mahasiswa'] ,ENT_QUOTES))); $jenkel = stripslashes(strip_tags(htmlspecialchars($_POST['jenkel'] ,ENT_QUOTES))); $alamat = stripslashes(strip_tags(htmlspecialchars($_POST['alamat'] ,ENT_QUOTES))); $jurusan = stripslashes(strip_tags(htmlspecialchars($_POST['jurusan'] ,ENT_QUOTES))); $tanggal_masuk = stripslashes(strip_tags(htmlspecialchars($_POST['tanggal_masuk'] ,ENT_QUOTES))); $query = "INSERT into tbl_mahasiswa (nama_mahasiswa, alamat, jurusan, jenis_kelamin, tgl_masuk) VALUES (?, ?, ?, ?, ?)"; $dewan1 = $db1->prepare($query); $dewan1->bind_param("sssss", $nama_mahasiswa, $alamat, $jurusan, $jenkel, $tanggal_masuk); $dewan1->execute(); echo json_encode(['success' => 'Sukses']); $db1->close(); ?> |
Kodenya sama seperti file action pada CRUD yang pertama jadi saya tidak perlu menjelaskannya lagi karena saya anggap sobat sudah latihan juga dengan postingan saya yang pertama.
Pada baris include ‘csrf.php’ merupakan script untuk mengamankan dalam pertukaran data saat menggunakan Ajax. Jika tidak ada header maka siapapun dan dimanapun baik menggunakan local ataupun menggunakan server online dapat menginsert data melalui url pada Ajax. File csrf.php ini kita include-kan ke setiap file yang merupakan file action yang menggunakan Ajax dalam pertukaran datanya. Jika sobat mengalami ERROR pada baris ini berarti sobat perlu kembali ke part 1.
Jika sudah selesai maka jalankan http://localhost/dewan-crud-ajax/
Jika sudah diisi semua dan klik simpan maka akan langsung tersimpan tanpa loading. Jika tidak percaya sobat bisa lihat pada demo atau bisa download project. Masih ada 2 lagi yaitu Edit data dan hapus data yang belum berjalan. Namun itu akan saya bahas besok pada postingan saya selanjutnya.
Sekian postingan saya tentang CRUD (Create, Read, Update, Delete) Dengan Ajax Tanpa Loading PHP – Part 2 Insert Data dan Validasinya. Jika ada salah atau ada yang kurang saya mohon maaf dan apabila masih ada eror bisa disampaikan pada kolom komentar dibawah. Untuk menambahkan file upload dan menyimpannya menggunakan Ajax sobat bisa kunjungi postingan saya yang lainnya karena itu tidak saya bahas pada CRUD ini.
Baca juga :
CRUD (Create, Read, Update, Delete) Dengan Ajax Tanpa Loading PHP – Part 1 Menampilkan Data Ajax
CRUD (Create, Read, Update, Delete) Dengan Ajax Tanpa Loading PHP – Part 3 Update Data
CRUD (Create, Read, Update, Delete) Dengan Ajax Tanpa Loading PHP – Part 4 Hapus Data
Cara Mengupload Gambar dengan Ajax dan Menyimpan ke Database PHP
Jika sobat ingin mendownload tutorial diatas maka sobat bisa klik link dibawah ini :
masukinnya sebelum querynya apa gimana mas?
iya kalo mau di insert ke database
kalau form add nya dibanti menggunakan modal bootstrap gimana min?
udah ada postingannya liat aja disini
Membuat CRUD Expert, Upload & Filter/Pencarian & Pencarian dengan JQuery, Ajax, Bootstrap Modal, SweetAlert dan WYSIHTML5 pada PHP – PART 1 MENAMPILKAN DATA
baik. min.. maaf belum baca smpai kesitu, terimakasih.
Min, kok di console muncul error begini
Uncaught TypeError: “” is not a function
at HTMLButtonElement. ((index):131)
at HTMLButtonElement.dispatch (jquery.min.js:3)
at HTMLButtonElement.r.handle (jquery.min.js:3)
Pas cek line 131 kayaknya gak ada yang salah
if(document.getElementById(“jenkel1”).checked == false && document.getElementById(“jenkel2”).checked == false){
document.getElementById(“err_jenkel”).innerHTML = “Jenis Kelamin Harus Dipilih”;
} else {
document.getElementById(“err_jenkel”).innerHTML = “”;
}
Itu yang tadinya ketik manual sampai harus copas, hasilnya sama aja
Apa yang salah ya Min?
mungkin bisa coba di pastekan codenya hasil dari percobaannya ke pastebin dan kirimkan urlnya
https://pastebin.com/Q5WGdfVR
Ini Min file index nya, errornya di line 131 menurut console nya
File auth.php, data.php sama form_action.php juga perlu gak dibuatin di pastebin Min?
Atau gini aja Min, biar situ gak repot juga
Kalo bisa sih, file programnya di upload ulang. Soalnya saya beberapa kali mau download program yang di situs ini, tapi file nya gak ada / gak tersedia
Errornya ketemu bang
Kelupaan naruh && di https://pastebin.com/Q5WGdfVR line 134
Cuma muncul lagi error yang lain di line 138, bunyi errornya “Cannot set property ‘value’ of null”
Yang ini lokasi errornya
document.getElementById(“id”).value = “”;
Errornya udah gak ada lagi, saya lupa naro tag input hidden
Cuma datanya gak tersimpan sama sekali
coba di ajax success tambahin console
success: function(response) {
console.log(response)
$(‘.data’).load(“data.php”);
document.getElementById(“id”).value = “”;
document.getElementById(“form-data”).reset();
},
jika pesannya
“No CSRF token.”
maka ganti di csrf.php
if (isset($headers[‘csrf-token’])) {
if ($headers[‘csrf-token’] !== $_SESSION[‘csrf_token’]) {
exit(json_encode([‘error’ => ‘Wrong CSRF token.’]));
}
}
jika pesannya
‘Wrong CSRF token.’
coba cek meta name=”csrf-token” dengan cara inspect elemen
jika error mungkin ganti
Iya bang, muncul wrong CSRF token
Terus ganti apanya bang?
Ini meta name nya setelah di inspect
Bagian content nya kosong
brarti session csrf-token nya blum ada
Terus gimana dong bang? Bantuin dong, please
ya auth.php nya kaya apa trus coba echo sessionnya di index keluar apa ngga
auth.php nya ngikutin yang disini juga
Kalo echo session, itu gimana ya?
Min mau nanya,klo mau mereset form isian nya tertentu menjadi kosong gmn ya Min? jadi ga Semunya ke reset.
codenya yg ini min — document.getElementById(“form-data”).reset(); —
ganti value per id menjadi kosong
document.getElementById(“nama_mahasiswa”).value = “”;
document.getElementById(“alamat”).value = “”;
jika jumlah record data ada 100, misal kita akan edit data nomor 90 (atau yg ada di page 9), setelah simpan maka tabel akan kembali ke page 1, bagaimana agar setelah simpan, tabel yang ditampilkan tetap di page 9
mungkin bisa pake cara yg menggunakan fungsi DataTable() bisa dilihat di link dibawah
https://dewankomputer.com/2019/04/08/membuat-crud-expert-pencarian-dengan-jquery-ajax-bootstrap-modal-sweetalert-dan-wysihtml5-pada-php-part-1-menampilkan-data/
Pagi Kak Dewan, Mau tanya nih.
Sya ada kendala, data dalam tabel tidak terload otomatis (Jadi Saya harus refresh halaman biar terload), padahal Sy sudah menyisipkan kode javascript :
$(.’data’). load(data.php);
Kira2 apa yg kurang yah kak?
Tolong bantuannya.
Terima kasih.
kodenya seperti apa?
apakah $(.’data’). load(data.php); sudah dipanggil jg saat simpan berhasilnya?
Hallo, saya ingin menannyakan kenapa yang masuk ke databasenya cuman alama aja ya? selebihnya data kosong
coba cek parameternya di javascript sebelum dikirim lewat ajax
dan pastikan nama parameternya harus sama seperti yg di get di script PHP nya
terima kasih