简体   繁体   中英

php and javascript form validation issue

I have created a form using bootstrap and am using javascript for form validation and then a php script to grab the post data and display it

the basic structure is the following and I have made this as minimal as I could to address this specific issue. The issue I am having is that the script to check for the form validation works perfectly in the <script> tags at the end of the body, but instead of preventing the page from being submitted as it should it still processes to the next page with the form's contents that are being made through the php post action when the form is indeed not filled out correctly.

Why is this? Should the form validation still not stop the page from moving on to the post data since the validation is returning false if the form has not been submitted correctly. All the form validation alerts pop up correctly and I;m getting no console errors after checking, or do I need to perform an additional check to only process the post data if the form is valid?

<html>
   other tags.....
   <body>
      <form name = "OrderForm" action = "process_order.php" onsubmit = "orderbutton" method = "post">
          a bunch of content, divs, checkboxes, etc
      </form>
   </body>
   <script>

            function CheckForm() {
                    var Name = document.getElementById("Name");
                    var fries = document.forms.OrderForm.FryRadio;
                    var fryyes = fries[0].checked
                    var fryno = fries[1].checked

                    var bool = true;

                    if ((Name.value == "" || Name.value == "Name") || (!(document.getElementById("SandwichRadio").checked || document.getElementById("WrapRadio").checked)))  {
                         bool = false;
                    }

                    else if (!(fryyes || fryno)) {
                        bool = false;
                    }

                    if (!(bool)) {
                        alert("Please fill out all of the required fields.");
                        return false;
                    }
                    else {
                        alert("Your order is being submitted");
                        console.log("Submitted")
                    }

            };

    </script>
</html>

You should call function on submit , I dont know what are you doing with current onsubmit='...'

So use following, call function when you submit the form.

  <form name = "OrderForm" action = "process_order.php" onsubmit = "return CheckForm()" method = "post">
      a bunch of content, divs, checkboxes, etc
  </form>

For demo : Check Fiddle

first of all what you can do is: you do not need the !fryes in another if statement: you can do it also in the first if:

