使用 javascript 和 PHP 验证每个类元素,然后从下一步按钮中删除禁用的类

Posted

技术标签:

【中文标题】使用 javascript 和 PHP 验证每个类元素,然后从下一步按钮中删除禁用的类【英文标题】:Validation on each class element using javascript and PHP then remove disabled class from the next step button 【发布时间】:2019-12-06 13:02:38 【问题描述】:

我正在尝试对每个类元素进行验证。我正在使用具有相同名称属性的多个输入的表单。我想验证每个输入元素。

这是我的 HTML

 <input type="text" class="date_of_birth" name="date[]" onkeyup="dateOfBirth('stepbirth')" />
 <span class="stepbirthVal"></span>
 <input type="text" class="date_of_birth" name="date[]" onkeyup="dateOfBirth('stepbirth')" />
 <span class="stepbirthVal"></span>
 <a href="javascript:;" id="stepbirth" class="btn disabled" onclick="kindKompas('stepbirth')">Next Step</a>

我如何将值发送到我的 PHP 脚本

function dateOfBirth(inputid)

  var DoB = [];

    $(".date_of_birth").each(function()
        DoB.push($(this).val());
    );
  var newDob = DoB.slice(0,-1);
  var stepVar = newDob;

var xmlhttp;
if (window.XMLHttpRequest)
  // code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  
else
  // code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  
xmlhttp.onreadystatechange=function()
  
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    
  //GET JSON from Validation.php and extract the nodes
  var response = xmlhttp.responseText;
  var parseJson = JSON.parse(response);
  var resultCode = parseJson.code;
  var resultMessage = parseJson.message;

   //Show Validation Message
   var items = document.getElementsByClassName("stepbirthVal"),
   i, len;
   for (i = 0, len = items.length; i < len; i++) 
   items[i].innerhtml = resultMessage;
   

   //Style the button

     var element = document.getElementById(inputid);

     if(resultCode == 0)
     
        element.classList.add("disabled");
     

     if(resultCode == 1)
     
        element.classList.remove("disabled");
     

    
  
xmlhttp.open("GET","test.php?q="+stepVar+"&q2="+inputid";
xmlhttp.send();

当用户填写第一个输入时,它会得到验证并从按钮中删除禁用的类。我在网络中检查仅填写一个输入字段时我如何接收值

test.php?q=20/02/2000&amp;q2=stepbirth

这很好,我的 php 脚本期望这样的值。它得到验证并删除禁用的类。

但问题是当有多个输入数据时,我会收到这样的值

test.php?q=20/02/2000,03/05/2010&amp;q2=stepbirth

然后脚本停止验证,因此禁用的类不会删除。

这是我的 php 脚本。

//Get Parameters Passed From the JS Call to This Script
$fieldValue = $_GET["q"];
$fieldName = $_GET["q2"];

//Validate the DOB
if($fieldName == 'stepbirth')

    $birthDateLen = strlen($fieldValue);

    if($birthDateLen > 9)
    
        if (checkBirthDate($fieldValue))
        
            //

            //Get last 4 characters of the Date for the Year
            $year =  substr($fieldValue, -4);
            if($year > 1900)
            

                //Get Timestamp passed over
                $dt = DateTime::createFromFormat('d/m/Y', $fieldValue);
                $userDate = $dt->getTimestamp();

                //Get Date 1 Year from Today
                $yearTime = date(strtotime('+10000 year'));

                //If User's Date is Within 1 Year
                if($userDate < $yearTime)
                
                    echo '"code":1,"message":""';
                
                else
                
                    echo '"code":0,"message":"Fill date to 365 days from now.';       
                
            

        
        else
        
            echo '"code":0,"message":"Please fill valid date of birth."';
        
    

    else
    
        echo '"code":0,"message":""';
    


希望你们能理解我的问题。

提前致谢。

【问题讨论】:

【参考方案1】:

您应该遍历以逗号分隔的日期字符串列表,验证每一个。这是解决方案的模型:

<?php 

$fieldValue = "20/02/2000,03/05/2010";
$fieldName = "stepbirth";

//Validate the DOB
if ($fieldName == 'stepbirth')

    $birthDateLen = strlen($fieldValue);

    if ($birthDateLen > 9)
    
        foreach (explode(",", $fieldValue) as $dateString) 
            echo $dateString;
            //Get Timestamp passed over
            $dt = DateTime::createFromFormat('d/m/Y', $dateString);
            //$userDate = $dt->getTimestamp();

            //Get Date 1 Year from Today
            $yearTime = date(strtotime('+10000 year'));

            //Get last 4 characters of the Date for the Year
            $year =  substr($fieldValue, -4);

            if ($year <= 1900)
            
                echo '"code":0,"message":""';
            
            else if ($userDate < $yearTime)
            
                //If User's Date is Within 1 Year
                echo '"code":1,"message":""';
            
            else
            
                echo '"code":0,"message":"Fill date to 365 days from now.';       
            
        
    

【讨论】:

以上是关于使用 javascript 和 PHP 验证每个类元素,然后从下一步按钮中删除禁用的类的主要内容,如果未能解决你的问题,请参考以下文章

LNMP提示Nginx PHP “No input file specified”错误的解决办法

在rest api app中生成laravel请求验证的最佳实践

关于thinkphp5.0以上的版本使用PHP5.5版本以上”No input file specified“问题解决

运行PHP出现No input file specified错误的解决办法

关于thinkphp5.0以上的版本使用PHP5.5版本以上”No input file specified“问题解决

制作简单安全的php验证码类代码实例