我的表单的问题是,当我正确填写所有内容并且提交按钮没有做任何事情。我的jQuery验证代码是100%工作,我认为问题是在我的PHP代码。我只是想知道是否有人可以告诉我问题然后我可以解决它。 如果您想在here
看到我的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();
}
}
}
?>
答案 0 :(得分:1)
这是你的问题......
submitHandler: function () {
form.submit();
}
您忘记将form
参数传递给函数。 submitHandler
接管并阻止原生表单提交;并且它无法对form.submit()
执行任何操作,因为此处不存在form
。看起来应该更像......
submitHandler: function (form) { // <- need to pass the 'form' argument here
$(form).submit();
}
但是,由于原始.submit()
操作的form
正是默认情况下插件已经执行的操作,因此您根本不需要submitHandler
。整件事情是多余的。去掉它。 删除整个submitHandler
选项。
(仅当您想要执行其他操作时才需要submitHandler
,例如通过ajax()
提交整个表单。)
备注强>:
您的remote
方法正在使用data
选项...
rules: {
username: {
// other rules,
remote: {
url: 'core/check/check.php',
type: "post",
data: {
username: function () {
return $("#username").val();
}
}
}
}, ....
data
字段不需要username
选项,因为 此 字段的值已经默认情况下使用remote
发送。
rules: {
username: {
// other rules,
remote: {
url: 'core/check/check.php',
type: "post"
}
}, ....
(仅当您想要发送一些其他数据以及此data
请求时,才需要remote
选项。) < / p>
你在这里有更多的多余......
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
},
顺便说一句:您只需在错误消息中使用占位符即可。正确的值将动态插入。
rangelength: "Username must be {0} to {1} characters",
您的演示:http://jsfiddle.net/2jwja5uy/1/
已移除remote
个方法的相同DEMO,因此您可以看到它触发提交:http://jsfiddle.net/2jwja5uy/2/