2016-07-04 6 views
-2

안녕하세요 어리석은 질문 일지 모르지만 저는 PHP의 초보자이며 유효성 검사가 포함 된 전자 메일 양식을 만들고 버튼을 클릭하면 페이지를 다시로드하여 메일을 보냅니다. 모든 입력이 완료되지 않았고 버튼을 클릭 한 후에도 양식이 완료되지 않았다고 표시됩니다. 그런 일이 일어나지 않도록 아약스가 필요한가요? PHP : :PHP 전자 메일 양식 유효성 검사, 유효성 검사 작동하지 않음

<?php 
$nameErr = $emailErr = $messageErr = ""; 

$to = '[email protected]'; 
$subject = 'Email form test'; 

$name = $_POST['name']; 
$email = $_POST['email']; 
$message = $_POST['message']; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (isset($_POST["name"])) { 
     $nameErr = "* Please enter your name"; 
    } else { 
     $name = test_input($_POST["name"]); 
    } 

    if (isset($_POST["email"])) { 
     $emailErr = "* Please enter your email"; 
    } else { 
     $email = test_input($_POST["email"]); 
    } 

    if (isset($_POST['message'])) { 
     $messageErr = "* Please enter a message"; 
    } else { 
     $message = test_input($_POST["message"]); 
    } 

$message = <<<EMAIL 

$name 
$email 
$message 

EMAIL; 

$header = '$email'; 

if ($_POST['submit']){ 
mail($to , $subject , $message , $header); 
$feedback = 'Your email has been sent.'; 
} 
} 

?> 

HTML :

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
    <div class="name"> 
     <input type="text" name="name" id="name" value="" placeholder="Name" size="50"> 
     <span class="error"><?php echo $nameErr;?></span> 
    </div> 
<br> 
    <div class="email"> 
     <input type="text" name="email" id="email" value="" placeholder="E-Mail" size="50"> 
     <span class="error"><?php echo $emailErr;?></span> 
    </div> 
<br> 
    <div class="message"> 
     <textarea name="message" id="message" placeholder="Enter your message" rows="6"></textarea> 
     <span class="error"><?php echo $messageErr;?></span> 
    </div> 
<br> 
    <div class="submit"> 
     <input type="submit" name="submit" class="button special"> 
    </div> 
</form>  
<p id="feedback"><?php echo $feedback; ?></p> 

감사합니다 다음은 더 잘 이해 수있는 코드입니다.

+2

"양식이 어떤 상태인지에 관계없이 mail()을 부릅니다. 양식이 어떤 상태인지 * 상관없이 이메일을 보내는 이유는 무엇입니까?" 아니요, AJAX가 필요하지 않습니다. 메일을 보내지 않으려면 메일 보내기 기능을 호출하지 마십시오. – TessellatingHeckler

답변

0

isset 설명서를 참조하십시오. 변수가 설정되어 있고 NULL이 아닌지를 판별합니다.

if (!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)) { 
    $emailErr = "Invalid email format"; 
} 
1

난 당신의 코드를 약간 rewritting하고 나는 그것이 같은 작업을해야한다고 생각 :

//Pay attention to ! (negation) 
if (!isset($_POST["email"])) { 
    $emailErr = "* Please enter your email"; 
} 

당신이 사용할 수있는 이메일을 확인합니다.

<?php 

$errors = array(); 
$to = '[email protected]'; 
$subject = 'Email form test'; 

$requiredFields = array('name', 'email', 'message'); 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    foreach ($required as $field) { 
     if (!array_key_exists($field, $_POST)) { 
      $errors[$field] = '* '.$field.' cannot be empty'; 
     } else if (!test_input($_POST[$field])) { 
      $errors[$field] = '* '.$field.' does not meet the validation'; 
     } 
    } 

    $message = $name."\n".$email."\n".$message."\n"; 
    $header = '$email'; 
    if (isset($_POST['submit'])) { 
     mail($to , $subject , $message , $header); 
    } 
    $feedback = 'Your email has been sent.'; 
} 
?> 
관련 문제