if ((Name.value == "" || Name.value == "Name") || (!(document.getElementById("SandwichRadio").checked || document.getElementById("WrapRadio").checked)) || ( (!(fryyes || fryno))) { bool = false; } also what you can do is if bool is false, disable your submit button if there is any?

you can also do an onchange on the texboxes, that way you can validate each text box or checkbox one by one. and have the bool true and false?

I did something like this on jquery long time ago, for validation, where I checked each texbox or dropdown against database and then validate, aswell.. The code is below

<script>
  $(document).ready(function(){
    var works=true; 
    //Coding for the captcha, to see if the user has typed the correct text
    $('#mycaptcha').on('keyup',function(){
        if($('#mycaptcha').val().length>=5){
            $.post("user_test/captcha_check.php",
                {
                // userid: $("#userlogin").val(),
                 mocaptcha: $("#mycaptcha").val(),
                },
                function(data,status){

                    if(data==0){
                        document.getElementById("final_error").innerHTML="Captcha did not match";
                        works=false;    
                    }
                    if(data==1){
                        works=true;
                        document.getElementById("final_error").innerHTML="";
                    }
                });
        }
        });
        //Works like a flag, if any mistake in the form it will turn to false
        //Coding the submit button...
        $('#submitbtn').on('click',function(){
            var arrLang = [];
            var arrPrf  = [];
            uid         = $("#userid").val();
            capc        = $('#mycaptcha').val();
            pwd         = $("#pwd1").val();
            fname       = $("#fname").val();
            lname       = $("#lname").val();
            email       = $("#memail").val();
            pass        = $("#pwd2, #pwd1").val();
            daysel      = $('#dayselect').val();
            monthsel    = $('#monthselect').val();
            yearsel     = $('#yearselect').val();
            agree_term  = $('#agree_box').prop('checked');
             //checks if the textboxes are empty it will change the flag to false;  
            if((!uid) || (!capc) ||(!fname) || (!lname) || (!email) || (!pass) || (!daysel) || (!monthsel) || (!yearsel) || (!agree_term)){
                works=false;
            }
            if(!works){
                document.getElementById('final_error').innerHTML ="<font size='1.3px' color='red'>Please fill the form, accept the agreement and re-submit your form</font>";
            }
            else{
               works=true;
               //A jquery function, that goes through the array of selects and then adds them to the array called arrLang
               $('[id=lang]').each(function (i, item) {

                       var lang = $(item).val();
                       arrLang.push(lang);

                });
                //A jquery function, that goes through the array of select prof and then adds them to the array called arrprf
                $('[id=prof]').each(function (i, item) {

                       var prof = $(item).val();
                       arrPrf.push(prof);

                });
                var data0 = {fname: fname, mlname : lname, userid : uid,password:pwd, emailid : email, mylanguage : arrLang, proficient : arrPrf, dob : yearsel+"-"+monthsel+"-"+daysel};
                //var json = JSON2.stringify(data0 ); 
                $.post("Register_action.php",
                    {
                        // userid: $("#userlogin").val(),
                        json: data0,
                    },
                function(data,status){
                    if(data==1){
                        //alert(data);
                        window.location = 'Registered.php';
                    }
                    document.getElementById("userid_error").innerHTML=data; 
                });
            }
        });
        //to open the agreement in a seperate page to read it.. 
        $("#load_agreement").click(function () {                    
               window.open("agreement.html", "PopupWindow", "width=600,height=600,scrollbars=yes,resizable=no");
        });
        //A code that loads, another page inside the agreement div  
        $( "#agreement" ).load( "agreement.html" );
        //This part here will keep generating, duplicate of the language and profeciency box, incase someone needs it
        $('#Add').click(function(){
            //we select the box clone it and insert it after the box
            $('#lang').clone().insertAfter("#lang").before('<br>');
            $('#prof').clone().insertAfter("#prof").before('<br>');
        });
         //this part here generates number 1-31 and adds into month and days
        i=0;
        for(i=1; i<=31; i++){

            $('#dayselect').append($('<option>', {value:i, text:i}));
            if(i<=12){  
                $('#monthselect').append($('<option>', {value:i, text:i}));
            }
        }
        //this code here generates years, will work for the last, 120 years
        year=(new Date).getFullYear()-120;
        i = (new Date).getFullYear()-16;
        for(i; i>=year; i--){
            $('#yearselect').append($('<option>', {value:i, text:i}));
        }
        //Regex Patterns
        var pass = /^[a-z0-9\.\-\)\(\_)]+$/i;
        var uname = /^[a-z0-9\.\-]+$/i;
        var mname = /^[a-z ]+$/i;
        var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
        //When the Last Name texbox is changing this will be invoked
        $("#fname").keydown(function(){

                //comparing the above regex to the value in the texbox, if not from the box then send error
                if(!mname.test($("#fname").val())){

                    //fill the textbox label with error
                    document.getElementById("fname_error").innerHTML="<font color='red' size='2px' family='verdana'>Invalid FirstName</font>";
                    $("#fname").css("border-color","rgba(255,0,0,.6)"); 
                    works=false;
                }
                else{
                    $("#fname").css("border-color","rgba(0,255,100,.6)"); 
                        document.getElementById("fname_error").innerHTML="";
                        works = true;
                    }       
        });//end of fname onchange
        //When the Last Name texbox is changint this will be invoked
        $("#lname").keydown(function(){
             //comparing the above regex to the value in the texbox
            if(!mname.test($("#lname").val())){

                //fill the textbox label with error
                document.getElementById("lname_error").innerHTML="<font color='red' size='2px' family='verdana'>Invalid LastName</font>";
                $("#lname").css("border-color","rgba(255,0,0,.6"); 
                works=false;
            }
            else{
                $("#lname").css("border-color","rgba(0,255,100,.6)"); 
                document.getElementById("lname_error").innerHTML="";
                works = true;
                }
        });//end of lname on change

        //When the userid textbox is chaning,this will be invoked
        $("#userid").keydown(function(){
            //comparing the above regex to the value in the texbox                                  
            if(!uname.test($("#userid").val())){
                //fill the textbox label with error
                document.getElementById("userid_error").innerHTML="<font color='red' size='2px' family='verdana'>Invalid UserId</font>";
                $("#userid").css("border-color","rgba(255,0,0,.6"); 
                works=false;
            } 
            /*
            else if($("#userid").val().length<4){
                //fill the textbox label with error
                document.getElementById("userid_error").innerHTML="<font color='red' size='2px' family='verdana'>Minimum user length is 4</font>";
                $("#userid").css("border-color","rgba(255,0,0,.6"); 
                //disable the submit button
                //$('#submitbtn').attr('disabled','disabled'); 
                works=false;
            }
                */
            else{
                $("#userid").css("border-color","rgba(0,0,0,.3)"); 
                $.post("user_test/user_email_test.php",
                    {
                        // userid: $("#userlogin").val(),
                        userid: $("#userid").val(),
                    },
                function(data,status){
                    document.getElementById("userid_error").innerHTML=data; 
                });
            works = true;
            }
        });//end of change
        //When the userid textbox is chaning,this will be invoked
        $("#memail").keydown(function(){
            //comparing the above regex to the value in the texbox                                  
            if(!emailReg.test($("#memail").val())){
                //fill the textbox label with error
                document.getElementById("email_error").innerHTML="<font color='red' size='2px' family='verdana'>Invalid Email</font>";
                $("#memail").css("border-color","rgba(255,0,0,.6"); 
                works=false;
            }

            else{
                works = true;

                $.post("./user_test/user_email_test.php",{
                    useremail: $("#memail").val(),
                },
                function(data,status){
                    document.getElementById("email_error").innerHTML=data;
                    $("#memail").css("border-color","rgba(0,255,0,.3)"); 
                    works = true;
                });

                }

        });//end of change
        //When the userid textbox is chaning,this will be invoked
        $("#pwd2").keyup(function(){
            //checking length of the password
            if($("#pwd2").val().length<10){
                document.getElementById("pwd_error").innerHTML="<font color='red' size='2px' family='verdana'>Please enter a password minimum 10 characters</font>";
                //$('#submitbtn').attr('disabled','disabled');
                $("#pwd1, pwd2").css("border-color","rgba(0,255,100,.6)");
                works=false;
            }
            //checking if the password matches  
            else if($("#pwd1").val()!=$("#pwd2").val()){
                document.getElementById("pwd_error").innerHTML="<font color='red' size='2px' family='verdana'>Passwords do not match</font>";
                //$('#submitbtn').attr('disabled','disabled');
                works=false;
                $("#pwd1, pwd2").css("border-color","rgba(0,255,100,.6)");   
            }
            else{
                $("#pwd1, #pwd2").css("border-color","rgba(0,0,0,.3)");
                document.getElementById("pwd_error").innerHTML="";  
                //comparing the above regex to the value in the texbox and checking if the lenght is atleast 10                                 
                if(!pass.test($("#pwd2").val())){

                    //fill the textbox label with error
                    document.getElementById("pwd_error").innerHTML="<font color='red' size='1px' family='verdana'>Your password contains invalid character, Please use: a-z 0-9.( )_- only</font>";
                    $("#pwd1, #pwd2").css("border-color","rgba(255,0,0,.6"); 
                     works = false; 
                } 
                else{
                    $("#pwd1 , #pwd2").css("border-color","rgba(0,255,100,.6)");
                    works = true;

                }
            }
        });//end of change

    });//end of document ready
</script>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM