Search code examples
javascriptphpformspostisset

Validate form with ISSET when using js delay function


I am trying to validate if the correct form is being sent with isset(), but this validation is not TRUE when a javascript delay is being applied. How come? What is the best way to check if the correct form was submitted via the POST method? See my code below. Maybe a hidden field would do the trick, but I actually really would like to know why the below code is not going through.

<script type="text/javascript">
window.addEventListener('load', function onload(){
var ccform = document.getElementById('cc_form');
if(ccform){    
    ccform.addEventListener('submit', function before_submit(e){
        setTimeout(function wait(){
            // After waiting, submit the form.
            ccform.submit();
        }, 2000);

        // Block the form from submitting.
        e.preventDefault();
    });
 }
});
</script>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['cc_form_submit'])) {  
    //Send the form
    //Not working
    echo 'ready to send!';  
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {  
    //Send the form
    //Working
    echo 'ready to send without ISSET!';  
}
?>
<form action="" method="post" class="cc_form" id="cc_form"> 
    <button class="cc_form_submit" type="submit" name="cc_form_submit">Send!</button>
</form>

Solution

  • In your example, there are so many possible solutions:

    Solution 1:

    You can use a hidden value inside your form and then check this value in isset() method like:

    <form method="post">
      <input type="hidden" name="form1" />
      <button>Submit</button>  
    </form>
    
    <form method="post">
      <input type="hidden" name="form2" />
      <button>Submit</button>  
    </form>
    
    <?php
    if(isset($_POST['form1'])){
        // do somthing
    }
    
    if(isset($_POST['form2'])){
        // do somthing
    }
    ?>
    

    Solution 2:

    You can use input type submit instead of <button> like:

    <form method="post">
      <input type="submit" name="form1">
    </form>
    
    <form method="post">
      <input type="submit" name="form2">
    </form>
    
    <?php
    if(isset($_POST['form1'])){
        // do somthing
    }
    
    if(isset($_POST['form2'])){
        // do somthing
    }
    ?>
    

    Solution 3:

    You can use different action for multiple <form> like:

    <form method="post" action="form1.php">
    </form>
    
    <form method="post" action="form2.php">
    </form>
    

    Edit:

    As per your comment don't know why if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['cc_form_submit'])) { is not working.

    Its not working because, you are using name= attribute with <button>, in this case solution 2 will work for you.