0

次のフォームがあり、javascript を使用してフォーム フィールドonsubmitを検証しています。このフォームにreCaptchaを実装するにはどうすればよいですか? recaptcha 検証とフィールド検証を一緒に使用して php ファイルを実行するには、 onsubmit値を変更する必要がありますか? 現在のフォームは次のとおりです。

    <form id="breeders" method="post" action="add-breeder?process" onsubmit="return validateForm()">
    Name:<br />
    <input type="text" id="name" name="name" /><br /><br />
    County:<br />
    <select id="address" name="address">
  <option value="Antrim">Antrim</option>
<option value="Armagh">Armagh</option>
</select><br/>
    <br />Please select a point on the map nearest to you.<br />
    <input type="hidden" id="lat" name="lat" /><br />
    <input type="hidden" id="lng" name="lng" />
    Phone No:<br />
    <input type="text" id="phone" name="phone" /><br /><br />
    Description:<br />
    <textarea cols="40" rows="5" name="breeds" id="breeds" /></textarea><br /><br />

    <input type="submit" value="Add Breeder" class="btn btn-primary btn-large" />
    </form>

   </div>


<script type="text/javascript">
       function validateForm()
    {
    var x=document.forms["breeders"]["name"].value;
    if (x==null || x=="")
      {
      alert("Name is required.");
      return false;
      }

      var x=document.forms["breeders"]["address"].value;
    if (x==null || x=="")
      {
      alert("Location is required.");
      return false;
      }

       var x=document.forms["breeders"]["phone"].value;
    if (x==null || x=="")
      {
      alert("Contact phone number is required.");
      return false;
      } 

        var x=document.forms["breeders"]["breeds"].value;
    if (x==null || x=="")
      {
      alert("A description of Breeds is required.");
      return false;
      }  

        var x=document.forms["breeders"]["lat"].value;
    if (x==null || x=="")
      {
      alert("You have to select a location on the map.");
      return false;
      }

         var x=document.forms["breeders"]["lng"].value;
    if (x==null || x=="")
      {
      alert("You have to select a location on the map.");
      return false;
      }
    }
    </script>

どんな助けでも大歓迎です、乾杯!

編集:

フォームに reCaptcha を実装しましたが、送信をクリックしてもアクションが実行されていないようです。ファイル「submit.php」は同じルートにあります。reCaptcha を使用したフォーム コードは次のとおりです。

        <form id="breeders" method="post" action="submit.php" onsubmit="return validateForm()">
    Name:<br />
    <input type="text" id="name" name="name" /><br /><br />
    County:<br />
    <select id="address" name="address">
  <option value="Antrim">Antrim</option>
<option value="Armagh">Armagh</option>
</select><br/>
    <br />Please select a point on the map nearest to you.<br />
    <input type="hidden" id="lat" name="lat" /><br />
    <input type="hidden" id="lng" name="lng" />
    Phone No:<br />
    <input type="text" id="phone" name="phone" /><br /><br />
    Description:<br />
    <textarea cols="40" rows="5" name="breeds" id="breeds" /></textarea><br /><br /><br /><br /><br />

<script type="text/javascript"
   src="https://www.google.com/recaptcha/api/challenge?k=MY_PUBLIC_KEY">
 </script>
 <noscript>
   <iframe src="https://www.google.com/recaptcha/api/noscript?k=MY_PUBLIC_KEY"
       height="300" width="500" frameborder="0"></iframe><br>
 </noscript>

    <br/><input type="submit" value="Add Breeder" class="btn btn-primary btn-large" />
    </form>

   </div>

「submit.php」ファイルの内容は次のとおりです。

<?php if (!defined('APPLICATION')) exit(); ?>

<?php
 require_once('recaptchalib.php');
 $privatekey = "MY_PRIVATE_KEY";
 $resp = recaptcha_check_answer ($privatekey,
                                 $_SERVER["REMOTE_ADDR"],
                                 $_POST["recaptcha_challenge_field"],
                                 $_POST["recaptcha_response_field"]);
 if (!$resp->is_valid) {
   // What happens when the CAPTCHA was entered incorrectly
   die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
        "(reCAPTCHA said: " . $resp->error . ")");
 } else {
   // Your code here to handle a successful verification
 }
 ?>

  <?php
//connection to my database details etc.
?>


  <?php
if(isset($_GET['process']))
{
$query = "Insert INTO `markers` (name, address, lat, lng, phone, breeds) values('$_POST[name]', '$_POST[address]','$_POST[lat]','$_POST[lng]', '$_POST[phone]', '$_POST[breeds]')";
//echo $query; exit;
$result = mysql_query($query) or die(mysql_error());
if(!$result)
{
$msg = "not Inserted";
}
else
{
$msg = "Inserted";
header("location:breeders?m=".$msg);
}
}

?>

「recaptchalib.php も同じフォルダーにあります。ここでフォームを確認できます: http://poultry.ie/add-breeder

4

2 に答える 2

0

CAPTCHA は、データを送信するときにサーバー側で検証する必要があります。検証がまったく強制されておらず、悪意のあるユーザーが無意味なごみをサーバー側スクリプトに送信するのを止めるものがないことを認識している限り、検証を Javascript で保持できます。可能な場合はサーバー側を検証することをお勧めしますが、検証を行うのは誰の利益になるかによって異なります。

于 2013-03-23T01:16:43.350 に答える
0

グープ!このhttp://code.google.com/p/recaptcha/wiki/HowToSetUpRecaptcha
をお読みください。主にパート 2: インストールで選択してください。

あなたのエラーに向かって

action="submit.php?process=1"
が 変わっ たdefined('APPLICATION')

アップデート:

Insert INTO `markers`  to Insert INTO markers 
(in the Above Note: "`" )

Echoing を試して、実行が停止する場所を確認してください。

于 2013-03-23T01:38:52.427 に答える