表单验证适用于 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 等

基本身份验证用户名中的特殊字符不适用于 Chrome,但适用于 IE 和 Firefox

Spring MVC 表单验证不适用于嵌套的复杂类型

正则表达式验证不适用于 Google Chrome Android 应用程序,但适用于 Chrome 浏览器 - PC