Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!
  • Guest, before posting your code please take these rules into consideration:
    • It is required to use our BBCode feature to display your code. While within the editor click < / > or >_ and place your code within the BB Code prompt. This helps others with finding a solution by making it easier to read and easier to copy.
    • You can also use markdown to share your code. When using markdown your code will be automatically converted to BBCode. For help with markdown check out the markdown guide.
    • Don't share a wall of code. All we want is the problem area, the code related to your issue.


    To learn more about how to use our BBCode feature, please click here.

    Thank you, Code Forum.

PHP HTML form redirecting when it is not meant to

Alien10

Coder
I know how to use stripe now, but when I am integrating it into my website, the form takes me to index.php. Here is my code for my checkout.php:

PHP:
<?php
    session_start();
    if (!isset($_SESSION['letin'])) {
        header('Location: index.php');
        exit();
    } else {
        if ($_SESSION['letin'] == true) {
            ?>
            <!DOCTYPE html>
            <html>
            <head>
                <meta name="viewport" content="width=device-width, initial-scale=1">
                <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
                <link rel="stylesheet" href="check-css/style.css">
            </head>
            <body id="body">
                <h2>Responsive Checkout Form</h2>
                <p>Resize the browser window to see the effect. When the screen is less than 800px wide, make the two columns stack on top of each other instead of next to each other.</p>
                <div class="col-25">
                    <div class="container">
                        <h4>Cart <span class="price" style="color:black"><i class="fa fa-shopping-cart"></i> <b>1</b></span></h4>
                        <?php
                            $plan = $_SESSION['plan'];
                            if ($plan == "good") {
                                $price = 1.75;
                                echo '<p><a href="">Good Alien Coder </a><span class="price">$1.75 /mouth AU</span></p>';
                            } elseif ($plan == "beast") {
                                $price = 3.00;
                                echo '<p><a href="">Good Alien Coder </a><span class="price">$3.00 /mouth AU</span></p>';
                            } else {
                                header("Location: index.php");
                                exit();
                            }
                        ?>
                        <hr>
                        <p>Total <span class="price" style="color:black"><b><?php echo "$".$price." AU"; ?> /m</b></span></p>
                </div>
            </div>
            <form action="charge.php" method="post" id="payment-form">
                <div class="form-row">
                    <label for="card-element">Credit or debit card</label>
                    <div id="card-element">
                        <!-- a Stripe Element will be inserted here. -->
                    </div>
                    <!-- Used to display form errors -->
                    <div id="card-errors"></div>
                </div>
                <button>Submit Payment</button>
            </form>
            <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
            <script src="https://js.stripe.com/v3/"></script>
            <script src="charge.js"></script>
            </body>
            </html>
            <?php
        } else {
            header('Location: index.php');
            exit();
        }
    }
?>

charge.js (javascript):

JavaScript:
// Stripe API Key
var stripe = Stripe('pk_test_key');
var elements = stripe.elements();
// Custom Styling
var style = {
    base: {
        color: '#32325d',
        lineHeight: '24px',
        fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
        fontSmoothing: 'antialiased',
        fontSize: '16px',
        '::placeholder': {
            color: '#aab7c4'
        }
    },
    invalid: {
        color: '#fa755a',
        iconColor: '#fa755a'
    }
};
// Create an instance of the card Element
var card = elements.create('card', {style: style});
// Add an instance of the card Element into the `card-element` <div>
card.mount('#card-element');
// Handle real-time validation errors from the card Element.
card.addEventListener('change', function(event) {
    var displayError = document.getElementById('card-errors');
if (event.error) {
        displayError.textContent = event.error.message;
    } else {
        displayError.textContent = '';
    }
});
// Handle form submission
var form = document.getElementById('payment-form');
form.addEventListener('submit', function(event) {
    event.preventDefault();
stripe.createToken(card).then(function(result) {
        if (result.error) {
            // Inform the user if there was an error
            var errorElement = document.getElementById('card-errors');
            errorElement.textContent = result.error.message;
        } else {
            stripeTokenHandler(result.token);
        }
    });
});
// Send Stripe Token to Server
function stripeTokenHandler(token) {
    // Insert the token ID into the form so it gets submitted to the server
    var form = document.getElementById('payment-form');
// Add Stripe Token to hidden input
    var hiddenInput = document.createElement('input');
    hiddenInput.setAttribute('type', 'hidden');
    hiddenInput.setAttribute('name', 'stripeToken');
    hiddenInput.setAttribute('value', token.id);
    form.appendChild(hiddenInput);
// Submit form
    form.submit();
}

and charge.php (PHP):

PHP:
<?php
    require_once('vendor/autoload.php');
    \Stripe\Stripe::setVerifySslCerts(false);
    \Stripe\Stripe::setApiKey('sk_test_key');
    // Get the token from the JS script
    $token = $_POST['stripeToken'];
    // Create a Customer
    $customer = \Stripe\Customer::create(array(
        "email" => "[email protected]",
        "source" => $token,
    ));
    // Creates a subscription plan. This can also be done through the Stripe dashboard.
    // You only need to create the plan once.
    // Subscribe the customer to the plan
    $plan = $_SESSION['plan'];
    if ($plan == "good") {
        $plan_id = "price_1HD6LsKRjA19rEnbbLss9umA";
    } elseif ($plan == "beast") {
        $plan_id = "price_1HD6NzKRjA19rEnbRbxFA7Ih";
    } else {
        header("Location: index.php");
    }
    $subscription = \Stripe\Subscription::create(array(
        "customer" => $customer->id,
        "price" => "plan_HmGWHNjHNEQdpe"
    ));
    print_r($subscription);
    print_r($customer);
 
It is because in charge.php it was trying to get $_SESSION['plan'], but there was no session_start(); and I made it so if the $_SESSION['plan'] was not set or = null then go to index.php
 
I think you may also need:
event.preventDefault();
so that you can prevent the form from submitting normally and use your custom JS to handle the form submission
:)
 
@Alien10 did you find a solution to this problem yet?
It is because in charge.php it was trying to get $_SESSION['plan'], but there was no session_start(); and I made it so if the $_SESSION['plan'] was not set or = null then go to index.php

@Malcolm I think it's possible that this is the solution to Alien10's problem, but I'm not sure. Not using session_start() before checking $_SESSION will result in it showing up as not set, which would result in his script redirecting to index.php

...although it's possible that it is not fixed yet!
 

New Threads

Latest posts

Buy us a coffee!

Back
Top Bottom