簡體   English   中英

在joomla 2.5中將recaptcha添加到php郵件表單

[英]add recaptcha to a php mail form in joomla 2.5

我試圖將ReCaptcha添加到我創建的用於共享內容的郵件表單中,但是由於某些原因,當我點擊“提交”時,驗證碼沒有得到驗證,這意味着即使您在驗證碼中輸入了錯誤的文本,表格仍會發送電子郵件。 我正在使用joomla 2.5.8,啟用了recaptcha插件(盡管我不認為這是初始化的,因為我自己添加了recaptchalib.php,並且在郵件表單代碼中包括了對publickey和privatekey的引用)。

任何幫助將不勝感激! 謝謝!! 這是代碼:

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

您的代碼有誤。 請看這筆

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

$resp->is_valid是PHP,但以JS執行。

  1. 正確的代碼是

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

    但由於2,它無論如何都無法工作。

  2. 您無法在Javascript驗證中檢查重新驗證碼。 應該在服務器端進行檢查。 或者,如果您要使用JavaScript進行檢查,則應使用對服務器的AJAX請求進行檢查。 那是因為你編碼

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

    在用戶加載驗證碼之前甚至在窗體加載時執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM