在php中创建自动销毁函数

在php中创建自动销毁函数,php,Php,我正在创建一个名为暂定预订的功能 当用户预订机票时,会给他一个临时pnr号码,并且应该给他大约10分钟的时间进行支付 如果他未能在10分钟内付款,交易将被取消。否则,将显示一条成功消息 请忽略付款逻辑。它可以是任何方法 我正在生成临时pnr号码并将其存储到数据库中 我不明白我该怎么做 php中是否有任何功能可供我使用 这是我的密码: $pnr = getPnr(); echo "You temporarary pnr num is : $pnr <br>";

我正在创建一个名为暂定预订的功能

当用户预订机票时,会给他一个临时pnr号码,并且应该给他大约10分钟的时间进行支付

如果他未能在10分钟内付款,交易将被取消。否则,将显示一条成功消息

请忽略付款逻辑。它可以是任何方法

我正在生成临时pnr号码并将其存储到数据库中

我不明白我该怎么做

php中是否有任何功能可供我使用

这是我的密码:

    $pnr = getPnr();
        echo "You temporarary pnr num is : $pnr <br>";
    echo "Check you mail and save it for future use";
    if($book_ticket == 'true')
    {       DoTentativeBooking($userid,$book_ticket,$from,$to,$date,$pnr,$seats,$email);

    }
function DoTentativeBooking($userid,$book_ticket,$from,$to,$date,$pnr,$seats,$email)
{
        $con = mysqli_connect('server', 'user', 'password', 'database');                
        if (mysqli_connect_errno())
        {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
            return;
        }
        $insertQuery1 = "INSERT INTO tbl_user(`user_id`,`book_ticket`,`from`,`to`,`date`,`user_pnr`,`seat`,`email`,`isConfirm`) VALUES ('".$userid."','".$book_ticket."','".$from."','".$to."','".$date."','".$pnr."','".$seats."','".$email."','No')";
        if (!mysqli_query($con,$insertQuery1))
            {
            //  die('Error: ' . mysqli_error($con));
                echo "error";
            }       
        return; 
}
$pnr=getPnr();
echo“您的临时pnr数量为:$pnr
”; echo“检查邮件并保存以备将来使用”; 如果($book\u ticket=='true') {dotenativebooking($userid、$book_-ticket、$from、$to、$date、$pnr、$seats、$email); } 函数DoTentativeBooking($userid、$book\u ticket、$from、$to、$date、$pnr、$seats、$email) { $con=mysqli_connect(‘服务器’、‘用户’、‘密码’、‘数据库’); if(mysqli\u connect\u errno()) { echo“未能连接到MySQL:”.mysqli_connect_error(); 返回; } $insertQuery1=“插入tbl_用户(`user_id`、`book_ticket`、`from`、`to`、`date`、`user_pnr`、`seat`、`email`、`isConfirm`)值(“$userid.”、'$book_ticket.”、'$from.”、'$to.”、'$date、'$pnr'、'、'$seats'、'.'$email'、'No'); if(!mysqli_query($con,$insertQuery1)) { //die('Error:'.mysqli_Error($con)); 回声“错误”; } 返回; }
  • 将订单创建时间和/或过期时间的时间戳与订单一起保存在数据库中
  • 设置您正在等待付款的标志,例如,在数据库中将
    状态
    列设置为“等待付款”或其他任何内容
  • 处理任何订单时,根据其状态标志对其进行过滤/相应地处理
  • 在“付款确认”页面上,将状态切换为“已付款”时,请检查到期时间戳
  • 换句话说,你没有在特定的时间做任何事情,或者在特定的时间让任何事情过期。您只需保存足够的信息,以便在需要时随时了解订单的状态。

    您可以尝试以下方法

    设置
    临时pnr编号时设置
    时间变量

    $date = new DateTime();
    $time1 = $date->getTimestamp(); // this will give you current timestamp..
    
    并在标题中添加一个检查条件,如

    $time2 = $date->getTimestamp();
    if(round(abs($time1 - $time2) / 60,2) >= 10)
    {
       unset($pnr);
    }
    

    我希望
    dotenativebooking
    的任何参数都不会直接来自
    $\u GET
    $\u POST
    ,因为您的查询似乎不受SQL注入的影响。@AntonioRagagnin如果
    $\u GET或$\u POST
    不能使用,那么可以使用它,但您将数据直接注入到查询字符串中,改为使用MySQL参数。您应该真正更改您的数据库凭据,因为您已经在问题中发布了它们@NishantSolanki,也许我没有使用正确的技术语言,我的意思是,我希望作者没有使用像
    $user=$\u GET['user']
    这样的东西。一个解决方案是
    $user=mysql\u escape\u string($\u GET['user'])
    这个逻辑我理解,我面临的问题是如何给出10分钟的时间。任何php代码片段都会对我有更多帮助。确切的问题是什么?在未来10分钟内创建时间戳?检查当前时间是在时间戳之前还是之后?是,等待10分钟以执行某些操作。如果在规定的时间内没有发生,那么交易失败了那么,具体问题是什么?插入订单时是否将时间戳保存到数据库中?当您准备接受或拒绝付款时,将保存的时间戳与当前时间进行比较?您显然不理解逻辑。请试着一个接一个地再读一遍我写的规则。如果它们从1:56开始,然后直到2:24才进入结账页面,会发生什么?您的值将是-32,并且不会被踢出。-32不小于-50您的编辑不会使它变得更好。您需要使用完整的时间戳并计算秒数(如果需要,将其转换为分钟),正如@deceze在上面所建议的那样。@是的,您是对的。。让我编辑一下我的答案。。谢谢,顺便说一句:)@这会帮到你。。。