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