Php jQuery验证插件添加方法
我正试图用下面的代码向jQuery验证插件添加一个新方法。我的目标是检查数据库(MySQL)中是否已经存在电子邮件地址。如果是,它将通知用户注册另一个电子邮件地址。不知何故,总是返回的结果是“电子邮件已被接收” 以下是validate.js中的代码:Php jQuery验证插件添加方法,php,jquery,mysql,validation,Php,Jquery,Mysql,Validation,我正试图用下面的代码向jQuery验证插件添加一个新方法。我的目标是检查数据库(MySQL)中是否已经存在电子邮件地址。如果是,它将通知用户注册另一个电子邮件地址。不知何故,总是返回的结果是“电子邮件已被接收” 以下是validate.js中的代码: $(document).ready(function(){ $.validator.addMethod("uniqueEmail", function(value, element) { $.ajax({ type: "POST
$(document).ready(function(){
$.validator.addMethod("uniqueEmail", function(value, element) {
$.ajax({
type: "POST",
url: "availability.php",
data: value,
success: function(exist)
{
if(exist>0) {
return true;
} return false;
}
});
} ,"Email is already taken");
$('#signup form').validate({
rules: {
firstname: {
required: true,
minlength:3
},
lastname: {
required: true,
minlength: 3
},
affiliation: {
required: true,
},
occupation: {
required: true,
},
email: {
required: true,
email: true,
uniqueEmail: true
},
password: {
minlength: 6,
required: true
},
repassword: {
equalTo: "#password"
}
},
messages: {
firstname: {
minlength: "Your first name should be more than 3 characters"
},
lastname: {
minlength: "Your last name should be more than 3 characters"
},
},
success: function(label) {
label.text('OK!').addClass('valid');
}
});
});
以下是我的php文件中的代码:
<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/braddclient/includes/magicquotes.inc.php';
include $_SERVER['DOCUMENT_ROOT'] . '/braddclient/includes/db.inc.php';
$email = strtolower($_POST['email']);
$email = mysqli_real_escape_string($link, $email);
$sql = "SELECT * FROM bradduser WHERE email='$email'";
$result = mysqli_query($link, $sql);
$num = mysqli_num_rows($result);
echo $num;
?>
在这里,使用自定义方法不能完全做到这一点,因为您需要验证插件来知道这是一个远程(或者更重要的是,一个异步)请求
幸运的是,它有内置的帮助功能。您可以在此处使用自定义方法,而不是使用自定义方法,因此完全不使用自定义方法,并将其更改为:
uniqueEmail: true
为此:
remote: { url: "availability.php", type: "post" }
然后将错误消息添加到消息中,如下所示:
email: { remote: "Email is already taken" }
<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/braddclient/includes/magicquotes.inc.php';
include $_SERVER['DOCUMENT_ROOT'] . '/braddclient/includes/db.inc.php';
$email = strtolower($_POST['email']);
$email = mysqli_real_escape_string($link, $email);
$sql = "SELECT * FROM bradduser WHERE email='$email'";
$result = mysqli_query($link, $sql);
if(mysqli_num_rows($result) > 0) {
echo "false"; //validation fails, email in use
} else {
echo "true"; //validation passes
}
?>
同时将PHP端更改为匹配,返回true
或false
,如下所示:
email: { remote: "Email is already taken" }
<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/braddclient/includes/magicquotes.inc.php';
include $_SERVER['DOCUMENT_ROOT'] . '/braddclient/includes/db.inc.php';
$email = strtolower($_POST['email']);
$email = mysqli_real_escape_string($link, $email);
$sql = "SELECT * FROM bradduser WHERE email='$email'";
$result = mysqli_query($link, $sql);
if(mysqli_num_rows($result) > 0) {
echo "false"; //validation fails, email in use
} else {
echo "true"; //validation passes
}
?>
回答得好。我不知道遥控器:
。应该想到他们有一些东西可以应付这种情况+1你好,尼克,我已经按照你的方法更改了代码,但对我来说不起作用。不知何故,错误消息“请输入有效的电子邮件地址”不断出现。我的电子邮件规则如下:email:{required:true,email:true,remote:{url:“availability.php”,键入:“post”},我犯了什么错误吗?@dave-你的php代码被击中了吗?在点击远程邮件之前,email:true
规则似乎失败了……如果您将其添加到messages
中,应该会显示不同的错误消息,就像我上面所说的。我发现了错误。我输入了mysqli_num_行而不是mysqli_num_行!我讨厌我犯这样的错误。谢谢你,尼克@dave-Welcome:)您现在都准备好了吗?对于任何对此示例有问题的人,我在服务器端语言的响应方面遇到了问题,所以我设法通过将插件中的数据类型
从ajax
直接从数据类型:“json”
更改为数据类型:“text”来解决这个问题
在第1206行