2016-05-28 6 views
0

私は検証が必要な連絡先フォームを持っています。問題は、成功メッセージが表示されてから私が送信してしまうことです。明らかに、フォームが実際に検証をパスして送信されると、成功メッセージが表示されます。提出前に成功メッセージが表示される

<?php 
$error = ""; $successMessage = ""; 
$fname = $email = $message = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["name"])) { 
    $error .= "First name is required.<br>"; 
    } else { 
    $fname = test_input($_POST["name"]); 
    // check if name only contains letters and whitespace 
    if (!preg_match("/^[a-zA-Z ]*$/",$fname)) { 
     $error .= "Only letters and white space allowed.<br>"; 
    } 
    } 

    if (empty($_POST["email"])) { 
    $error .= "Email is required.<br>"; 
    } else { 
    $email = test_input($_POST["email"]); 
    // check if e-mail address is well-formed 
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     $error .= "Invalid email format.<br>"; 
    } 
    } 


    if (empty($_POST["content"])) { 
     $error .= "Message is required.<br>"; 
    } else { 
    $message = test_input($_POST["content"]); 
    } 

} 

if ($error != "") { 

      $error = '<div class="formerror" role="alert"><p><strong>There were error(s) in your form:</strong><br></p>' . $error . '</div>'; 
} else { 

    $successMessage = '<div class="alert alert-success" role="alert">Your message was sent, we\'ll get back to you ASAP!</div>'; 


      } 

function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 


?> 

形式は以下のようになります。あなたが成功メッセージを作成している条件で

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
    <div class="cform"> 
    <input type="text" class="contactfield cformbottom" id="name" placeholder="Your full name" name="name" value="<?php echo $fname;?>"> 

    <input type="email" class="contactfield cformbottom" id="email" name="email" placeholder="Your email" value="<?php echo $email;?>"> 


    <textarea class="contactfield" id="content" name="content" rows="3" placeholder="Your Message" value="<?php echo $message;?>"></textarea> 
      </div> 
    <input type="submit" class="newsbut" value="Submit"> 
</form><br> 
     <div id="error"><? echo $error.$successMessage; ?></div> 
+0

変数には、3項演算子または 'isset()'を使用します。 –

答えて

0

ルック。すでに$ error変数を ""に設定しています。さて、それが ""ならば成功メッセージを作成すると言っています。したがって、リクエストがPOSTかどうかに関係なく、成功メッセージが作成されます。 POSTリクエストかどうかをチェックするブロック内でその条件を移動します。

+0

愚かな私は、コードブロックの中に移動し、それは今のように動作します:)私はここに多くの質問をしていないし、ちょうどそこに私がこれについて尋ねたい何かがあることを認識していません。ここで質問したり、新しい質問を作成する必要はありますか? – Jonathan

0

あなたの検証のすべてが、この条件内でなければならない:変数(s)が存在する場合

if ($_SERVER["REQUEST_METHOD"] == "POST") { 

次に、HTMLで、あなたがチェックします。たとえば、

<?php echo isset($successMessage) ? $error . $successMessage : "" ?> 
関連する問題