表单的问题是,当我正确填写所有内容时,提交按钮什么都不做。我的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();
}
您忘记将
form
参数传递到函数中。submitHandler
接管并阻止本地表单提交;并且它不能对CCD_ 3做任何事情,因为这里不存在CCD_。它应该看起来更像这样。。。submitHandler: function (form) { // <- need to pass the 'form' argument here $(form).submit(); }
但是,由于本机
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/