Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过在中间填充0来生成长度正确的票证id_Php_Html_Sql_Increment_Ticket System - Fatal编程技术网

Php 如何通过在中间填充0来生成长度正确的票证id

Php 如何通过在中间填充0来生成长度正确的票证id,php,html,sql,increment,ticket-system,Php,Html,Sql,Increment,Ticket System,我正在尝试生成一个具有以下格式的票证id值:yymm,以便在我的数据库表中使用。这表示一个2位数的年、2位数的月和一个6位数的数字id,该id对于年-月前缀是唯一的 如果在发布时没有2017年4月当月和年份的其他票证id,则该值的数字部分应默认为000000。在这种情况下,正确生成的票证id应为:1704000000 如果当前月份-年份中存在1个或多个预先存在的票证id,则新票证id应比最高票证id多1个 我目前正在使用php增加票证id,如下所示: $tkid = $rowt["TICKET_

我正在尝试生成一个具有以下格式的票证id值:yymm,以便在我的数据库表中使用。这表示一个2位数的年、2位数的月和一个6位数的数字id,该id对于年-月前缀是唯一的

如果在发布时没有2017年4月当月和年份的其他票证id,则该值的数字部分应默认为000000。在这种情况下,正确生成的票证id应为:1704000000

如果当前月份-年份中存在1个或多个预先存在的票证id,则新票证id应比最高票证id多1个

我目前正在使用php增加票证id,如下所示:

$tkid = $rowt["TICKET_ID"] + 1;
但是使用这个代码,生成一个票证id,如下所示:17041

我已经将我的ticket_id属性设置为unsigned zerofill并键入int 6

由于设计原因,我不想使用自动增量

代码:

尝试更改此选项:

<?php echo date('ym'). $tkid ;?>
为此:

<?php echo date('ym') . str_pad($tkid, 6, '0', STR_PAD_LEFT); ?>

请参阅。

如果这是我的项目,我会让mysql完成所有工作,出于安全原因,我会使用一个准备好的语句

为了消除任何关键字/表名冲突,我建议对组表进行反勾选

我的查询将增加所选groupid的最高票证ID值,如果您在下一个千年开始时仍在使用此代码,则将其左移为零!。如果所选groupid没有行,则将在结果集中传递新的[yymm000000]值

if($stmt=$conn->prepare(
      "(SELECT LPAD(`TICKET_ID`+1,10,'0') FROM `group`
        WHERE `groupid`=? ORDER BY `TICKET_ID` DESC LIMIT 1)
      UNION
       (SELECT CONCAT(DATE_FORMAT(CURDATE(),'%y%m'),'000000'))
      LIMIT 1;"
    )
){
    $stmt->bind_param("s",$tid);
    $stmt->execute();
    $stmt->bind_result($new_tkid);
    $stmt->fetch();
    echo "<input type=\"text\" name=\"TICKET_ID\" value=\"$new_tkid\" readonly=\"readonly\">";
    $stmt->free_result();
}else{
    echo "Query Syntax Error"; // echo mysqli_error($conn);
}
这不仅为您的查询提供了基本的安全性,而且将所有数据操作放在一个地方,而不是将操作与回送混合在一起

使用的功能:

使用printf格式化请求


说真的,printf是一个主力

你首先得到的$rowt[TICKET_ID]的值将得到000000。但是如果我注册第二个客户,它将得到000001,因为在我注册第一个客户后,TICKET ID将更新为000001。echo$rowt[TICKET_ID]并查看它显示的内容
if($stmt=$conn->prepare(
      "(SELECT LPAD(`TICKET_ID`+1,10,'0') FROM `group`
        WHERE `groupid`=? ORDER BY `TICKET_ID` DESC LIMIT 1)
      UNION
       (SELECT CONCAT(DATE_FORMAT(CURDATE(),'%y%m'),'000000'))
      LIMIT 1;"
    )
){
    $stmt->bind_param("s",$tid);
    $stmt->execute();
    $stmt->bind_result($new_tkid);
    $stmt->fetch();
    echo "<input type=\"text\" name=\"TICKET_ID\" value=\"$new_tkid\" readonly=\"readonly\">";
    $stmt->free_result();
}else{
    echo "Query Syntax Error"; // echo mysqli_error($conn);
}
<?php printf('%s%06d', date('ym'), $tkid); ?>