1

コンテンツ共有用に作成したメールフォームに ReCaptcha を追加しようとしているのですが、なぜか「送信」を押してもキャプチャが検証されず、キャプチャに間違ったテキストを入力しても、フォームは引き続きメールを送信します。私はjoomla 2.5.8を使用しています.recaptchaプラグインが有効になっています.

どんな助けでも大歓迎です!ありがとうございました!!コードは次のとおりです。

<?php require_once('recaptchalib.php'); ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script language="javascript" type="text/javascript">

              function validateEmail($email)
   {
        var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
        if( !emailReg.test( $email ) )
        {
           return false;
        }
        else
      {
           return true;
        }
   }

   function validateForm()
   {
      var form = document.mailForm;
      if (form.recipient.value == "" || validateEmail(form.recipient.value)==false)
      {
         alert("bad email");
         return false;
      }
      if (form.subject.value == "")
      {
         alert("please enter subject");
         return false;
      }
      if (form.content.value == "")
      {
         alert("please enter massage");
         return false;
      }
      <?php 
      $privatekey = "privatekey";  
      $resp = recaptcha_check_answer($privatekey,$_SERVER["REMOTE_ADDR"],$_POST["recaptcha_challenge_field"],$_POST["recaptcha_response_field"]);   ?>                 
      if (!$resp->is_valid) 
      {    
      alert("try again");
         return false;
       }
      return true;
   }      
</script>
<?php 
   if($this->success=='1')
   {   
      echo JText::_('MAIL_SEND_SUCCESSFULLY');
   }   
   elseif($this->success=='0')
   {
      echo JText::_('MAIL_SEND_FAILED');
   }   
?>
<div id="SendMail">
   <h2>send mail</h2>   
   <form action="index.php" name="mailForm" method="post" onsubmit="return validateForm()">

   <table>
      <tr>
         <td><label><?php echo JText::_('MAIL_SEND_TO'); ?>:</label></td>
         <td><input type="text" name="recipient" size="25" value=""/></td>
      </tr>
      <tr>
         <td><label><?php echo JText::_('MAIL_SUBJECT'); ?>:</label></td>
         <td><input type="text" name="subject" size="25" value=""/></td>
      </tr>
      <tr>
         <td><label><?php echo JText::_('MAIL_MESSAGE'); ?>:</label></td>
         <td>
            <textarea name="content" rows="10" cols="40"></textarea>
            <br/><?php echo JText::_('MAIL_DESC'); ?>
         </td>
            <tr>
            <td><?php $publickey = "public key"; ?></td>
            <td><?php echo recaptcha_get_html($publickey);?></td>
            </tr>
   </table>      
   <p>
      <input type="hidden" name="controller" value="mail" />
      <input type="hidden" name="task" value="sendMail" />   
      <div class="button-mail">
         <input style="width: 50px;height: 25px;" type="submit" name="submit" value="<?php echo JText::_('SEND'); ?>"/>
         <a href="javascript: void window.close()" title="Close Window"><span style="color: #444;
   border: #D5D5D5 1px solid; padding: 4px; width: 50px;height: 25px;"><?php echo JText::_('CLOSE'); ?></span></a>
      </div>
   </p>
   </form>
</div>
4

1 に答える 1

0

コードにエラーがあります。このラインを見てください

if (!$resp->is_valid) 
{    
    alert("try again");
    return false;
}

$resp->is_validPHPはどこにありますが、JSとして実行されます。

  1. 正しいコードは

    if (!<php (int)$resp->is_valid;?>) 
    {    
        alert("try again");
        return false;
    }
    

    しかし、2の理由でとにかくうまくいきません。

  2. Javascript 検証で recaptcha コードを確認することはできません。サーバー側で確認する必要があります。または、javascript で確認したい場合は、サーバーへの AJAX リクエストで確認する必要があります。それはあなたがコーディングしているからです

    <?php 
    $privatekey = "privatekey";  
    $resp = recaptcha_check_answer($privatekey,$_SERVER["REMOTE_ADDR"],$_POST["recaptcha_challenge_field"],$_POST["recaptcha_response_field"]);   ?>                 
    

    ユーザーがキャプチャを入力する前に、フォームの読み込み時に実行されます。

于 2013-02-03T12:48:40.607 に答える