2016-07-04 20 views
0

私はPHPのcaptchaで簡単な連絡先フォームを作成しようとしています。しかし、captchaの実装は私のリーグ外です。簡単なphpのcaptcha連絡フォーム

私は最後に一歩近づいて私をプッシュ類似の問題を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>

今の問題は、私はいつも詳細が間違っているメッセージを取得することです。私は$ cが正しいかどうかを確認するためにrecaptchaをエコーし​​ようとしました。しかし何らかの理由で$ 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 
    } 
?> 
関連する問題