2016-07-04 4 views
0

Я пытаюсь создать простую форму контакта с captcha в php. Однако оказывается, что реализация captcha вне моей лиги.простой php captcha контактная форма

Я нашел простой ответ на аналогичную проблему stackoverflow opn, которая подтолкнула меня на 1 шаг ближе к концу, но снова я застрял.

Так что мне нужна контактная форма, которая проверяет только текст, и если на правильное ответное письмо отправлено письмо, письмо не является обязательным.

</br> 
 

 
<?php 
 
\t \t \t \t $a=rand(2,9); 
 
\t \t \t \t $b=rand(2,9); 
 
\t \t \t \t $c=$a+$b; 
 

 

 
\t if (isset($_POST['contact_text']) && isset($_POST['contact_email'])) { 
 
\t \t $contact_text = $_POST['contact_text']; 
 
\t \t $contact_email = $_POST['contact_email']; 
 
\t \t $recaptcha = $_POST['recaptcha']; 
 
\t \t 
 
\t \t $info = 'Pranešimas apie korupciją: '; 
 
\t \t $sender = 'Atsiuntė: '; 
 
\t \t \t 
 
\t \t if (!empty($contact_text) && ($recaptcha == $c)) { 
 
\t \t \t \t 
 
\t \t echo $recaptcha; 
 
\t \t 
 
\t \t $to = '[email protected]'; 
 
\t \t $subject = 'Korupcija'; 
 
\t \t $body = $sender."\n".$contact_email."\n".$info."\n".$contact_text; 
 
\t \t $headers = 'From: '.$contact_email; 
 
\t \t 
 
\t \t 
 
\t \t if (@mail($to,$subject, $body, $headers)) { 
 
\t \t \t echo 'Jūsų pranešimas sėkmingai išsiustas. '; 
 
\t \t \t 
 
\t \t } else { 
 
\t \t } echo 'Įvyko klaida, bandykite dar karta.'; 
 
\t \t \t 
 
\t \t } else { 
 
\t \t \t echo 'Neteisingai užpildyta forma.'; 
 
\t \t \t } \t 
 
\t } 
 
?> 
 
<form action="contact1.php" method="post"> 
 
\t Pranešimas apie korupciją:<br><textarea name="contact_text" rows="6" cols="30" maxlength="1000" ></textarea><br><br> <!-- --> 
 
\t Email (nebūtinas):<br><input type="text" name="contact_email" maxlength="30"> 
 
    <?php echo $a."+".$b."="?><input type="number" name="recaptcha" maxlength="2" style="width:40px" /> 
 
    <input type="submit" value="Siusti"> 
 
    <br>  
 
</form>

Теперь проблема заключается в том, что я всегда получаю сообщение, что детали неверны. Я попытался повторить recaptcha, чтобы проверить, правильно ли работает $ c, и это работает. Но по какой-то причине не удалось сравнить $ recaptcha с $ c или какой-то другой проблемой, я не уверен.

ответ

0

Значение $ c будет совершенно другим значением, если пользователь отправит форму контакта, если ваша проверка проверяет ее. Значение будет изменяться при каждом запросе, потому что сценарий будет повторно интерпретирован.

0

Вам нужно будет сохранить значение $ c на начальной загрузке страницы, чтобы впоследствии вы могли сравнить его в следующем запросе. Вы можете сделать это, сохранив его в $ _SESSION.

0

Вы можете написать эту

<?php 
    $min_number = 2; 
    $max_number = 9; 


    $random_number1 = mt_rand($min_number, $max_number); 
    $random_number2 = mt_rand($min_number, $max_number); 


    if (isset($_POST['contact_text']) && isset($_POST['contact_email'])) { 
     $contact_text = $_POST['contact_text']; 
     $contact_email = $_POST['contact_email']; 
     $recaptcha = $_POST['recaptcha']; 
     $firstNumber = $_POST["firstNumber"]; 
     $secondNumber = $_POST["secondNumber"]; 

     $checkTotal = $firstNumber + $secondNumber; 


     $info = 'Pranešimas apie korupciją: '; 
     $sender = 'Atsiuntė: '; 

     if (!empty($contact_text) && ($recaptcha != $checkTotal)) { 

     echo $recaptcha; 

     $to = '[email protected]'; 
     $subject = 'Korupcija'; 
     $body = $sender."\n".$contact_email."\n".$info."\n".$contact_text; 
     $headers = 'From: '.$contact_email; 


     if (@mail($to,$subject, $body, $headers)) { 
      echo 'Jūsų pranešimas sėkmingai išsiustas. '; 

     } else { 
     } echo 'Įvyko klaida, bandykite dar karta.'; 

     } else { 
      echo 'Neteisingai užpildyta forma.'; 
      } 
    } 
?> 
<form action="contact1.php" method="post"> 
    Pranešimas apie korupciją:<br><textarea name="contact_text" rows="6" cols="30" maxlength="1000" ></textarea><br><br> <!-- --> 
    Email (nebūtinas):<br><input type="text" name="contact_email" maxlength="30"> 
    <?php 
     echo $random_number1 . ' + ' . $random_number2 . ' = '; 
    ?> 
    <input type="number" name="recaptcha" maxlength="2" style="width:40px" /> 
    <input name="firstNumber" type="hidden" value="<?php echo $random_number1; ?>" /> 
    <input name="secondNumber" type="hidden" value="<?php echo $random_number2; ?>" /> 
    <input type="submit" value="Siusti"> 
    <br>  
</form> 

Это может решить вашу проблему

0

вы должны использовать сессии, чтобы решить вашу проблему, я сделал небольшие изменения в коде, он должен работать идеально.

<?php 
    @session_start(); 

    if (isset($_POST['contact_text']) && isset($_POST['contact_email'])) { 

     $contact_text = $_POST['contact_text']; 
     $contact_email = $_POST['contact_email']; 
     $recaptcha = $_POST['recaptcha']; 

     $info = 'Pranešimas apie korupciją: '; 
     $sender = 'Atsiuntė: '; 

     if (!empty($contact_text) && ($recaptcha == $_SESSION["captcha"])) { 

      echo $recaptcha; 

      $to = '[email protected]'; 
      $subject = 'Korupcija'; 
      $body = $sender."\n".$contact_email."\n".$info."\n".$contact_text; 
      $headers = 'From: '.$contact_email; 


      if (@mail($to,$subject, $body, $headers)) { 
       echo 'Jūsų pranešimas sėkmingai išsiustas. '; 

      } else { 

      } echo 'Įvyko klaida, bandykite dar karta.'; 

     }else{ 
      echo 'Neteisingai užpildyta forma.'; 
     } 
    }else{ 

     $a=rand(2,9); 
     $b=rand(2,9); 
     $c=$a+$b; 

     //setting captcha code in session 
     $_SESSION["captcha"] = $c; 

     ?> 
     <form action="contact1.php" method="post"> 
      Pranešimas apie korupciją:<br><textarea name="contact_text" rows="6" cols="30" maxlength="1000" ></textarea><br><br> <!-- --> 
      Email (nebūtinas):<br><input type="text" name="contact_email" maxlength="30"> 
      <?php echo $a."+".$b."="?><input type="number" name="recaptcha" maxlength="2" style="width:40px" /> 
      <input type="submit" value="Siusti"> 
      <br>  
     </form> 
<?php 
    } 
?>