php和javascript表单验证问题

时间:2015-05-08 03:52:45

标签: javascript php html forms validation

我使用bootstrap创建了一个表单,并使用javascript进行表单验证,然后使用php脚本获取发布数据并显示它

基本结构如下,我尽可能地将其作为解决此特定问题的最小化。我遇到的问题是,检查表单验证的脚本在正文末尾的<script>标记中完美运行,但不会阻止页面提交,因为它仍应处理到下一页当表单确实未正确填写时,页面中包含通过php post操作制作的表单内容。

这是为什么?如果表单尚未正确提交,则表单验证仍然不会停止页面转移到帖子数据,因为验证返回false。所有表单验证警报都会正确弹出并且我在检查后没有出现控制台错误,或者我是否需要执行额外的检查以仅在表单有效时处理发布数据?

<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>

2 个答案:

答案 0 :(得分:5)

你应该在提交时调用函数,我不知道你在做什么当前的onsubmit ='...'

所以在提交表单时使用以下的call函数。

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

对于演示: Check Fiddle

答案 1 :(得分:0)

首先你要做的是: 你在另一个if语句中不需要!fryes: 你也可以在第一个if:

中做到这一点

if((Name.value ==&#34;&#34; || Name.value ==&#34; Name&#34;)||(!(document.getElementById(&#34; SandwichRadio&# 34;)。checked || document.getElementById(&#34; WrapRadio&#34;)。checked))||((!(fryyes || fryno))){                          bool = false;                     } 另外你可以做的是如果bool是假的,如果有的话,请禁用你的提交按钮吗?

你也可以在texbox上进行onchange,这样你就可以逐个验证每个文本框或复选框。并且bool是真是假?

我很久以前在jquery上做了类似的事情,用于验证,我检查了每个texbox或数据库下拉列表,然后验证,以及... 代码在

之下
<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>