PHP验证表单提交

PHP验证表单提交,php,forms,validation,Php,Forms,Validation,如何在表格填写完成之前阻止向您发送电子邮件。当前,当单击提交时,即使存在通过我进行的PHP检查发现的验证错误: 代码: if (isset($_POST['submitButton'])) { $fullName = $_POST['fullName']; $myGender = isset($_POST['myGender']) ? $_POST['myGender'] : ''; $email = $_POST['emai

如何在表格填写完成之前阻止向您发送电子邮件。当前,当单击提交时,即使存在通过我进行的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);  
                  }
}
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'];
//您需要使用$var
if(空($fullName))
{
$errorfullName.='请输入您的姓名';
}
如果(!ctype_alpha(str_replace(数组(“,“-”,“,$fullName)){
$errorfullName.='您的名称应仅包含字母字符';
}
如果(strlen($fullName)<3或strlen($fullName)>40){
$errorfullName.=“名字长度应在3-40个字符以内。”;
} 
/*检查性别)*/
如果($myGender!=“男性”&&$myGender!=“女性”){
$errormyGender.='请选择您的性别';
}
/*查看电子邮件*/
如果(!filter_var($email,filter_VALIDATE_email)){
$erroremail.='输入有效的电子邮件地址';
}
/*年龄*/
如果(intval($age)=''){
$errorage.='请输入您当前的年龄';
}
如果(intval($age)<3或intval($age)>200){
$errorage.='年龄必须小于200岁';
}
如果(intval($age)=“/^[0-9]$/”){
$errorage.='必须是数字';
}
/*使用explode检查日期(将字符串拆分为数组)。如果day不是1-31,则抛出错误*/
如果(空($myDate))
{
$errormyDate.='请输入当前日期';
}
$date\u arr=分解(“-”,$myDate);
$dateSplit=array\u slice($date\u arr,0,1);
$dateYear=当前($dateSplit);
如果($dateYear>date('Y'))
{
$errormyDate.='对不起,你的孩子不是将来出生的';
}
/*检查地址号,如果不是数字,则抛出错误*/
如果(intval($streetNum)=''){
$errorstreetNum.='请添加街道编号';
}
/*街道名称*/
如果(strlen($streetName)<3或strlen($streetName)>200){
$errorstreetName.='必须填写街道,且不超过200个字符';
}
/*城市名称*/
如果(斯特伦($city)<3或斯特伦($city)>200){
$errorcity.='必须填写城市,且不超过200个字符';
}
/*州名*/
如果(strlen($state)<3或strlen($state)>200){
$errorstate.='状态必须填写且不超过200个字符';
}
/*检查邮政编码*/
如果(intval($postCode)=“/^[0-9]$/”){
$errorpostCode.='邮政编码必须是数字';
}
/*检查电影选择*/
如果(修剪($movie)=“选择”){
$errormovie.='请选择喜爱的电影';
}
如果($fullName、$myGender、$email、$age、$myDate、$streetNum、$streetName、$city、$state、$postCode、$movie、==“”){
echo“$errorsuccess.=”请填写表格“”的所有部分;
}
否则{
$success=“感谢您提交表格;我们将很快联系”;
//寄信
$to=“@yahoo.co.nz”;
$subject=“Php表单数据”;
$message=“”$fullName。”

“$myGender.”

“$email.”

“$age.”

“$myDate.”

“$streetNum.”

“$streetName.”

“$city.”

“$state.”

“$state.”

“$postCode; $from=“@yahoo.co.nz”; 邮件($to$subject$message); } }
在代码开头将类似于
$err
的内容设置为false。当检测到错误时,将其设置为true。(即使它已经为真;设置它比检查更容易。)


然后,您可以在
$err

上设置最终结果的条件。原因是,即使您在上述过程中完成了多个验证,但以后都不会检查它们是否失败/通过,您唯一的健全性检查是:

if ($fullName, $myGender, $email, $age, $myDate, $streetNum, $streetName, $city, $state, $postCode, $movie, == " "){
顺便说一句,它自己在一起是很没用的

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

$errors = array();
然后,当您进行单独检查时,将其作为密钥,例如:

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


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

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

然后在代码的最后一部分,使用
if($fullName…$movie=='')
,您可以将其更改为
if($fullName…$movie==''和!empty($formerror))
这样,如果在表单验证过程中发现任何错误,您将能够
回显$formerror
,如果没有,电子邮件将发送

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;
    }
}