user13286 user13286 - 6 months ago 15
Javascript Question

How to pass a PHP variable into a Javascript cookie on submit of form?

I am setting up a custom form to be used in my wordpress site. What I would like to do is grab the AUTO_INCREMENT ID of that submission and pass it into a Javascript cookie when the form is submitted. Currently the ID is working, but because the ID isn't grabbed until after the form is submitted, I'm having trouble figuring out how I can pass the variable into the cookie immediately after the form has been submitted(currently I have to submit the form twice before the cookie with the ID is created, and its 1 number lower than it should be since it's a submission behind).

Here's what I have currently:

<?php
if(isset($_POST["submit"])) {
$name = $_POST['full_name'];
$city = $_POST['city'];
$state = $_POST['state'];
$email = $_POST['email'];

$wpdb->insert(
'reps',
array(
'name' => stripslashes($name),
'city' => stripslashes($city),
'state' => stripslashes($state),
'email' => stripslashes($email)
)
);

$lastid = $wpdb->insert_id;
}
?>
<script>
$('#dealer-form').submit(function() {
var repID = '<?php echo $lastid ?>';
setCookie('ID', repID);
});
</script>


As I mentioned this code works on the second submission(since the variable has no value on the first submission), and the ID is 1 number behind because it is grabbing the ID of the previous submission before reassigning the variable value.

Answer

PHP, being a server-side scripting language, is executed before the data is sent to your browser. JavaScript, a client-side scripting language, is executed as soon as the script is encountered by the browser.

Your approach is forgetting this separation between front- and back-end.

To accomplish what you're trying to do, simply output the setCookie call when you've submitted your form in php:

<?php
    if(isset($_POST["submit"])) {
        $name = $_POST['full_name'];
        $city = $_POST['city'];
        $state = $_POST['state'];
        $email = $_POST['email'];

        $wpdb->insert(
            'reps',
            array(
                'name' => stripslashes($name),
                'city' => stripslashes($city),
                'state' => stripslashes($state),
                'email' => stripslashes($email)
            )
        );

        $lastid = $wpdb->insert_id;

        printf( '<script>setCookie("ID", %d);</script>', $lastid );
    }
?>
Comments