code_legend
code_legend

Reputation: 3285

Running a php code after script been successfully executed

I have the following script

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

    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;
        var appendedStripeToken = false;
        // Insert the token into the form so it gets submitted to the server
        $form.append($('<input type="text" name="stripeToken" />').val(token);  
        function handleCall() {
            if (!appendedStripeToken) {
                appendedStripeToken = true;
                phpCall();
            } 
         }      // and re-submit
      }
    };

function onSubmit() {
    var $form = $('#'+id_from_form);

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

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

}

function phpCall() {
   $.ajax({
      url: 'paymentEmail.php',
      success: function (response) {//response is value returned from php (for    your example it's "bye bye"
        alert(response);
      }
   });
}
  </script>

Essentially the phpCall() should only execute after

$form.append($('<input type="text" name="stripeToken" />').val(token);  

to be executed again, the user would have to refresh or land on the page, and hit the submit button again.

The problem here is that when a user hit submit, then the php code gets executed, which is great but when the page refresh or user relands on the page the php code gets executed regardless if the submit button was clicked.

Below is the php code, where I would like to store the value of this input and post it on the php page

   <input type="text" name="stripeToken" />

php page:

 <?php


 $course_price_final = $_POST['course_price_final'];

 $course_token = $_POST['stripeToken'];
 $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); 

Update:

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

    var appendedStripeToken = false;

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;
        handleCall(token);
    }
};

