Terkadang ada beberapa data data tertentu yang pada dikala di input oleh user dilarang sama dengan user lainnya, contohnya ibarat data untuk Username, Email, NISN atau NIK. Dengan tidak adanya data ganda, maka tentunya akan sangat membantu untuk mempermudah direktur dalam proses mengidentifikasi, mencari ataupun memfilter data menurut jenis data tertentu.
Baca juga :
- Validasi Form Input Menggunakan PHP
- Menyimpan Data Ke 2 Tabel MySQL Sekaligus Menggunakan PHP MySQLi
Upaya untuk mencegah terjadinya input data yang sama ke Database MySQL juga merupakan salah satu bentuk/bagian dari validasi data. Dalam tahap validasi ini tentu akan terjadi sebuah proses yang memerintahkan PHP untuk terlebih dahulu untuk mengecek apakah ada data yang sama di Database MySQL. Data akan dicek didalam percabangan terlebih dahulu sebelum kesudahannya disimpan ke Database, bila kondisinya terpenuhi maka kita sanggup mengeset pada percabangan untuk melanjutkan proses penyimpan data, bila tidak terpenuhi maka akan ditampilkan pesan error untuk memberi tahu user bahwa data yang dimasukannya sudah terdapat di Database.
Kaprikornus pada dasarnya nanti kita perlu menciptakan sebuah query yang bertugas untuk mengecek data apakah sudah da didatabase atau belum, nanti proses pengecekannya ditambahkan didalam percabangan lain yang bertugas untuk melaksanakan pengecekan data
Mencegah Input Data yang Sama ke MySQL Menggunakan PHP
Berikut ini saya akan memperlihatkan pola sederhana bagaimana untuk mengecek apakah data yang dikirim sudah ada sebelum didatabase atau belum. Dalam pola ini saya akan mencoba mengecek sebuah data NISN siswa :
Contoh 1 :
<?php $cek_nisn="SELECT nisn FROM ro_formulir WHERE nisn = '$_POST[nisn]'"; $cek_nisn_proses= mysqli_query($koneksi,$cek_nisn); $data_nisn = mysqli_fetch_array($cek_nisn_proses, MYSQLI_NUM); ?>
Lalu nanti Anda sanggup mengecek atau memanggil data diatas untuk dicek didalam percabangan, contohnya ibarat berikut ini
if($data_nisn>0){ $nisnErr="NISN sudah digunakan"; }
Mencegah Input Data yang Sama ke MySQL Menggunakan PHP Prepared
Contoh diatas memakai cara biasa, bila kita ingin mengimplementasikan Prepared Statement, maka query atau susunan kodenya sanggup dibentuk ibarat berikut ini
Contoh 2
<?php //Use Prepare Data $cek_nisn=mysqli_prepare($koneksi, "SELECT * FROM ro_formulir WHERE nisn = ?") or die(mysqli_error()); $nisnpost=mysqli_real_escape_string($koneksi,$_POST['nisn']); //bind mysqli_stmt_bind_param($cek_nisn,"s",$nisnpost); //execute mysqli_stmt_execute($cek_nisn); //result $result=mysqli_stmt_get_result($cek_nisn); //fetch array $data_nisn=mysqli_num_rows($result); ?>
Selanjutnya untuk memanggil pada percabanganya sama ibarat pada pola pertama, yaitu hanya cukup menciptakan atau menambah baris berikut pada percabangan
if($data_nisn>0){ $nisnErr="NISN sudah digunakan"; }
#Tambahan / Ralat
Pada query terkahir kalian juga sanggup saja memakai mysqli_num_rows ($namavariabel); kemudian panggil variabel pada percabanganny ibarat berikut $nama_variabel>1. atau juga sanggup mengeceknya secara manual memakai mysqli_num_rows pada percabangannya, ibarat berikut ini
$sql = "SELECT nisn FROM ro_formulir WHERE username='$data'";
$cek_nisn = mysqli_query($koneksi, $sql);
if (mysqli_num_rows($cek_nisn) > 0) {
$nisnErr="pesan error";
}
Perlu diingat bahwa ketika kalian berhasil submit ke database, dan kalian coba back halaman sebelumnya, dan melaksanakan submit ulang, maka secara otomatis data akan tersubmit kembali, sehingga akan ada data ganda. Seolah olah percabangannya tidak jalan, jadi kalau sudah berhasi submit sebaiknya pada percabangan terakhir arahkan user ke halaman lain semoga ada proses reload/refresh halaman. Soalnya kalau di percabangannya di panggil seperi ini $data_nisn[0]>1 kadang percabanganya tidak jalan, dan bila percabangannya tidak jalan atau tidak memvalidasi dengan baik, coba rubah pemanggilannya jadi ibarat ini $data_nisn>0
Ketika saya coba buat dipercabangannya jadi $data_nisn>0 ternyata meskipun user melaksanakan back ke halaman sebelumny, dan melaksanakan submit ulang, bila ada data sebelumnya, beliau tidak akan mensubmit data sebelumnya yang sama. Jadi sebaiknya nanti pada percabangan, pakai $nama_variabel>0
#CATATAN PENTING
kalau boleh saran pastikan untuk data NISN di set ke Char(10) dan pada waktu input, pastikan diset ke nilai benar, contohnya untuk nisn dengan char(10) maka pas input jangan pakai %d untuk integer tapi pakai %s. Hal tersebut akan berakibat fatal pada dikala pengecekan data. Kaprikornus nanti contohnya ketika nilai input dimulai dari 1 atau 2, percabangan berfungsi dengan baik kalau ada data yang sama di DB, beliau tidak akan submit. Tapi kalau data nisn-nya dimulai dari angka dengan input 3 atau 9, beliau sanggup submit data yang sama berkali kali padahal sudah ada di Database, hal tersebut lantaran pada dikala kita insert datanya dijadikan nilai INTEGER, maka tentu saja nanti tipe data bakal berubah jadi Integer di database dan nilainya niscaya di set dari angka 2, dan si PHP tentu akan mensubmit data berkali kali bila nilai inputnya dimulai dari 3 atau 9, alasannya ialah angka tersebut tidak ada di database, dan sehabis berhasil disubmit pun angkanya akan berubah nilai.
http://php.net/manual/en/function.sprintf.php
KESIMPULAN :
- Lakukan Query ibarat biasa, sanggup pakai num_rows atau fetch_array
- Selanjutnya lakukan validasi dengan memanggilnya dipercabangan,bisa dengan cara ibarat ini $data_nisn>1 atau $data_nisn>0