2013-11-07 2 views
0

У меня есть кодRecaptcha предупреждение неправильно на той же странице

<form name="input" action="messagesave.php" method="POST"> 
    <table style="margin-left: auto; margin-right: auto;"> 
     <tr> 
      <td style="font-family:'Comic Sans MS', cursive; font-size:20px; text-shadow: 0 0 10px #FFFFFF;">Subject:</td> 
     </tr> 
     <tr> 
      <td><input type="text" value="(Optional)" name="sub" onblur="this.value=!this.value?'(Optional)':this.value;" onfocus="this.select()" onclick="this.value='';"></td> 
     </tr> 
     <tr> 
      <td style="font-family:'Comic Sans MS', cursive; font-size:20px; text-shadow: 0 0 10px #FFFFFF;">Message (Required):</td> 
     </tr> 
     <tr> 
      <td><textarea name="comment" id="comment" cols="60" rows="6"></textarea></td> 
     </tr> 
     <tr> 
      <td> 
      <?php 
       require_once('recaptchalib.php'); 
       $publickey = "6LeSzekSAAAAAL32gFlK_vGcqI3-kuoz990KSJHU"; // you got this from the signup page 
       echo recaptcha_get_html($publickey); 
      ?> 
      </td> 
     </tr> 
     <tr> 
      <td><input type="submit" class="submit" value="Submit Message"></td> 
     </tr> 
    </table> 
</form> 

на главной странице действие является

require_once('recaptchalib.php'); 

$privatekey = "6LeSzekSAAAAAAdAxcsVugyScb8B1D6UoKpjrX2W"; 
$resp = recaptcha_check_answer ($privatekey, 
          $_SERVER["REMOTE_ADDR"], 
          $_POST["recaptcha_challenge_field"], 
          $_POST["recaptcha_response_field"]); 

if (!$resp->is_valid) { 
    // What happens when the CAPTCHA was entered incorrectly 
    die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." . "(reCAPTCHA said: " . $resp->error . ")"); 
} 
else { 
    $comment = $_POST['comment']; 
    $to = "[email protected]"; 
    $subject = $_POST['sub']; 
    $message = $comment; 
    $from = "[email protected]"; 
    $headers = "From:" . $from; 
    mail($to,$subject,$message,$headers); 
    echo "Mail Sent."; 
    header('Location: success.html') ; 
} 

Когда пользователь НЕПРАВИЛЬНО входит ReCaptcha код страницы перемещается на пустую страницу говоря, что recaptcha не был введен правильно.

Я хочу спросить, как я могу реализовать предупреждение javascript или красный текст, который появляется на главной странице, чтобы пользователям не приходилось постоянно нажимать кнопку «Назад».

Благодаря

+0

спасибо david для редактирования, это ТАК ЖЕ, чтобы написать код здесь в stackoverflow – Friedpanseller

ответ

0

Вы должны отправить форму в том же PHP сам скрипт с параметром, который указывает, что форма была отправлена ​​(send в данном случае):

<form name="input" action="?send" method="POST"> 

В начале одного и того же PHP скрипт как форма в проверке, если форма отправляется и введенные данные верны:

<?php 

$errorArr = array(); 

if(isset($_GET['send'])) { 
    // form is sent, do your captcha and other checks here and save the errors in an array 
    if($captcha->wrong()) 
     $errorArr[] = 'You entered the captcha wrong'; 

    if(count($errorArr) <= 0) { 
     // No errors occured so do stuff with the correct input of the user 
     // save it to db for example 
    } 
} 

?> 

Где-то на вашей странице вы можете затем распечатать из сообщений об ошибках, как

<?php echo (count($errorArr) > 0)?implode('<br>', $errorArr):null; ?> 

Или вы можете делать все это с двух различных страниц и переменные сессии, но это имхо усложнять и ненужным.

Если вы используете Ajax для проверки своего кода, вам все равно нужно проверить его на сервере, когда форма отправлена, потому что кто-то может отключить javascript (так как большая часть спамбота не может интерпретировать javascript), и ваше исправление captcha не удается.

