Переменная обновляется, но не распознается PHP

Даже если переменная правильно изменяется операторами if при нажатии кнопки, вводится исходное значение. В коде при нажатии кнопки значение, называемое пакетом, изменяется в зависимости от ввода. Сумма основана на этом значении. Кнопка и $_POST работают правильно, а также операторы if, потому что соответствующие значения выводятся. Однако сумма $ в коде интеграции Stripe использует значение, использованное при создании переменной.

//Variable is set
$pack = 0;

if( isset( $_POST['moneyBTN'] )) {
    $pack = $_POST['package'];
}

 $amount = (int)$_POST['packages'];
//Stripe integration
require_once('vendor/autoload.php');
\Stripe\Stripe::setApiKey("sk_test_xxxxxxxxxxxx");
$token = $_POST['stripeToken'];
$charge = \Stripe\Charge::create(array(
    "amount" => $amount,
    "currency" => "usd",
    "description" => "Buy",
    "source" => $token,
));

HTML

<form action="shop.php" method="post" >
    <div class="form-group input">
        <select name="package" class="form-control" id="select">       
          <option value="600">1</option>
          <option value="1000">2</option>
          <option value="1300">3</option>    
         </select>
     </div>
     <input type="submit" class="btn btn-primary" name="moneyBTN" value="Continue">
</form>

<form action="shop.php" method="post">
    <script 
          src="https://checkout.stripe.com/checkout.js" class="stripe-button"
          data-key="pk_test_FFqjZfFYCf32C51gmAhR2Ey6"
          data-amount=600
          data-name=Example
          data-description="Buy!"
          data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
          data-locale="auto">
    </script>
</form>

Спасибо за помощь.

3 ответа

Решение
if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    $amount = (int)$_POST['package']; //you had an 's' on 'packages' here.

    //Stripe integration
    require_once('vendor/autoload.php');
    \Stripe\Stripe::setApiKey("sk_test_xxxxxxxxxxxx");
    $token = $_POST['stripeToken'];
    $charge = \Stripe\Charge::create(array(
        "amount" => $amount,
        "currency" => "usd",
        "description" => "Buy",
        "source" => $token,
    ));

    if($charge['success_message']) { //example, not working or tested
        echo 'success';
    } else {
        echo 'failure';
    }

} else { ?>

<form action="shop.php" method="post" >
    <div class="form-group input">
        <select name="package" class="form-control" id="select">       
            <option value="600">1</option> 
            <option value="1000">2</option> 
            <option value="1300">3</option>   
        </select>
    </div>
    <script 
      src="https://checkout.stripe.com/checkout.js" class="stripe-button"
      data-key="pk_test_FFqjZfFYCf32C51gmAhR2Ey6"
      data-amount=600
      data-name=Example
      data-description="Buy!"
      data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
      data-locale="auto">
    </script>
</form>

<?php } ?>

Попробуйте уточнить свои значения в каждом варианте?

<select name="package" class="form-control" id="select">       
        <option value=1>1</option>
        <option value=2>2</option>
        <option value=3>3</option>   
     </select>

В переменной $pack не назначено значение, поэтому ни один из операторов if не работает. Измените переменную $pack на $_POST['pack']. Надеюсь, ваш код работает хорошо.

Другие вопросы по тегам