Проблема с моей формой состоит в том, что, когда я заполняю все правильно и кнопка отправки ничего не делает. Мой код проверки 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
принимает и предотвращает отправку нативной формы; и это ничего не может сделать с form.submit()
так как form
здесь не существует Это должно выглядеть больше так …
submitHandler: function (form) { // <- need to pass the 'form' argument here
$(form).submit();
}
ОДНАКО, так как .submit()
родного form
действие это то, что плагин будет делать по умолчанию, вам не нужно submitHandler
совсем. Все это лишнее. Убери это. Удалить весь submitHandler
вариант.
(The 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"}
}, ....
(The data
опция понадобится только если вы захотите отправить другие дополнительные данные вместе с этим remote
запрос.)
У вас здесь еще больше лишних …
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
методы удалены, так что вы можете увидеть, как это происходит: http://jsfiddle.net/2jwja5uy/2/
Других решений пока нет …