【问题标题】:PHP Validation form submitPHP验证表单提交
【发布时间】:2014-08-24 09:14:29
【问题描述】:

如何在表格完全填写之前停止向您发送电子邮件。目前,当点击提交时,即使存在已通过我已到位的 PHP 检查发现的验证错误:

代码:

  if (isset($_POST['submitButton'])) { 

    $fullName      = $_POST['fullName'];
    $myGender      = isset($_POST['myGender']) ? $_POST['myGender'] : ''; 
    $email         = $_POST['email'];
    $age           = $_POST['age'];
    $myDate        = isset($_POST['myDate']) ? $_POST['myDate'] : '';    
    $streetNum     = $_POST['streetNum'];
    $streetName    = $_POST['streetName'];
    $city          = $_POST['city'];
    $state         = $_POST['state'];   
    $postCode      = $_POST['postCode'];
    $movie         = $_POST['movie'];


    //You need to se the $var

    if (empty($fullName))
      {
        $errorfullName .= 'Please Enter Your Name';
      }

      if (!ctype_alpha(str_replace(array(" ", "-"), "",$fullName))) { 
            $errorfullName .= 'Your name should contain alpha characters only.';
      }

      if (strlen($fullName) < 3 OR strlen($fullName) > 40) {
            $errorfullName .= 'First name should be within 3-40 characters long.';
        } 
/*  Check Gender) */

  if ($myGender != 'male' && $myGender != 'female') {
            $errormyGender .= 'Please select your gender.';


        }

  /* Check Email   */

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     $erroremail .= 'Enter a valid email address.';
     }

/* Age */

if (intval($age) == '') {
        $errorage .= 'Please enter your current age';
        }
if (intval($age) < 3 OR intval($age) > 200){
        $errorage .= 'Age must be less than 200 years';
        }

if(intval($age) == "/^[0-9]$/" ){
          $errorage .= 'Must be numeric numbers';
          }

/*  check date using explode (breaks a string into an array.)if day is not 1-31, throw error*/

if(empty($myDate))
    {
        $errormyDate.= 'Please enter a current date';
    }

     $date_arr = explode ("-", $myDate);

     $dateSplit = array_slice($date_arr, 0,1);

     $dateYear = current($dateSplit);


    if($dateYear > date('Y'))
    {
        $errormyDate .= 'Sorry your not born in the future';
    }

/*  Check Address House Number if its not numeric, throw error */

if (intval($streetNum) == '') {
    $errorstreetNum .= 'Please add street Number';
    }
/* Street Name */   

     if (strlen($streetName) < 3 OR strlen($streetName) > 200) {
        $errorstreetName .= 'Street must be filled out and within 200 characters';
        }
 /*City Name */   

     if (strlen($city) < 3 OR strlen($city) > 200) {
        $errorcity .= 'City must be filled out and within 200 characters';
        }
 /*State Name */   

     if (strlen($state) < 3 OR strlen($state) > 200) {
        $errorstate .= 'State must be filled out and within 200 characters';
        }
/* Check postCode */

   if(intval($postCode) == "/^[0-9]$/" ){
      $errorpostCode .= 'Post Code must be numeric numbers';
      }
/* Check movie selection */

        if (trim($movie) === "select") {
            $errormovie .= 'Please select a favourite movie';
        }

if ($fullName, $myGender, $email, $age, $myDate, $streetNum, $streetName, $city, $state, $postCode, $movie, == " "){

            echo  '$errorsuccess .= 'Please complete all sections of the form'';
            }
            else {
            $success = "Thank you for submitting your form; We will be in contact soon";  
                    //send mail   
                    $to = "@yahoo.co.nz";  
                    $subject = "Php form data";  
                    $message = "<p>".$fullName."</p><p>".$myGender."</p><p>".$email."</p><p>".$age."</p><p>".$myDate."</p><p>".$streetNum."</p><p>".$streetName."</p><p>".$city."</p><p>".$state."</p><p>".$postCode."</p><p>".$movie."</p>";  
                    $from = "@yahoo.co.nz";  
                    mail($to,$subject,$message);  
                  }
}

【问题讨论】:

    标签: php forms validation


    【解决方案1】:

    原因是即使您在上面完成了多项验证,但后来都没有检查它们是否失败/通过,您唯一的健全性检查在这里:

    if ($fullName, $myGender, $email, $age, $myDate, $streetNum, $streetName, $city, $state, $postCode, $movie, == " "){
    

    顺便说一句,它的自身毫无用处。

    一个更简单的方法是首先创建一个数组来保存所有错误。

    $errors = array();
    

    然后,当您进行个人检查时,将它们设为密钥,例如:

    if (empty($fullName))
    {
        $errors['fullname'] .= 'Please Enter Your Name';
    }
    

    if (intval($age) == '') {
        $errors['age'] .= ' Please enter your current age.';
    }
    
    if (intval($age) < 3 OR intval($age) > 200){
        $errors['age'] .= ' Age must be less than 200 years.';
    }
    
    if(intval($age) == "/^[0-9]$/" ){
        $errors['age'] .= ' Must be numeric numbers.';
    }
    

    然后你可以这样做:

    if($errors){
        echo 'There are errors in the form. Please observe each of the errors and try again.'. PHP_EOL;
        foreach($errors as $idx => $error){
            echo ucfirst($idx). ': ' .$error;
        }
    }
    

    【讨论】:

      【解决方案2】:

      在代码开头将$err 之类的设置为false。检测到错误时将其设置为 true。 (即使它已经是真的;只是设置它比检查更容易。)

      然后,您可以将最终结果设置为$err

      【讨论】:

        【解决方案3】:

        看起来为了发送电子邮件,您只需要为每个输入字段(从 $fullName 到 $movie)设置一个值。

        您在哪里验证表单(例如,当您使用 if (empty($fullName))... 时,如果表单填写不正确产生的错误总是不同的。除非您有某种原因,否则我只会坚持使用$formerror 的通用错误变量。

        然后在代码的最后一部分,使用if($fullName...$movie == ''),您可以将其更改为if($fullName...$movie === '' AND !empty($formerror)),这样如果在验证表单期间发现任何错误,您就可以echo $formerror如果没有,电子邮件将发送。

        【讨论】:

          猜你喜欢
          • 2012-11-19
          • 2016-02-14
          • 2023-03-07
          • 2016-12-30
          • 1970-01-01
          • 2014-09-01
          • 2012-03-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多