Bagaimana cara membuat kode otomatis berdasarkan tanggal

mohon bantuannya gan. saya ingin membuat kode transaksi otomatis dimana kode transaksi itu gambungan antara kd_booking (auto increment) dan tanggal pesan. code yang saya tulis seperti ini


<?php
include '../config/connection.php';

$id_user = $_POST['id_user'];
$kd_paket = $_POST['kd_paket'];
$jml_org = $_POST['jml_org'];
$tgl_pesan = date("Y-m-d");
$tgl_wisata = $_POST['tgl_wisata'];
$wkt_wisata = $_POST['wkt_wisata'];

$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);

$cek = mysqli_query($conn, "SELECT max(kd_booking) AS kode FROM booking WHERE kd_booking LIKE '$tgl_pesan%'");
$row = mysqli_fetch_array($cek);
$kdMax = $row['kode'];

$nourut = substr($kdMax, 8, 4);
$nourut++;
$char = "BO";
$kd_transaksi = $char . $tgl_pesan .printf('%04s', $nourut);

$kd_booking = mysqli_insert_id($conn);

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

$book = "INSERT INTO detail_booking (kd_booking,kd_transaksi,total_bayar) VALUES ('".$kd_booking."','$kd_transaksi',$total_bayar')";
    $ok = mysqli_query($conn,$book);
    if ($ok) {
	header('location:../mybooking.php');
    }else{
	mysqli_close($conn);
}
?>

outputnya hanya 0000 dan tidak menyimpan ke database.

avatar irya
@irya

59 Kontribusi 13 Poin

Diperbarui 5 tahun yang lalu

6 Jawaban:

logikanya seperti ini :

  1. hitung jumlah booking yang ada pada hari ini => $totalBooking
  2. buat format tgl hari ini. => $date = date("Ymd")
  3. generate kode booking => $booking_code = 'BO'.$date.($totalBooking+1).
  4. insert ke db
avatar odhier
@odhier

38 Kontribusi 24 Poin

Dipost 5 tahun yang lalu

Tanggapan

semuanya sudah seperti itu, tapi kok masih 0000 dan ga kesimpan ya mas?

kd_booking itu ada di table mana? booking atau detail_booking?

ada di tabel booking mas. trus saya mysqli_insert_id ke tabel detail_booking

coba dulu query nya di mysql (SQLyog), manual. betul gak qurty insertnya bisa ke save dan auto increment nya otmatis bertambah waktu insert transaksi berikutnya.

avatar notee
@notee

14 Kontribusi 2 Poin

Dipost 5 tahun yang lalu

kesalahan awalnya itu pertama disini mas

<pre> $cek = mysqli_query($conn, "SELECT max(kd_booking) AS kode FROM booking WHERE kd_booking LIKE '$tgl_pesan%'"); </pre> itu hasilnya bernilai Null kemudian saya rubah jadi

<pre> $cek = mysqli_query($conn, "SELECT max(kd_booking) AS kode FROM booking WHERE kd_booking LIKE '$tgl_pesan%'"); $row = mysqli_fetch_array($cek); $kdMax = $row['kode'];

$nourut = substr($kdMax, 8, 4); $nourut++; $char = 'BO'; $nourut = 0; if ($nourut==Null) { $kd_transaksi = $char.$tgl_pesan.printf('%04s', $nourut); $nourut = 0;

$kd_booking = mysqli_insert_id($conn);

$book = &quot;INSERT INTO detail_booking (kd_booking,kd_transaksi,total_bayar) VALUES (&#039;&quot;.$kd_booking.&quot;&#039;,&#039;$kd_transaksi&#039;,$total_bayar&#039;)&quot;;
$ok = mysqli_query($conn,$book);
if ($ok) {
header(&#039;location:../mybooking.php&#039;);
}else{
mysqli_close($conn);
}

}else{ $nourut = 1; } </pre> tapi ouputnya masih 0000. salahnya dimana ya mas?

avatar irya
@irya

59 Kontribusi 13 Poin

Dipost 5 tahun yang lalu

Tanggapan

ya jelas 0 terus, itu no urutnya kan nilainya diubah ke 0. emg hasil yg diharapkan kyk gimana?

hasil yang diharapkan itu. misalkan di melakukan booking hari tanggal 5-12-2018 dan nomor kd_bookingnya 21. nanti kd_transaksinya jadi BO2018120521 mas

saya kasih $nourut itu 0 karena query select nya hasilnya Null mas. tapi penulisannya itu saya tidak tau apakah sudah benar/blm. mohon koreksinya mas

Itu $kodeMax hasilnya apa?

hasilnya ga muncul mas, soalnya query $cek bernilai Null. supaya ga bernilai null caranya gimana ya mas?

dari awal query mu salah, di tabel booking ndak ada field kd_booking. coba kamu cek lg

ok mas. Terima kasih koreksinya

hasil yang diharapkan itu. misalkan di melakukan booking hari ini tanggal 5-12-2018 dan nomor kd_bookingnya 21. nanti kd_transaksinya jadi BO2018120521

avatar irya
@irya

59 Kontribusi 13 Poin

Dipost 5 tahun yang lalu

itu like nya salah. yang sekarang variabel $tgl_pesan jadi string.

contoh: $cek = "select * from tabel1 where field1 like '".$string."%'"

dan format tanggal yg di $tgl_pesan harus sesuai dengan yg di tabel. format tabel : mm/dd/yyyy yg di $tgl_pesan juga mesti sama.

avatar notee
@notee

14 Kontribusi 2 Poin

Dipost 5 tahun yang lalu

Tanggapan

terima kasih banyak atas bantuannya mas

dan kalo tanggalnya ada di tengah like nya harus : %field%

  • kalo field% berati yg depannya field belakangnya terserah
  • kalo %field berarti yg depan terserah tapi belakangnya harus field
  • kalo %field% berarti depan belakang terserah, yg ditengah field
avatar notee
@notee

14 Kontribusi 2 Poin

Dipost 5 tahun yang lalu

Login untuk ikut Jawaban