validasi duplicate data

saya mau buat validasi agar user tidak bisa melakukan bookingan pada tanggal yang sama. misal budi dia melakukan bookingan paket untuk tanggal 25 desember. kemudian dia melakukan bookingan paket untuk tgl 25 desember lagi. maka disini sistem akan menolak karena tidak boleh melakukan booking pada tanggal yang sama.

session_start();
$id_user = $_POST['id_user'];
$kd_paket = $_POST['kd_paket'];
$jml_org = $_POST['jml_org'];
$tgl_pesan = date("Ymd");
$tgl_wisata = $_POST['tgl_wisata'];
$wkt_wisata = $_POST['wkt_wisata'];

$pack = mysqli_query($conn,"SELECT harga FROM paket WHERE kd_paket='$kd_paket'");
$data = mysqli_fetch_array($pack);
$bayar = $data['harga'] * $jml_org;

$cek = mysqli_query($conn,"SELECT uname,tgl_wisata FROM user JOIN booking USING (id_user) WHERE tgl_wisata='$tgl_wisata' AND uname='$_SESSION[uname]'");
$row = mysqli_fetch_array($cek);
if ($tgl_wisata == $row['tgl_wisata']){
	  echo "<script>window.alert('Maaf proses booking gagal. Anda telah memiliki bookingan lain pada tanggal tersebut')
    window.location='../haldesa.php'</script>";
}else{
	$sql = "INSERT INTO booking (id_user,kd_paket,jml_org,tgl_pesan,tgl_wisata,wkt_wisata) VALUES ('$id_user','$kd_paket','$jml_org','$tgl_pesan','$tgl_wisata','$wkt_wisata')";
	$query = mysqli_query($conn,$sql);
}

errornya progam diatas yaitu masih memproses bookingan untuk tanggal yang sama.

avatar irya
@irya

59 Kontribusi 13 Poin

Diperbarui 5 tahun yang lalu

4 Jawaban:

coba cek jml data user di tgl tsb <pre> &lt;?php session_start(); $id_user = $_POST['id_user']; $kd_paket = $_POST['kd_paket']; $jml_org = $_POST['jml_org']; $tgl_pesan = date("Ymd"); $tgl_wisata = $_POST['tgl_wisata']; $wkt_wisata = $_POST['wkt_wisata'];

$pack = mysqli_query($conn,"SELECT harga FROM paket WHERE kd_paket='$kd_paket'"); $data = mysqli_fetch_array($pack); $bayar = $data['harga'] * $jml_org;

$cek = mysqli_query($conn,"SELECT count(tgl_wisata) FROM user JOIN booking USING (id_user) WHERE tgl_wisata='$tgl_wisata' AND uname='$_SESSION[uname]'"); $row = mysqli_num_rows($cek); if ($row &gt; 1){ echo "&lt;script&gt;window.alert('Maaf proses booking gagal. Anda telah memiliki bookingan lain pada tanggal tersebut') window.location='../haldesa.php'&lt;/script&gt;"; }else{ $sql = "INSERT INTO booking (id_user,kd_paket,jml_org,tgl_pesan,tgl_wisata,wkt_wisata) VALUES ('$id_user','$kd_paket','$jml_org','$tgl_pesan','$tgl_wisata','$wkt_wisata')"; $query = mysqli_query($conn,$sql); } </pre>

avatar dianarifr
@dianarifr

642 Kontribusi 316 Poin

Dipost 5 tahun yang lalu

Maaf mas dianarifr, kok ditanggal yang sama masih di proses ya mas?

<pre> &lt;?php include '../config/connection.php'; session_start(); $id_user = $_POST['id_user']; $kd_paket = $_POST['kd_paket']; $jml_org = $_POST['jml_org']; $tgl_pesan = date("Ymd"); $tgl_wisata = $_POST['tgl_wisata']; $wkt_wisata = $_POST['wkt_wisata'];

$pack = mysqli_query($conn,"SELECT harga FROM paket WHERE kd_paket='$kd_paket'"); $data = mysqli_fetch_array($pack); $bayar = $data['harga'] * $jml_org;

$cek = mysqli_query($conn, "SELECT count(tgl_wisata) FROM user JOIN booking USING (id_user) WHERE tgl_wisata='$tgl_wisata' AND uname='$_SESSION[uname]'"); $row = mysqli_num_rows($cek); if ($row &gt; 1){ echo "&lt;script&gt;window.alert('Maaf proses booking gagal. Anda telah memiliki bookingan lain pada tanggal tersebut') window.location='../haldesa.php'&lt;/script&gt;"; }else{ $sql = "INSERT INTO booking (id_user,kd_paket,jml_org,tgl_pesan,tgl_wisata,wkt_wisata) VALUES ('$id_user','$kd_paket','$jml_org','$tgl_pesan','$tgl_wisata','$wkt_wisata')"; $query = mysqli_query($conn,$sql); header("location:../mybooking.php"); } ?&gt; </pre>

avatar irya
@irya

59 Kontribusi 13 Poin

Dipost 5 tahun yang lalu

Tanggapan

coba cek, format tanggal di database dengan format tanggal dari parameter sudah sama atau tidak,

formatnya udah sama mas. sama-sama yyyy/mm/dd

bisa divalidasi lewat back end atau dari database nya ditambahkan constraint unique kombinasi id_user dan tgl_pesan(dengan kondisi tgl_pesan type nya Date bukan Timestamp), untuk validasi back end seharusnya $row > 0

avatar kikimf
@kikimf

91 Kontribusi 78 Poin

Dipost 5 tahun yang lalu

Tanggapan

saya sudah rubah ke $row > 0 mas. ketika tanggal sama berhasil, hasilnya di tolak tapi permasalahannya ketika saya pilih tanggal yang berbeda juga di tolak. itu gimana ya mas?

Jawaban Terpilih

Query nya seperti ini : <pre> "SELECT * FROM user JOIN booking USING (id_user) WHERE tgl_wisata='$tgl_wisata' AND uname='$_SESSION[uname]'" </pre> $row&gt;0, sebenarnya cara mudah nya cukup validasi lewat database seperti yang saya bilang, saya sarankan agan nya jg validasi lewat database dengan cara <pre> CREATE UNIQUE INDEX index_booking ON booking(id_user, tgl_wisata); </pre>

avatar kikimf
@kikimf

91 Kontribusi 78 Poin

Dipost 5 tahun yang lalu

Tanggapan

terima kasih banyak atas bantuannya mas

Login untuk ikut Jawaban