JQuery验证-远程方法总是在提交表单之前检查并变为true



使用jQuery验证插件,我一直在尝试验证和提交我的表单。JS的代码如下所示。

jQuery.validator.addMethod(
"regex",
function(value, element, regexp) {
var re = new RegExp(regexp);
return this.optional(element) || re.test(value);
},
"Enter a valid phone number."
);
var phoneNumbers_default = {
maxlength: 11,
regex: /^0+d{2}[ -]d{7}( xd{1,6})?$/,
remote: "./includes/check-duplicate-mobile.php" 
// remote: {
//   url: "./includes/check-duplicate-mobile.inc.php",
//   type: "post"
// }
};
var phoneNumbers_required = {
required: true
};
var phoneNumber_message = {
minlength: "Your mobile number should be at least 11 digits long.",
maxlength: "Your mobile number cannot be longer than 11 digits.",
remote: "One active user account already exists for this mobile number. Duplicates are not allowed."
} 
jQuery.extend(phoneNumbers_default,phoneNumbers_required); 
function processForms(el,fileAttached=false) {
var $el = $('#'+el)
$el.validate({
errorElement: 'span',
focusInvalid: false,
//ignore:  ".ignore",
ignore:  "",
rules: {
email: {
required: true,
email: true
},    
mobileNumber: phoneNumbers_default,
p_mobile: phoneNumbers_default,
},
messages: {
email: {
required: "Please provide a valid email.",
email: "Please provide a valid email."
},
mobileNumber:phoneNumber_message,
p_mobile:phoneNumber_message,
},
submitHandler: function (form) {

var $form = $(form);
var url = 'add_user_form.php'; 
var formData = new FormData(form);
$.ajax({        
url: url,
type: "POST",
data: formData,
cache: false,
contentType: false,
processData: false,
success: function(json) {
json = jQuery.parseJSON(json)          
if (json.success) {
// it worked
} else {
// it not worked
}
}, 
});
return false; 
}
})
}

上面的代码在第一次提交时运行良好。我的意思是它是新表单提交。但我的问题是,当我尝试使用相同的形式更新现有数据时,它总是检查远程方法并成为返回值。这意味着,如果我想更新现有的数据,我总是必须更改手机号码。

更新:形式标记

<form class="mt-2 text-dark-m1" id="addNew_user" method="post" action="" >

<div class="form-group row">
<div class="col-sm-3 col-form-label text-sm-right pr-0">
Email:
</div>
<div class="col-sm-9">
<input type="text" name="principal_email" class="form-control col-sm-4" value="<?=$p_email?>" />
</div>
</div>

<div class="form-group required row">
<div class="col-sm-3 col-form-label text-sm-right pr-0">
Mobile :
</div>
<div class="col-sm-9">
<input type="text" name="p_mobile" class="form-control col-sm-4" value="<?=$p_mobile?>" required />
</div>
</div>
<div class="border-t-1 bgc-secondary-l4 brc-secondary-l2 py-35 mx-n25 mt-5">
<div class="offset-md-3 col-md-9 text-nowrap flex-align-center">
<button class="btn btn-info btn-bold px-4" type="submit"><i class="fa fa-check mr-1"></i>Submit</button>
</div>
</div>
</form>

服务端代码:

$mobileNumber =  isset($_GET['p_mobile']) ?  $_GET['p_mobile'] : ''; 
if (strlen($mobileNumber) >= 10 && strlen($mobileNumber) <= 12) {

$sql ="SELECT user_id FROM user WHERE mobile = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$mobileNumber]);    
$uid  = $stmt->fetchColumn();
if ($uid) echo "false"; // it comes to this line
else echo "true";
} else {
echo "false";
}

谁能告诉我,我如何解决这个问题?

在服务器端进行此更改如何?我还在学习php,但我相信你会明白的。

$mobileNumber =  isset($_GET['p_mobile']) ?  $_GET['p_mobile'] : ''; 
$requestUserId =  isset($_GET['user_id']) ?  $_GET['user_id'] : ''; 
if (strlen($mobileNumber) >= 10 && strlen($mobileNumber) <= 12) {

$sql ="SELECT user_id FROM user WHERE mobile = ?";

if (requestUserId) $sql += " AND user_id <> ?"

$stmt = $pdo->prepare($sql);
$stmt->execute([$mobileNumber, $requestUserId]);    
$uid  = $stmt->fetchColumn();
if ($uid) echo "false"; // it comes to this line
else echo "true";
} else {
echo "false";
}

最新更新