首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP条带脚本运行两次

PHP条带脚本运行两次
EN

Stack Overflow用户
提问于 2018-09-18 06:51:24
回答 1查看 156关注 0票数 1

我有一个PHP脚本,处理条带付款,并在成功的交易后增加捐赠者数量。但是,脚本递增的是两个,有时是三个而不是一个。条带化事务工作。我最好的理解是页面不知何故运行了两次。

施主号码保存在.txt文件中。页面上没有html。

灯堆。

代码语言:javascript
复制
<?php
ini_set('session.gc_maxlifetime',5);
session_set_cookie_params(5);
session_start();


$unsuccessful = false;
$paid = isset($_SESSION['number']);

//composer requirement for stripe sdk
require_once('vendor/autoload.php');
\Stripe\Stripe::setApiKey("XXXXX");


// Get the payment token ID submitted by the form:
$amount = $_POST['amountInCents'];
$token = $_POST['stripeToken'];


try {
    $charge = \Stripe\Charge::create([
        "amount" => $amount,
        "currency" => "usd",
        "card" => $token,
        "description" => "Business Name"
    ]);
} catch(Stripe_CardError $e) {
  $unsuccessful = true;
    // The card has been declined
}


if($unsuccessful == false){
    #store current donor number in sessioncount.txt
    $file = 'sessioncount.txt';
    $current = (int)file_get_contents($file);
    $new = $current;
    if($paid === false){
      $new = $current + 1;
    }
    $_SESSION['number'] = $new;
    file_put_contents($file, $new);
    header("Location:https://example.com/nextpage.php");
}
EN

回答 1

Stack Overflow用户

发布于 2018-09-18 06:58:39

在不了解更多有关问题的情况下,不可能知道可能导致双重执行的原因。这个脚本是如何调用的?有人在按提交按钮吗?如果是这样,您是否会在用户第一次单击提交按钮时禁用该按钮,以便在用户“双击”的情况下只提交一次请求?对于这样的脚本,这可能是导致双重处理的最常见原因。让我了解更多关于用例的信息,我可以提供更多的帮助。

编辑:由于您现在已经尝试禁用双重提交,因此可以尝试此方法来帮助您进行调试。它可能不能完全解决问题,但如果有多个请求并行命中脚本,它将帮助您缩小范围:

代码语言:javascript
复制
<?php
ini_set('session.gc_maxlifetime',5);
session_set_cookie_params(5);
session_start();

$unsuccessful = false;
$paid = isset($_SESSION['number']);

//composer requirement for stripe sdk
require_once('vendor/autoload.php');
\Stripe\Stripe::setApiKey("XXXXX");


// Get the payment token ID submitted by the form:
$amount = $_POST['amountInCents'];
$token = $_POST['stripeToken'];

if(!isset($_SESSION['processed'])) {
    try {
        $charge = \Stripe\Charge::create([
            "amount" => $amount,
            "currency" => "usd",
            "card" => $token,
            "description" => "Business Name"
        ]);
    } catch(Stripe_CardError $e) {
      $unsuccessful = true;
      // The card has been declined
    }


    if($unsuccessful == false){
        #store current donor number in sessioncount.txt
        $file = 'sessioncount.txt';
        $current = (int)file_get_contents($file);
        $new = $current;
        if($paid === false){
          $new = $current + 1;
        }
        $_SESSION['number'] = $new;
        file_put_contents($file, $new);
        header("Location:https://example.com/nextpage.php");

        $_SESSION['processed'] = true;
    }
} else {
    //Put some code here to help you troubleshoot, such as echoing an alert. If this code is executed, it means that something has externally triggered the execution of this script more than once.
}

如果这不起作用,这意味着对该文件的请求是并行进行的,并且脚本外部的某些东西导致该文件被多次执行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52376652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档