function handleCall(token) { 
    if (!appendedStripeToken) { 
        // Insert the token into the form so it gets submitted to the server
        $form.append($('<input type="text" name="stripeToken" />').val(token); 
        appendedStripeToken = true; 
        phpCall(); 
    } 
}

function onSubmit() {
    var $form = $('#payment-form'); // TODO: give your html-form-tag an "id" attribute and type this id in this line. IMPORTANT: Don't replace the '#'!

    // Disable the submit button to prevent repeated clicks
    $('#paymentSubmit').prop('disabled', true); // TODO: give your html-submit-input-tag an "id" attribute

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

function phpCall() {
    $.ajax({
        url: 'paymentEmail.php',
        success: function (response) { // response is value returned from php (for your example it's "bye bye")
            alert(response);
        }
    });
}
  </script>

</head>

<body>



<form action="" method="POST" id="payment-form" class="form-horizontal">
  <div class="row row-centered">
  <div class="col-md-4 col-md-offset-4">


  <div class="alert alert-danger" id="a_x200" style="display: none;"> <strong>Error!</strong> <span class="payment-errors"></span> </div>
  <span class="payment-success">
  <? $success ?>
  <? $error ?>
  </span>
  <fieldset>

    <div class="form-group">
    <label class="col-sm-4 control-label" for="textinput">Choose Start Date</label>
    <div class="col-sm-6">
      <select name="course_date" class="address form-control" required>
      <option><?php 

      if(isset($_GET['crs_id'])){

      $course_id = $_GET['crs_id'];

      $get_crs = "select * from courses where course_id='$course_id'";
  $run_crs = mysqli_query($con, $get_crs);

 while($row_crs=mysqli_fetch_array($run_crs)){

        $course_date1  = $row_crs['course_date1'];


        echo $course_date1 ;

  }
}
  ?></option>
  <option value=<?php 

      if(isset($_GET['crs_id'])){

      $course_id = $_GET['crs_id'];

      $get_crs = "select * from courses where course_id='$course_id'";
  $run_crs = mysqli_query($con, $get_crs);

 while($row_crs=mysqli_fetch_array($run_crs)){

        $course_provider = $row_crs['course_provider'];

        $course_date2 = $row_crs['course_date2'];

                $course_price = $row_crs['course_price'];
                                $course_title = $row_crs['course_title'];



        $course_priceFinal = $row_crs['course_priceFinal'];
   $dig = explode(".", $row_crs['course_tax']);
    $course_tax = $dig[1];



        echo $course_date2 ;

  }
}
  ?>/>
  </select>
    </div>
  </div>
<input type="hidden" name="course_provider" value="<?php echo $course_provider; ?>" >
<input type="hidden" name="course_title" value="<?php echo $course_title; ?>" >

    <div class="form-group">
    <label class="col-sm-4 control-label" for="textinput">Course Delivery</label>
    <div class="col-sm-6">
      <select name="course_delivery" class="address form-control" required>
    <option value="classroom">Classroom</option>
  </select>
    </div>
  </div>


  <div class="form-group">
    <label class="col-sm-4 control-label" for="textinput">Seats</label>
    <div class="col-sm-6">
      <select name="course_seats" class="address form-control" required>
      <option value="1">1</option>
  <option value="2">2</option>
   <option value="3">3</option>
  <option value="4">4</option>
    <option value="5">5</option>
  </select>
    </div>
  </div>

  <!-- Form Name -->
  <legend>Billing Details</legend>

  <!-- Street -->
  <div class="form-group">
    <label class="col-sm-4 control-label" for="textinput">Billing Street</label>
    <div class="col-sm-6">
      <input type="text" name="street" placeholder="Street" class="address form-control" required>
    </div>
  </div>

  <!-- City -->
  <div class="form-group">
    <label class="col-sm-4 control-label" for="textinput">Billing City</label>
    <div class="col-sm-6">
      <input type="text" name="city" placeholder="City" class="city form-control" required>
    </div>
  </div>

  <!-- State -->
  <div class="form-group">
    <label class="col-sm-4 control-label" for="textinput">Billing Province</label>
    <div class="col-sm-6">
      <input type="text" name="province" maxlength="65" placeholder="Province" class="state form-control" required>
    </div>
  </div>

  <!-- Postcal Code -->
  <div class="form-group">
    <label class="col-sm-4 control-label" for="textinput">Postal Code</label>
    <div class="col-sm-6">
      <input type="text" name="postal" maxlength="9" placeholder="Postal Code" class="zip form-control" required>
    </div>
  </div>

  <!-- Country -->
  <div class="form-group">
    <label class="col-sm-4 control-label" for="textinput">Country</label>
    <div class="col-sm-6"> 
      <input type="text" name="country" placeholder="Country" class="country form-control">
      <div class="country bfh-selectbox bfh-countries" name="country" placeholder="Select Country" data-flags="true" data-filter="true"> </div>
    </div>
  </div>

  <!-- Email -->

  <?php 


  $email = $_GET['user_email'];
// Note the (int). This is how you cast a variable.
$coupon = isset($_GET['crs_coupon']) ? (int)$_GET['crs_coupon'] : '';
if(is_int($coupon)){
    $course_priceFinalAll = $course_priceFinal - ($course_priceFinal * ($coupon/100));
    $coupon_deduction = $course_priceFinal * ($coupon/100);

};

  ?>
  <div class="form-group">
    <label class="col-sm-4 control-label" for="textinput">Email</label>
    <div class="col-sm-6">
      <input type="text" name="user_email" value=<?php echo $email; ?> class="email form-control" required>
            <input type="hidden" name="course_title" value=<?php echo $course_title; ?> class="email form-control">
                        <input type="hidden" id="box1"  name="course_price" value=<?php echo $course_priceFinal; ?> class="email form-control">


    </div>
  </div><br>
    <legend>Purchase Details</legend>

    <div class="form-group">
    <label class="col-sm-4 control-label">Coupon Code</label>
    <div class="col-sm-6">
      <input type="text"  style="text-align:left; float:left; border:none; width:100px;"  name="name" class="email form-control" placeholder="Coupon Code" value="<?php echo $coupon; ?>%" readonly>

    </div>
  </div>


    <div class="form-group">
    <label class="col-sm-4 control-label">Want to replace the current coupon code?</label>
    <div class="col-sm-6">
      <input type="text"  name="name" class="email form-control" placeholder="Please enter another coupon code" value="">

    </div>
  </div>

  <div class="form-group">
    <label class="col-sm-4 control-label" style="color:#FF6400; font-weight:normal;">Tax</label>
    <div class="col-sm-6">
      <input type="text" class="email form-control"  name="name"style="text-align:left; float:left; border:none; width:100px;" placeholder="Please enter another coupon code" value=" <?php echo $course_tax; ?>%" readonly>

    </div>
  </div>

  <div class="form-group">
    <label class="col-sm-4 control-label" style="color:#FF6400;font-weight:normal;">Price before Tax</label>
    <div class="col-sm-6">
      <input type="text" style="text-align:left; float:left; border:none; width:100px;" name="course_price_before_tax" class="email form-control"  value=" $<?php echo $course_price; ?>" readonly>

    </div>
  </div>

  <div class="form-group">
    <label class="col-sm-4 control-label" style="color:#FF6400; font-weight:normal;">Price After Tax</label>
    <div class="col-sm-6">
      <input type="text" style="text-align:left; float:left; border:none; width:100px;" name="course_price_after_tax" class="email form-control"  value=" $<?php echo $course_priceFinal; ?>" readonly>

    </div>
  </div>

  <div class="form-group">
    <label class="col-sm-4 control-label" style="color:#FF6400; font-weight:normal;">Coupon Deduction</label>
    <div class="col-sm-6">
      <input type="text" style="text-align:left; float:left; border:none; width:100px;" name="course_deduction" class="email form-control"  value=" -$<?php echo $coupon_deduction; ?>" readonly>

    </div>
  </div>

   <div class="form-group">
    <label class="col-sm-4 control-label" style="color:#FF6400"><b>Final Price</b></label>
    <div class="col-sm-6">
<input type="text" style="text-align:left; font-weight:bold; float:left; border:none; width:100px;" name="course_price_final" class="email form-control" placeholder="Course Price Final" value="$<?php echo $course_priceFinalAll; ?>" readonly>

    </div>
  </div>

  <!-- Coupon Code-->
<input type="hidden" name="coupon_code" class="email form-control" placeholder="Coupon Code" value=<?php echo $coupon; ?> readonly>

<!-- Price Final -->
  <br>
  <fieldset>
    <legend>Card Details</legend>
        <span class="payment-errors"></span>

    <!-- Card Holder Name -->
    <div class="form-group">
      <label class="col-sm-4 control-label"  for="textinput">Card Holder's Name</label>
      <div class="col-sm-6">
        <input type="text" name="cardholdername" maxlength="70"  placeholder="Card Holder Name" class="card-holder-name form-control" required>
      </div>
    </div>

    <!-- Card Number -->
    <div class="form-group">
      <label class="col-sm-4 control-label" for="textinput">Card Number</label>
      <div class="col-sm-6">
        <input type="text" id="cardnumber" maxlength="19" data-stripe="number" placeholder="Card Number" class="card-number form-control" required>
      </div>
    </div>


    <div class="form-row">
      <label class="col-sm-4 control-label">CVC</label>
              <div class="col-sm-6">

        <input type="text" size="4" class="email form-control" data-stripe="cvc" required/>
    </div>
  </div>
 <br>
    <div class="form-row"><br><br>
      <label class="col-sm-4 control-label">Expiration (MM/YYYY)</label>
              <div class="col-sm-6">
 <div class="form-inline">
          <select name="select2" data-stripe="exp-month" class="card-expiry-month stripe-sensitive required form-control" required>
            <option value="01" selected="selected">01</option>
            <option value="02">02</option>
            <option value="03">03</option>
            <option value="04">04</option>
            <option value="05">05</option>
            <option value="06">06</option>
            <option value="07">07</option>
            <option value="08">08</option>
            <option value="09">09</option>
            <option value="10">10</option>
            <option value="11">11</option>
            <option value="12">12</option>
          </select>



        </div>
      <input type="text" size="4" class="email form-control" data-stripe="exp-year" required/>
    </div>
 </div>


  <br>

    <!-- Submit -->
    <div class="control-group">
      <div class="controls">
        <center><br>
       <input id="paymentSubmit" class="btn btn-danger"  name="paid"  onClick="onSubmit()" type="submit" value="Pay Now" class="btn btn-success"></button>
        </center>
      </div>
    </div>
  </fieldset>
</form>

update 2 enter image description here

two minor issues: With the button being disabled after a click, it wont allow to click again if for instance an error is returned as shown above. It should only disable it after the input has been released

$form.append($('').val(token));

Upvotes: 2

Views: 1155

Answers (2)

xAqweRx
xAqweRx

Reputation: 1236

It might help you :

function phpCall() {
 if( appendedStripeToken === true ){
   $.ajax({
    type: "POST",
    data: {run: true},
    url: 'paymentEmail.php',
    success: function (response) {//response is value returned from php (for    your example it's "bye bye"
        alert(response);
    }
   });
 }
} 

Upvotes: 1

taxicala
taxicala

Reputation: 21789

Try sending a variable via POST to your PHP:

function phpCall() {
   $.ajax({
      type: "POST",
      data: {run: true},
      url: 'paymentEmail.php',
      success: function (response) {//response is value returned from php (for    your example it's "bye bye"
        alert(response);
      }
   });
}

And then in your php:

if ($_POST['run']) {

    $course_price_final = $_POST['course_price_final'];
    $course_token = $_POST['stripeToken'];
    $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);
}

Upvotes: 2

Related Questions