如何根据日期自动设置id

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (84)

我是PHP的新手。希望有人可以帮助我。

我希望基于日期和来自另一个表的id设置kd_transaksi。当人们下订单时,系统会自动设置kd_transaksi。

$tgl_pesan = date("Ymd");

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

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

但查询结果为NULL。

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

我如何解决它?

预订表

CREATE TABLE `booking` (
  `kd_booking` int(11) NOT NULL,
  `id_user` int(11) NOT NULL,
  `kd_paket` int(11) NOT NULL,
  `jml_org` int(11) NOT NULL,
  `tgl_pesan` date NOT NULL,
  `tgl_wisata` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我想要的是

如果有人今天预订并获得kd_booking 21,那么输出将为:BO2018120521。

提问于
用户回答回答于

您可以通过把LIKE '$tgl_pesan%'改成LIKE '".$tgl_pesan."%'来固定它。

用户回答回答于

首先,你的CREATE TABLE有问题。当你创建一个表时,你应该有一个AUTOINCREMENT主键,这是你的id。所以它会是这样的:

CREATE TABLE `booking` ( `id` INT NOT NULL AUTO_INCREMENT , `id_user` INT(11) NOT NULL , `kd_paket` INT(11) NOT NULL , `jml_org` INT(11) NOT NULL , `tgl_wisata` DATE NOT NULL , `tgl_pesan` DATE NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;

我可以说你有两个错误:

  1. 日期应该像日期('Ym-d')
  2. 你试图插入一个像'“。$ kd_booking。”这样的int值,当它只适用于字符串时。

希望能帮到你。

扫码关注云+社区

领取腾讯云代金券