2011-10-20 198 views
-4

可能重複:
How to validate an email address in PHP如何驗證電子郵件地址

我想知道有人可以幫我請。

我需要驗證下面的代碼的電子郵件地址,但有問題。

<?php 

if ($_POST) { 

    $expected = array('name', 'email', 'emailmessage'); 
    $validation = array(
     'name'   => 'Please provide your full name', 
     'email'   => 'Please provide your valid email address', 
     'emailmessage' => 'Please provide message' 
    ); 

    $errors = array(); 
    $output = array(); 

    foreach($expected as $key) { 

     $input = htmlspecialchars($_POST[$key]); 

     if (array_key_exists($key, $_POST)) { 
      if (empty($_POST[$key])) { 
       $errors[$key] = $validation[$key]; 
      } else { 
       $output[$key] = $_POST[$key]; 
      } 
     } else { 
      $errors[$key] = $validation[$key]; 
     } 

    } 

    if (!empty($errors)) { 
     $array = array('error' => true, 'fields' => $errors); 
    } else { 

     // PROCESS FORM 

    // --------------------------------------------------------- 
    // BEGIN EDITING 
    // --------------------------------------------------------- 

    $to = "[email protected]"; //This is the email address messages will be sent to 
    $web_name = "My Test Web Form"; //This is the name of your website that will show in your email inbox 

    //get IP address 
    $ip = $_SERVER['REMOTE_ADDR']; 

    //make time 
    $time = time(); 
    $date = date("r", $time); 

    // --------------------------------------------------------- 
    // END EDITING 
    // --------------------------------------------------------- 

    $emailmessage = trim($emailmessage); 
    $emailmessage = nl2br($emailmessage); 
    $emailmessage = htmlspecialchars($emailmessage); 
    $emailmessage = wordwrap($emailmessage, 70); 

    //Visible form elements 
    $name = $_POST['name']; //Sender's name 
    $email = $_POST['email']; //Sender's email 
    $emailmessage = htmlspecialchars($_POST['emailmessage']); //Sender's message 

    //Setting up email 
    $subject = "New Message from $web_name"; 

    $message = " 
       New message from $name <br/><br/> 

       Message:<br /> 
       $emailmessage 
       <br/> 

       <br/> 
       Email: $email<br /> 
       IP:</strong> <span style=\"color:#990000;\">$ip</span><br /> 
       Date:</strong> $date 

       "; 

    $header = 'MIME-Version: 1.0' . "\r\n"; 
    $header .= 'Content-type: text/html; charset=utf-8' . "\r\n"; 
    $header .= 'From:'. $email . " \r\n"; 

    $sent = mail($to, $subject, $message, $header); 

     //$message = '<div id=message>You have successfully subscribed to our newsletter</div>'; 
     $array = array('error' => false, 'message' => $message); 
    } 

    echo json_encode($array); 
} 

我希望電子郵件至$驗證數組中驗證我的消息通過這段時間裏,需要的電子郵件驗證這樣做。

我正在嘗試使用以下內容,但不知道將它放在哪裏或如何調用它。

if (filter_var($email, FILTER_VALIDATE_EMAIL)) { 

    // email is valid 

} else { 

    // email is invalid 

} 

任何幫助很apprecaited。

謝謝

+0

Multiple Duplicates:http://stackoverflow.com/search?q=%5Bphp%5D%20validate%20email%20address –

回答

1

你可以使用這樣的:

filter_var($email, FILTER_VALIDATE_EMAIL) or die("Email wrong."); 

右鍵您分配這個確切的變量之後:

$email = $_POST['email']; 

當然,這可能是結構更合理,以及更好的錯誤通知也是可能的。但聽起來好像你需要先用PHP進行更多的普通練習。

0

與您的代碼的怪胎:

$input = htmlspecialchars($_POST[$key]); 

    if (array_key_exists($key, $_POST)) { 

您使用的是鑰匙之前就已經(如果存在)檢查。同樣,$ input變量在你的代碼中不會再被使用,所以它是一個無用的行。

-1

可能是,這段代碼會幫助你。嘗試一下。

<?php 
if($_SERVER['REQUEST_METHOD']=='POST'){ 
    $name = $_POST['uname']; 
    $email = $_POST['email']; 

    $valid_arr = array(); 
    $error_arr = array(); 

     if($name == ''){ 
      $error_arr['name'] = 'Required'; 
     } 
     else if(!preg_match('/^[a-zA-A]+$/',$name)){ 
      $error_arr['name'] = 'Please put correct value'; 
     } 
     else{ 
      $valid_arr['name'] = $name; 
     } 

     if($email == ''){ 
       $error_arr['email'] = 'Required'; 
      } 
      else if(!preg_match('/^[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\.([a-zA-Z]{2,4})$/',$email)){ 
       $error_arr['email'] = 'Exm.- [email protected]'; 
      } 
      else{ 
       $valid_arr['email'] = $email; 
      } 

      if(count($error_arr) == 0){ 
       header('location: success.php'); 
      } 
      else{ 
       echo 'Error in Loading'; 
      } 
} 
?> 
<html> 
<head> 
</head> 
<body> 
<form action="<?php $_SERVER['PHP_SELF'];?>" method="POST"> 
    <table> 
    <tr> 
     <td><label>User Name :</label></td> 
     <td><input type="text" name="uname" value="<?php echo $valid_arr['name'];?>"/></td> 
     <td class="error"><?php echo $error_arr['name'];?></td> 
    </tr> 
    <tr> 
     <td><label>Email :</label></td> 
     <td><input type="text" name="email" value="<?php echo $valid_arr['email'];?>"/></td> 
     <td class="error"><?php echo $error_arr['email'];?></td> 
    </tr> 
    <tr> 
     <td><input type="submit" name="save" value="Submit"/></td> 
    </tr> 
    </table> 
</form> 
</body> 
</html>