В вашем случае вы в конечном итоге с чем-то вроде

<?php 

require_once('recaptchalib.php'); 

$errorArr = array(); 
$privatekey = "6LeSzekSAAAAAAdAxcsVugyScb8B1D6UoKpjrX2W"; 
$resp = recaptcha_check_answer ($privatekey, 
          $_SERVER["REMOTE_ADDR"], 
          $_POST["recaptcha_challenge_field"], 
          $_POST["recaptcha_response_field"]); 

if (!$resp->is_valid) { 
    // What happens when the CAPTCHA was entered incorrectly 
    $errorArr[] = 'The reCAPTCHA wasn\'t entered correctly. Go back and try it again. (reCAPTCHA said: ' . $resp->error . ')'; 
} 

if(count($errorArr) <= 0) { 
    $comment = $_POST['comment']; 
    $to = "[email protected]"; 
    $subject = $_POST['sub']; 
    $message = $comment; 
    $from = "[email protected]"; 
    $headers = "From:" . $from; 

    if(mail($to,$subject,$message,$headers) === false) 
     $errorArr[] = 'Mail could not be sent to us due to a technical error'; 

    // if headers are sent after output already sent you get an error 
    //echo "Mail Sent."; 
    header('Location: success.html') ; 
} 

?> 
<form name="input" action="messagesave.php" method="POST"> 
    <?php echo (count($errorArr) > 0)?implode('<br>', $errorArr):null; ?> 
    <table style="margin-left: auto; margin-right: auto;"> 
     <tr> 
      <td style="font-family:'Comic Sans MS', cursive; font-size:20px; text-shadow: 0 0 10px #FFFFFF;">Subject:</td> 
     </tr> 
     <tr> 
      <td><input type="text" value="(Optional)" name="sub" onblur="this.value=!this.value?'(Optional)':this.value;" onfocus="this.select()" onclick="this.value='';"></td> 
     </tr> 
     <tr> 
      <td style="font-family:'Comic Sans MS', cursive; font-size:20px; text-shadow: 0 0 10px #FFFFFF;">Message (Required):</td> 
     </tr> 
     <tr> 
      <td><textarea name="comment" id="comment" cols="60" rows="6"></textarea></td> 
     </tr> 
     <tr> 
      <td> 
      <?php 
       require_once('recaptchalib.php'); 
       $publickey = "6LeSzekSAAAAAL32gFlK_vGcqI3-kuoz990KSJHU"; // you got this from the signup page 
       echo recaptcha_get_html($publickey); 
      ?> 
      </td> 
     </tr> 
     <tr> 
      <td><input type="submit" class="submit" value="Submit Message"></td> 
     </tr> 
    </table> 
</form> 
0

Он собирается другую страницу, потому что я думаю, вы отправляете форму. Что вы можете сделать, это изменить кнопку отправки на простую кнопку. Тогда

$("#button").click(function() { 
    //your ajax call to validating php 
//on success $("#formId").submit(); 
    }); 

В случае, если вы не хотите использовать JavaScript просто опубликовать форму, и вы можете перенаправить его на ту же страницу с вашей проверкой PHP с переменным набором.

header("Location:http://localhost/login.php?x=1") 

Проверка на

if(isset($_GET('x'))){ 
//your html for error message 
} 

Авось This POST может помочь

0

Объедините свою форму и ваше действие кода обработки в один скрипт, который сообщений к себе с общей формой бытия:

if ($POST['submit'] && $resp->is_valid) { 
    // Form sent and captcha ok 

} else { 
    // Check, was it submitted already? 
    if (isset($resp) && !$resp->is_valid) { 
     echo "<div><p>The reCAPTCHA wasn't entered correctly. Go back and try it again." . "(reCAPTCHA said: " . $resp->error . ")</p></div>"; 
    } 
    // All the form code here. 

} 
Смежные вопросы