【问题标题】:working with if statements and queries使用 if 语句和查询
【发布时间】:2015-06-24 15:35:12
【问题描述】:

我试图尽可能简化这一点。 当用户点击提交按钮时,会发生以下情况:

  1. 验证信用卡/到期日期/cvc 值是否有效
  2. 生成一个令牌作为输入
  3. token的值贴在php代码中
  4. 查询运行并存储值,页面被重定位

我一直能够管理到第 2 名。 我无法发布令牌的值,因此不会存储令牌值。

约束:

  1. 如果没有找到或可用的令牌值,我将无法运行查询
  2. 在生成输入令牌之前无法运行 php 脚本
  3. 执行 php 查询后,需要销毁令牌输入

下面是生成token的js函数:

 <script type="text/javascript">
    // This identifies your website in the createToken call below
  Stripe.setPublishableKey('CODE');

  var stripeResponseHandler = function(status, response) {
      var $form = $('#payment-form');

      if (response.error) {
        // Show the errors on the form
        $form.find('.payment-errors').text(response.error.message);
        $form.find('button').prop('disabled', false);
      } else {
        // token contains id, last4, and card type
        var token = response.id;
        // Insert the token into the form so it gets submitted to the server
        $form.append($('<input type="text" name="stripeToken" />').val(token));
        // and re-submit
      }
    };

    jQuery(function($) {
      $('#payment-form').submit(function(e) {
        var $form = $(this);

        // Disable the submit button to prevent repeated clicks
        $form.find('button').prop('disabled', true);

        Stripe.card.createToken($form, stripeResponseHandler);

        // Prevent the form from submitting with the default action
        return false;
      });
    });

  </script>

下面是php代码

 if(isset($_POST['paid'])){
          $course_token = $_POST['stripeToken'];

if (!empty($course_token)) {

    $course_price_final = $_POST['course_price_final'];
    $course_provider = $_POST['course_provider'];
    $user_email = $_POST['user_email'];
    $course_delivery = $_POST['course_delivery'];
    $order_date = date("Y-m-d");
    $insert_c = "insert into orders (course_title,course_price_final,course_provider,user_email,course_date,course_delivery,order_date,course_token) 
             values ('$crs_title','$course_price_final','$course_provider','$user_email','$course_date1','$course_delivery','$order_date','$course_token')";
    $run_c = mysqli_query($con, $insert_c);

ob_start();

}
}
?>

提前致谢,如有任何澄清,请告诉我。

【问题讨论】:

  • 您是否正在从条带中取回令牌?
  • 我正在从 stripe 中检索令牌,它确实输出到输入中,因此我可以直观地看到它,我的问题在于在填充输入后获取该值并将其作为变量发布到 php 中查询可以执行

标签: javascript php jquery mysql ajax


【解决方案1】:

删除提交处理程序末尾的 return false 语句。它会阻止表单被发布。

您实际上可以在提交之前附加输入并稍后提交您的表单。

jQuery(function($) {
  $('#payment-form').click(function(e) {
    var $form = $(this);

    // Disable the submit button to prevent repeated clicks
    $form.find('button').prop('disabled', true);

    Stripe.card.createToken($form, stripeResponseHandler);

    // Prevent the form from submitting with the default action
    $form.submit();
  });
});

【讨论】:

  • 谢谢。这样,令牌就会生成,但只会刷新页面。另外我想提出一个标准,当生成令牌时,它不能再次生成,现在如果你点击按钮 5 次,就会生成超过 5 个输入。
  • 这里去掉 return false 会阻止 Stripe 使用 token 调用 stripeResponseHandler。 Stripe.card.createToken() 函数接收一个函数名,该函数名将在 Stripe 完成时调用。在此函数中提交表单将导致表单在处理完成之前提交。
【解决方案2】:

看起来您在 stripeResponseHandler 中缺少提交:

$form.get(0).submit();

如注释所示,提交函数中的 return false 会阻止提交表单。这是允许 Stripe 处理请求所必需的。您为 Stripe 提供了 stripeResponseHandler 函数,一旦它有机会满足您的请求并返回有效令牌或失败并出现错误,它将调用该函数。不要删除

return false;

声明会干扰允许 Stripe 正确处理请求的工作流程。

您的 stripeResponseHandler 需要处理来自 Stripe 的任何错误,如果没有找到,则需要提交表单。上面的代码是我在网站上用来提交表单的代码。

get(0) 返回 DOM 元素,提交直接发出提交。

【讨论】:

  • 谢谢。这样,令牌就会生成,但只会刷新页面。另外我想提出一个标准,当生成令牌时,它不能再次生成,现在如果你点击按钮 5 次,就会生成超过 5 个输入。
  • 我的目标不是使用条带提交表单,而是只获取生成的输入值,以便可以在上面的 php 代码中使用。当我添加 $form.get(0).submit();它只是刷新页面
  • 这更像是一个工作流问题。我的网站是用 python 编写的,否则我会给你示例代码。但是 PHP 中的工作流程是: - 接受令牌 - 调用 Stripe 库以向卡收费 - 适当地存储信息 - 将用户引导到带有收据的新页面或清除表格 我允许多次注册和收费,所以我只是清除顶部带有一条消息的表单,表明他们已被收费。
  • 感谢您的回复。问题是用户没有立即收费,而是事后收费。所以我试图存储令牌值以便以后使用它
  • 输入生成后我如何激活 php 代码
猜你喜欢
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多