2016-07-04 59 views
0

我想在验证码验证码中创建简单的联系表单。但事实证明,实现验证码不在我的联盟中。简单的PHP验证码联系表格

我在stackoverflow上发现了一个简单的答案类似的问题,推动我离结尾更近了一步,但是我又陷入了困境。

所以我需要一个联系表格,只检查是否输入文本,如果正确的captcha被回答,电子邮件是不是强制性的。

</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 
    } 
?>