2015-12-09 4 views
-1

У меня есть PHP-скрипт, где я хочу проверить действительный адрес электронной почты, используя filter_var(), но он не работает.php - FILTER _VALIDATE_EMAIL check

HTML форма:

<!DOCTYPE HTML> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<link rel="stylesheet" type="text/css" href="style.css"> 
<title>CRUD Operations</title> 
</head> 

<body> 
<div id="container"><!--container--> 
    <div id="wrapper"> 
     <div id="form-element"> 
      <div id="headings"> 
       <h1>PHP Contact Form</h1> 
      </div> 
      <form method="post" action="operations.php" enctype="multipart/form-data"> 
      <span>Name:</span><br> 
      <input type="text" name="name" value=""><br><br> 
      <span>Email:</span><br> 
      <input type="text" name="mail" value=""><br><br> 
      <span>Gender:</span><br> 
      &nbsp; <input type="radio" name="gender" value="Male">&nbsp;Male 
      &nbsp; <input type="radio" name="gender" value="Female">&nbsp;Female<br><br> 
       <span>Message</span><br> 
      <div id="message"> 
      <textarea cols="36" rows="4" name="message"></textarea><br> 
      </div> 
      <div id="submit"> 
      <input type="submit" value="Submit" name="submit"> 
      </div> 
      </form> 
     </div> 
    </div> 
</div><!--container--> 
</body> 
</html> 

PHP код:

<!DOCTYPE HTML> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<link rel="stylesheet" type="text/css" href="style.css"> 
<title>CRUD Operations</title> 
</head> 
<?php 
include_once('config.php'); 
$name = $mail = $gender = $message = ''; 
$email_err = ''; 

if(isset($_POST['submit'])){ 
    $name= $_POST['name']; 
    $mail = $_POST['mail']; 

    if(!isset($_POST['gender'])){ 
    } 
    else { 
     $gender = $_POST['gender']; 
    } 

    $message = $_POST['message']; 

    if(empty($name) || empty($mail) || empty($gender)|| empty($message)) { 
     if(empty($name)){ 
      echo'<div class="error">*Dear User fill the Name field properly</div>'; 
     } 

     if(empty($mail)){ 
      echo'<div class="error">*Dear User fill the Email field properly</div>'; 
     } 
     else { 
      if(!filter_var($mail, FILTER_VALIDATE_EMAIL)){ 
       $email_err = "*valid Email is required"; 
      } 
     } 

     if(empty($gender)){ 
      echo'<div class="error">*Dear User please select your gender</div>'; 
     } 

     if(empty($message)){ 
      echo'<div class="error">*Dear User please Leave your Message</div>'; 
     } 
    } 
    else { 
     $query = mysql_query("INSERT INTO users(`name`, `mail`, `gender`, `message`) VALUES('".$name."','".$mail."','".$gender."','".$message."')"); 

     if($query) { 
      echo '<div class="success">Congratulations You Are Registered Successfully</div>'; 
      echo '<a href="users.php">View Records</a>'; 
     } 
     else { 
      echo 'not'; 
     } 
    } 
} 
?> 
</html> 

Любая помощь будет оценен по достоинству!

+1

* «но это не работает ... PLZ исправить мою проблему» *, какова ваша проблема для начала? –

+1

«не работает», вы имеете в виду, что поле электронной почты принято, даже если это не письмо? –

+0

да @TareqMahmood. даже когда я даю значение для мусора в поле электронной почты, он принимает и регистрирует пользователя. Не показывает ошибку на недействительном адресе электронной почты. –

ответ

1

Вы устанавливаете ошибку проверки на переменную $email_err, но после этого вы ничего не делаете с этой переменной.

Но что еще более важно, звонок filter_var() никогда не будет удален. У вас есть это в блоке, который проверяет любой из $name$mail$gender пуст. Таким образом, единственный способ заставить ваш код выполнять проверку по электронной почте, будет, если кто-то ввел адрес электронной почты, но оставил пол пустым.

Вы должны переместить filter_var() вызов из этого блока:

if(empty($name) || empty($mail) || empty($gender)|| empty($message)) { 
    if(empty($name)){ 
     echo'<div class="error">*Dear User fill the Name field properly</div>'; 
    } 

    if(empty($mail)){ 
     echo'<div class="error">*Dear User fill the Email field properly</div>'; 
    } 

    if(empty($gender)){ 
     echo'<div class="error">*Dear User please select your gender</div>'; 
    } 

    if(empty($message)){ 
     echo'<div class="error">*Dear User please Leave your Message</div>'; 
    } 
} 
elseif(!filter_var($mail, FILTER_VALIDATE_EMAIL)){ 
    echo'<div class="error">*valid Email is required</div>'; 
} 
else { 
    $query = mysql_query("INSERT INTO users(`name`, `mail`, `gender`, `message`) VALUES('".$name."','".$mail."','".$gender."','".$message."')"); 

    if($query) { 
     echo '<div class="success">Congratulations You Are Registered Successfully</div>'; 
     echo '<a href="users.php">View Records</a>'; 
    } 
    else { 
     echo 'not'; 
    } 
} 
+0

Я следил за вашим решением. Но не работает –

+0

Я обновил свой ответ, чтобы указать на некоторые другие вопросы. – creanium

+0

Я действительно благодарен вам, уважаемое решение sir.your работает отлично. шляпы от вас –

0

Когда я пишу код проверки, такие как это я стараюсь избегать использования условных, которые проверяют так много вещей сразу. Вместо этого проверяйте каждый вход по очереди и прерывайте, если это недействительно; возвращая пользователю ошибку в этот момент. Затем вы можете перенести всю эту проверку на одну подпрограмму. В этой процедуре, если какие-либо проверки проверки не выполняются, она немедленно возвращается с ошибкой. Только если ваша подпрограмма сделает ее до конца, пользователь будет создан. И это мешает проверять переменную $mail, а затем проверять ее после, это уже передано вашей проверкой правды.