Postingan lainnya
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.
4 Jawaban:
coba cek jml data user di tgl tsb <pre> <?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 > 1){ 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); } </pre>
Maaf mas dianarifr, kok ditanggal yang sama masih di proses ya mas?
<pre> <?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 > 1){ 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); header("location:../mybooking.php"); } ?> </pre>
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
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>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>
Tanggapan
terima kasih banyak atas bantuannya mas