为什么我的登记表没有提交


why is my register form not submitting?

表单的问题是,当我正确填写所有内容时,提交按钮什么都不做。我的jQuery验证代码100%有效,我认为问题出在我的php代码上。我只是想知道是否有人能告诉我这个问题,然后我就能解决它。如果你想看看我的jquery验证脚本,它在这里

:/

html核心

<div id="registerForm">
<h1>Register</h1>
<form action="core/register.php" method="POST" class="registerForm form-horizontal">
<div class="form-group has-feedback">
<label class="control-label col-sm-2" for="username">Username:</label>
<div class="col-sm-10">
<span></span>
<input type="text" name="username" class="form-control" id="username" placeholder="Enter a username">
</div>
</div>
<div class="form-group has-feedback">
<label class="control-label col-sm-2" for="email">Email:</label>
<div class="col-sm-10">
<span></span>
<input id="email" type="email" name="email" class="form-control" placeholder="Enter your email - IMPORTANT">
</div>
</div>
<div class="form-group has-feedback">
<label class="control-label col-sm-2" for="password">Password:</label>
<div class="col-sm-10">
<span></span>
<input id="password" type="password" name="password" class="form-control" placeholder="Enter a password">
</div>
</div>
<div class="form-group has-feedback">
<label class="control-label col-sm-2" for="confirmpassword">Confirm:</label>
<div class="col-sm-10">
<span></span>
<input id="confirmpassword" type="password" name="confirmpassword" class="form-control" placeholder="Confirm password">
</div>
</div>
<div class="form-group has-feedback">
<label class="control-label col-sm-2" for="code">Code:</label>
<div class="col-sm-10">
<span></span>
<input type="text" id="code" name="code" class="form-control" placeholder="Enter Register Code">
</div>
</div>
<div class="buttonspecial">
<input class="btn btn-primary" type="submit" id="submit" value="Register!">
</div>
</form>
</div>

我的php代码:

//FUNCTION
function register($register_data, $mysqli) {
$username       = $register_data['username'];
$password       = crypt($register_data['password'], PASSWORDSTRING);
$email          = $register_data['email'];
$email_code     = $register_data['email_code'];
if ($insert_stmt = $mysqli->prepare("INSERT INTO users (username, password, email, email_code, created) VALUES (?, ?, ?, ?, NOW())")){
    $insert_stmt->bind_param('ssss', $username, $password, $email, $email_code);
    if ($insert_stmt->execute()) {
        return true;
    }
    return false;
    }
}
//WHERE FORM WILL BE SUBMITTED TO
 <?php
include_once("../core/init.php");
if (isset($_POST['username'], $_POST['email'], $_POST['password'])){
    $register_data = array(
    'username'          => $_POST['username'],
    'password'          => $_POST['password'],
    'email'             => $_POST['email'], 
    'email_code'        => md5($_POST['username'] + microtime() + $_POST['email']),
    );
    if (register($register_data, $mysqli) == true){
        header('Location: ../register_success.php');
    } else {
        header('Location: ../error.php?err=Registration failure: INSERT');
    }
}
?>

jquery验证代码:

    $(document).ready(function () {
    $('.registerForm').validate({
        // errorPlacement: function(error,element) {
        //     return true;
        // },
        rules: {
            username: {
                required: true,
                rangelength: [5, 20],
                remote: {
                    url: 'core/check/check.php',
                    type: "post",
                    data: {
                        username: function () {
                            return $("#username").val();
                        }
                    }
                }
            },
            password: {
                required: true,
                rangelength: [5, 50]
            },
            confirmpassword: {
                required: true,
                rangelength: [5, 50],
                equalTo: password
            },
            email: {
                required: true,
                remote: {
                    url: 'core/check/check.php',
                    type: "post",
                    data: {
                        email: function () {
                            return $("#email").val();
                        }
                    }
                }
            },
            code: {
                required: true,
                remote: {
                    url: 'core/check/check.php',
                    type: "post",
                    data: {
                        code: function () {
                            return $("#code").val();
                        }
                    }
                }
            },
        },
        messages: {
            username: {
                required: "Enter a username.",
                rangelength: "Username must be 5 to 20 character",
                remote: "Username have been taken"
            },
            password: {
                required: "Enter a password.",
                rangelength: "Password must be 5 to 50 character",
                remote: "Email have been taken"
            },
            confirmpassword: {
                required: "Confirm your password.",
                rangelength: "Password must be 5 to 50 character",
                equalTo: "Your password does not match"
            },
            email: {
                required: "Enter your email(NOT SPAM EMAIL).",
                remote: "This Email have been taken"
            },
            code: {
                required: "Enter your Register Code",
                remote: "Invalid code or used code"
            },
            recaptcha_response_field: {
                required: "Do the reCaptcha",
                remote: 'Bad reCaptcha'
            }
        },
        highlight: function (element) {
            $(element).closest('.form-group').removeClass('has-success').addClass('has-error').find('.col-sm-10 span').removeClass('glyphicon glyphicon-ok form-control-feedback').addClass('glyphicon glyphicon-remove form-control-feedback');
        },
        unhighlight: function (element) {
            $(element).closest('.form-group').removeClass('has-error').addClass('has-success').find('.col-sm-10 span').removeClass('glyphicon glyphicon-remove form-control-feedback').addClass('glyphicon glyphicon-ok form-control-feedback');
        },
        submitHandler: function () {
            form.submit();
        }
    });
});

