2014-02-12 5 views
0

Используя сценарий ниже (взятый из шаблона), я добавил простой вопрос проверки для предотвращения спама (что такое 2 + 2?). На данный момент, когда кнопка отправки заполнена, появляется страница error.php, но форма представляется пустым.Поле проверки контактной формы PHP

Как обеспечить, чтобы форма была отправлена ​​только после проверки секретного вопроса?

<?php 

$EmailTo = "[email protected]"; 
$Subject = "website"; 
$name = Trim(stripslashes($_POST['name'])); 
$email = Trim(stripslashes($_POST['email'])); 
$number = Trim(stripslashes($_POST['number'])); 
$message = Trim(stripslashes($_POST['message'])); 

// validation 
$validationOK=true; 
if (!$validationOK) { 
    print "<meta http-equiv=\"refresh\" content=\"0;URL=error.php\">"; 
    exit; 
} 

// prepare email body text 
$Body = ""; 
$Body .= "Name: "; 
$Body .= $name; 
$Body .= "\n"; 
$Body .= "Tel: "; 
$Body .= $number; 
$Body .= "\n"; 
$Body .= "Email: "; 
$Body .= $email; 
$Body .= "\n"; 
$Body .= "Message: "; 
$Body .= $message; 
$Body .= "\n"; 

// send email 
$submit = mail($EmailTo, $Subject, $Body, "From: <$email>"); 

// redirect to success page 
if(isset($_POST['submit'])){ 
if(isset($_POST['answer']) && $_POST['answer'] == 4){ 
    print "<meta http-equiv=\"refresh\" content=\"0;URL=contactthanks.php\">"; 
}else{ 
    print "<meta http-equiv=\"refresh\" content=\"0;URL=error.php\">"; 
} 
} 
?> 

Форма кода следующим образом:

<div id="form-holder" class="cont"> 
         <h2>Contact form</h2> 
        <form method="post" action="send.php" class="uniform get-in-touch"> 

        <div class="i-h"> 
        <input type="text" name="name" id="name"/> 
        <div class="i-l"><span>Name</span></div></div> 

        <div class="i-h"> 
        <input type="email" name="email" id="email"/> 
        <div class="i-l"><span>E-mail</span></div></div> 

        <div class="i-h"> 
        <input type="text" name="number" id="number"/> 
        <div class="i-l"><span>Number</span></div></div> 

        <div class="t-h"> 
        <textarea name="message" rows="32" cols="8" id="message" placeholder="Please leave us a message."></textarea> 
        </div> 

        <br><p>What is 2+2?</p><input type="text" name="answer" id="answer" /> 

        <input type="submit" name="submit" value="Submit" class="submit-button"> 
          <a href="#" class="do-clear">Clear</a> 
       </form> 
        </div> 

ответ

0

Другой вариант делает это в чисто PHP:

if(!empty($_POST['answer']) && $_POST['answer'] == 4) { 
    // send email 
    $submit = mail($EmailTo, $Subject, $Body, "From: <$email>"); 
} else { 
    // Set error 
    echo "Verification failed."; 
} 
+0

Привет, спасибо за это - у меня было такое ощущение, что «ответ» часть должна контролироваться процесс «Submit». 0 (0) $ submit = mail ($ EmailTo, $ Subject, $ Body, "From", "Отправить" : <$email> "); \t print ""; } else { // Установка ошибки print ""; } ?> – Stanley

0

Если вы строите для HTML5, вы можете использовать атрибут required.

<br><p>What is 2+2?</p><input type="text" name="answer" id="answer" required/> 
Смежные вопросы