Реализация reCaptcha в проверенной форме javascript

У меня есть следующая форма, и я использую javascript для проверки полей формы onsubmit. Как мне добавить reCaptcha в эту форму? Придется ли мне изменить значение onsubmit, чтобы выполнить файл php с проверкой recaptcha и проверкой поля вместе? Вот текущая форма:

    <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


person cmccarra    schedule 22.03.2013    source источник


Ответы (2)


CAPTCHA должна быть проверена на стороне сервера, когда вы отправляете свои данные, чтобы она была вообще безопасной. Вы можете сохранить свою валидацию в Javascript, если вы знаете, что она вообще не применяется, и нет ничего, что могло бы помешать злоумышленнику отправить любой бессмысленный мусор на ваш серверный скрипт, который они хотят. Обычно рекомендуется проверять серверную сторону, когда это возможно, но это зависит от того, для кого вы выполняете проверку.

person cgimusic    schedule 23.03.2013
comment
Я проверяю клиентскую сторону формы с помощью javascript, чтобы пользователь, вводящий данные, не мог фактически отправить свои данные, пока они не будут правильно заполнены (обязательные поля, номер, местоположение выбрано), когда появится предупреждение (onsubmit="return validateForm()"). Затем я проверяю серверную часть reCaptcha с помощью php в отдельном файле, который вызывается через это (action="submit.php"). Это хорошая практика? Мои познания в php невелики. - person cmccarra; 25.03.2013

Гуппс! Прочтите этот 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, чтобы узнать, где заканчивается выполнение!

person internals-in    schedule 23.03.2013
comment
Спасибо за ссылку. Я реализовал код reCaptcha, но, похоже, у меня проблемы со ссылками на файлы, или, что более вероятно, просто плохой код с моей стороны! Я отредактировал исходный пост, добавив больше информации. - person cmccarra; 24.03.2013
comment
Ok! кажется, ваша страница отправляется правильно, просто возвращается: - POST submit.php 200 OK poultry.ie 0 B 46.22.129.107:80, посмотрите, я отредактировал ответ - person internals-in; 24.03.2013
comment
Я изменил действие на то, что вы предложили выше, но все еще без изменений. Также понял, что я должен был поместить данные моей базы данных и код для вставки данных пользователей в базу данных в месте, где написано // Ваш код здесь для обработки успешной проверки. Тем не менее, после того, как я это сделал, никаких изменений не произошло. - person cmccarra; 25.03.2013
comment
<?php if (!defined('APPLICATION')) exit(); ?> имеет отношение к Vanilla, программному обеспечению, на котором работает сайт. Я использую плагин для создания страницы создателя надстроек, возможно, это вызывает проблему ? - person cmccarra; 25.03.2013
comment
Я думаю, что в некоторых точках лучше выводить логи, особенно перед exit ();, (! $ resp- ›is_valid), .... и проверять, где фактически останавливается выполнение - person internals-in; 25.03.2013