check.php

 <?php
include_once("../core/connect/db_connect.php");
// EMAIL
if (isset($_POST['email'])){
     $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
     $email = filter_var($email, FILTER_VALIDATE_EMAIL);
     $pre_stmt = "SELECT email FROM users WHERE email = ? LIMIT 1";
     $stmt = $mysqli->prepare($pre_stmt);
     if ($stmt) {
        $stmt->bind_param('s', $email);
        $stmt->execute();
        $stmt->store_result();
            // CHECK IF EMAIL EXIST
            if ($stmt->num_rows == 0){
                echo "true";
                $stmt->close();
            } else {
                echo "false";
                $stmt->close();
            }
     }
}
// CODE
if (isset($_POST['code'])){
     $ccode = filter_input(INPUT_POST, 'code', FILTER_SANITIZE_STRING);
     $code = md5(trim(strtolower($ccode)));
     $pre_stmt = "SELECT code FROM code WHERE code = ? AND used = 0";
     $stmt = $mysqli->prepare($pre_stmt);
     if ($stmt) {
        $stmt->bind_param('s', $code);
        $stmt->execute();
        $stmt->store_result();
            // CHECK IF CODE EXIST
            if ($stmt->num_rows == 1){
                echo 'true'; //OKAY
                $stmt->close();
            } else {
                echo 'false'; //NOTOK
                $stmt->close();
            }
     }
}
// USERNAME
if (isset($_POST['username'])){
     $username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
     $pre_stmt = "SELECT username FROM users WHERE username = ?";
     $stmt = $mysqli->prepare($pre_stmt);
     if ($stmt) {
        $stmt->bind_param('s', $username);
        $stmt->execute();
        $stmt->store_result();
            // CHECK IF CODE EXIST
            if ($stmt->num_rows == 0){
                echo 'true';
                $stmt->close();
            } else {
                echo 'false';
                $stmt->close();
            }
     }
}

?>

这是您的问题。。。

submitHandler: function () {
    form.submit();
}
  1. 您忘记将form参数传递到函数中。submitHandler接管并阻止本地表单提交;并且它不能对CCD_ 3做任何事情,因为这里不存在CCD_。它应该看起来更像这样。。。

    submitHandler: function (form) { // <- need to pass the 'form' argument here
        $(form).submit();
    }
    
  2. 但是,由于本机form操作的.submit()正是插件默认情况下已经完成的操作,因此您根本不需要submitHandler。整件事都是多余的。删除它。删除整个submitHandler选项

(只有当你想做其他事情,比如通过ajax()提交整个表单时,才需要submitHandler。)


注意

您的remote方法正在使用data选项。。。

rules: {
    username: {
        // other rules,
        remote: {
            url: 'core/check/check.php',
            type: "post",
            data: {
                username: function () {
                    return $("#username").val();
                }
            }
        }
    }, ....

username字段不需要data选项,因为默认情况下,字段的值已通过remote发送。

rules: {
    username: {
        // other rules,
        remote: {
            url: 'core/check/check.php',
            type: "post"
        }
    }, ....

(只有当您想将一些其他附加数据与此remote请求一起发送时,才需要data选项。)


你在这里还有更多多余的东西。。。

password: {
    required: true,
    rangelength: [5, 50]
},
confirmpassword: {
    required: true,
    rangelength: [5, 50],
    equalTo: password
},

当使用equalTo规则时,它要求confirmpassword字段与password字段完全匹配。这意味着您不能将confirmpassword留空或输入错误的字符数,因为它已经必须password字段匹配。

这实际上是一样的。。。

password: {
    required: true,
    rangelength: [5, 50]
},
confirmpassword: {
    required: true,  // <- I left this one for an initial empty form
    equalTo: password
},

BTW:您可以简单地在错误消息中使用占位符。将动态插入正确的值。

rangelength: "Username must be {0} to {1} characters",

您的演示:http://jsfiddle.net/2jwja5uy/1/

删除了remote方法的相同DEMO,因此您可以看到它激发提交:http://jsfiddle.net/2jwja5uy/2/