F Mohd Faizal bin Mohamad Benting Lintang, Terengganu CFML · Lucee
18 September 2026

Cara saya elak dua tetamu tempah tarikh yang sama

Klik serentak daripada dua tetamu boleh mencipta tempahan berganda kalau semakan tarikh dan simpan dilakukan secara berasingan. Ini cara saya atasi.

Masalahnya mudah difahami: kalau sistem semak tarikh kosong dahulu, kemudian baru menyimpan, ada ruang masa antara kedua-dua langkah itu. Dua orang yang mengisi borang pada saat yang sama boleh dua-dua lulus semakan.

Penyelesaiannya ialah buat semakan dan simpan dalam satu transaksi, dan kunci baris unit terlebih dahulu. Dalam MySQL, saya mulakan transaksi, kemudian pilih baris unit dengan kunci, barulah semak tarikh bertindan dan masukkan rekod. Permintaan kedua akan menunggu hingga yang pertama selesai.

Syarat pertindihan yang saya guna ialah tarikh masuk baru lebih awal daripada tarikh keluar rekod sedia ada, dan tarikh keluar baru lebih lewat daripada tarikh masuk rekod sedia ada. Dengan syarat ini, tetamu yang keluar pada 12hb dan tetamu yang masuk pada 12hb tidak dikira bertindan.

Lapisan kedua ialah had pangkalan data. Di luar transaksi, tempahan yang tidak sah masih boleh ditolak oleh kekangan pada jadual, jadi kesilapan kod tidak terus menjadi tempahan berganda.