2014-01-03 6 views
0

OK Я пытаюсь реализовать ReCaptcha в простой форме, которая отправляется в БД. У этой формы есть несколько разных валидаций для проверки адреса, действительного в отношении API LiveAddress и его вычитания и т. Д.PHP ReCaptcha if else

Итак, я пытаюсь добавить ReCaptcha в elseif, как показано ниже, обе моей работы по проверке, но как только она попадет в ReCaptcha Я ввожу правильную или неправильную капчу, когда я нахожу ее, она просто переходит на пустую страницу. Без ошибок.

У меня есть правильные общедоступные и закрытые ключи на моей форме и включены для recaptchalib.php. Я могу опубликовать этот код, если вы считаете, что это будет полезно.

Я предполагаю, что мне нужно, чтобы это было, если еще не указано ниже, потому что, если у меня есть всего код для конвертации в форме, как в примере, который вы загружаете, он игнорирует капчу все вместе, он просто отправляется в БД успешно, даже если вы не поместите ничего в ввод captcha.

if(empty($errorMessage)) 
{ 
    // Dedupe the entry into the form 
    $dupesql = "SELECT * FROM fromData WHERE (address = '$primary_number' AND city = '$city_name' AND state = '$state_abbreviation' AND zip = '$zipcode_full')"; 
    $duperaw = $mysqli->query($dupesql); 

    // Check to make sure that they entered a valid address according to Liveaddress API 
    if(empty($primary_number)){ 
     $bad_address .= "$bad_add in $bad_city, $bad_state is not a valid address please try again\n"; 
    } 
    // Check to make sure that they have not already registered deduping on address, city, state, zip 
    elseif($duperaw->num_rows > 0) { 
     $dupe .= "$full_name already exists on $bad_add in $bad_city, $bad_state \n"; 
    } 

    elseif(isset($_POST["recaptcha_response_field"])) 
    { 
     $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); 

     if(!$resp->is_valid) { 
      echo "reCaptcha incorrect"; 
     } else { 
      echo "reCaptcha OK"; 
     } 
    } 

    // If all "elseif" fail then we insert them into our database 
    else { 
     $sql = "INSERT INTO fromData (name, email, address, city, state, zip, date, optin, proccessed) VALUES ('$full_name', '$email', '$primary_number', '$city_name', '$state_abbreviation', '$zipcode_full', '$date', '$optin', 'No')"; 
     $mysqli->query($sql); 
     echo $mysqli->error; 

     header("location: index.php?success=1"); 
     exit(); 
    } 
} 

Может ли кто-нибудь увидеть что-либо, что явно не соответствует моему коду выше? Я перемещаю код capcha, и он все еще не работает. Я предполагаю, что это шкаф, я должен заставить его работать так, как мне нужно.

ответ

1

То, как у вас есть это сейчас, последний блок кода else { ... } только запускается, если нет предыдущих ошибок (что хорошо), и если пользователь ничего не вводил для captha (что плохо).

Это потому, что если пользователь вводит anythnig для captcha, произойдет elseif(isset($_POST["recaptcha_response_field"])), и последние else { ... } не будут выполнены.

Код, который вы хотите выполнить, если расшифрованы правильно должно быть в филиале

else { 
    echo "reCaptcha OK";   
} 

, не в последнюю else который только запускается на выполнение, если переменная, которая держит пользователей ответ на капчу (я предположил, что вы держите что в $_POST["recaptcha_response_field"]) пуст. Итак:

elseif(isset($_POST["recaptcha_response_field"])) { 
    $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"],  $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); 
    if(!$resp->is_valid) { 
    echo "reCaptcha incorrect"; 
    } 
    else { 
    $sql = "INSERT INTO fromData (name, email, address, city, state, zip, date, optin, proccessed) VALUES ('$full_name', '$email', '$primary_number', '$city_name', '$state_abbreviation', '$zipcode_full', '$date', '$optin', 'No')"; 
    $mysqli->query($sql); 
    echo $mysqli->error; 
    header("location: index.php?success=1"); 
    exit(); 
    } 
} 
+0

Спасибо за ответ @daew! Я действительно пробовал это, прежде чем я разместил здесь. Имея почтовый код в другом блоке captcha. Я только что попробовал снова с вашим фрагментом кода, и я получаю то же самое, когда я нажимаю submit с помощью или без него, он просто переходит на пустую страницу. – Travis

+0

Можете ли вы разместить свой HTML-код? Если вы всегда получаете пустую страницу, независимо от того, возможно ли, что ваша ссылка в форме ('action =" ... "') неверна? Тест, перейдя по этой ссылке напрямую ... Классическим способом сделать это будет функция 'onsubmit =" ... "', которая проверяет все и возвращает '1', если форма действительна (включая капчу). – Daew

+0

Да, я думаю, что понял свою проблему. У меня была часть кода captcha на form.php include, а другая часть для обработки на index.php Как только я переместил форму обратно в index.php, она работает так, как ожидалось. Поэтому я собираюсь решить эту проблему и работать с другой частью, где она отображает форму или сообщение об ошибке, основанное на количестве представлений. Я думаю, что будет намного легче разобраться, а затем перекодировать код captcha в 2 разных файла. Я ценю вашу помощь в этом приветствии! – Travis