2016-07-04 24 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でないかどうかを判断します。あなたが使用することができ、電子メールを検証するために

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

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

私は少しコードをrewrittingていると私はそれがこのように作業するべきだと思います。

<?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.'; 
} 
?> 
関連する問題