2011-10-20 4 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 

} 

何か助力が大いにありがたいです。もちろん

$email = $_POST['email']; 

これは、より賢明な構造化することができ、そしてA:あなたはこの正確な変数を割り当てた直後

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

は、あなたがこのようにそれを使用することができ、あなたに

+0

複数の重複:http://stackoverflow.com/search?q=%5Bphp%5D%20validate%20email%20address –

答えて

1

ありがとうございましたより良いエラー通知も可能です。しかし、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> 
関連する問題