表单验证适用于 2 个字段,但不适用于第 3 个字段 - 是啥破坏了验证检查
Posted
技术标签:
【中文标题】表单验证适用于 2 个字段,但不适用于第 3 个字段 - 是啥破坏了验证检查【英文标题】:Form Verification works on 2 fields but not the 3rd field - whats breaking the validation check表单验证适用于 2 个字段,但不适用于第 3 个字段 - 是什么破坏了验证检查 【发布时间】:2020-02-10 16:01:23 【问题描述】:我有一个我认为非常简单的检查。 注册表检查 3 个字段以确保它们尚未被占用 用户名 - 电子邮件和序列号
用户名和电子邮件工作完美,但当我尝试添加序列号检查时,它从不显示验证消息。
首先这里是来自 WORKING 用户名验证的代码:
<!--javascript for check username availability-->
<script>
function checkUsernameAvailability()
$("#loaderIcon").show();
jQuery.ajax(
url: "check_availability.php",
data:'username='+$("#username").val(),
type: "POST",
success:function(data)
$("#username-availability-status").html(data);
$("#loaderIcon").hide();
,
error:function ()
);
</script>
这是我为新的序列号检查插入的代码:
<!--Javascript for check serial availability-->
<script>
function checkSerialAvailability()
$("#loaderIcon").show();
jQuery.ajax(
url: "check_availability.php",
data:'serialNumber='+$("#serialNumber").val(),
type: "POST",
success:function(data)
$("#serialNumber-availability-status").html(data);
$("#loaderIcon").hide();
,
error:function ()
);
</script>
这里是 check_availability.php 代码:
// Code for checking email availabilty
if(!empty($_POST["email"]))
$email= $_POST["email"];
$sql ="SELECT UserEmail FROM userdata WHERE UserEmail=:email";
$query= $dbh -> prepare($sql);
$query-> bindParam(':email', $email, PDO::PARAM_STR);
$query-> execute();
$results = $query -> fetchAll(PDO::FETCH_OBJ);
if($query -> rowCount() > 0)
echo "<span style='color:red'>Email-id already exists.</span>";
else
echo "<span style='color:green'>Email-id available for Registration.</span>";
// Code for checking email availabilty
if(!empty($_POST["serialNumber"]))
$serial= $_POST["serialNumber"];
$sql ="SELECT serialNumber FROM userdata WHERE serialNumber=:userial";
$query= $dbh -> prepare($sql);
$query-> bindParam(':userial', $serial, PDO::PARAM_STR);
$query-> execute();
$results = $query -> fetchAll(PDO::FETCH_OBJ);
if($query -> rowCount() > 0)
echo "<span style='color:red'>Email-id already exists.</span>";
else
echo "<span style='color:green'>Email-id available for Registration.</span>";
用户名检查再次完美,但序列号却不行。 我在这方面已经有一段时间了,但我看不出我在哪里错过了一步?
请帮忙
Example of Form Validation
【问题讨论】:
【参考方案1】:您可以检查错误 回声$查询->错误; 或者您可以检查您的 SQL 短语是否正确。
// Code for checking email availabilty
if(!empty($_POST["serialNumber"]))
$serial= $_POST["serialNumber"];
echo "this is serail coming : " . $serial ;
$sql ="SELECT serialNumber FROM userdata WHERE serialNumber=:userial";
echo($sql);
$query= $dbh -> prepare($sql);
$query-> bindParam(':userial', $serial, PDO::PARAM_STR);
$query-> execute();
$results = $query -> fetchAll(PDO::FETCH_OBJ);
echo $query->error;
if($query -> rowCount() > 0)
echo "<span style='color:red'>Email-id already exists.</span>";
else
echo "<span style='color:green'>Email-id available for Registration.</span>";
【讨论】:
我尝试添加您发布的代码,但是在输入序列号时它没有返回任何值 在您的 Javascript 文件中,您可以检查 serialNumber 是否正常。 console.log( $("#serialNumber").val() ) ;【参考方案2】:<script>
function checkSerialAvailability()
$("#loaderIcon").show();
let serialNumber= $("#serialNumber").val();
var form_data =
serialNumber : serialNumber
;
jQuery.ajax(
url: "check_availability.php",
data:form_data,
type: "POST",
success:function(data)
$("#serialNumber-availability-status").html(data);
$("#loaderIcon").hide();
,
error:function ()
);
</script>
【讨论】:
以上是关于表单验证适用于 2 个字段,但不适用于第 3 个字段 - 是啥破坏了验证检查的主要内容,如果未能解决你的问题,请参考以下文章
适用于 Chrome 但不适用于 Safari - 一个隐藏的 DIV,仅在提交包含所有必填字段的表单时显示
为啥我的 jquery 表单验证不适用于 IE7?它适用于 FF、Opera、Safari 等