Форма PHP Вложенная в форму PHP, CAPTCHA мгновенно завершается ошибкой
У меня есть страница с простым окном поиска и кнопкой ввода. Когда пользователь выполняет поиск, происходит 2 вещи:
Открывается новая вкладка, и она ищет в Google все, что они набрали.
Страница, на которой они только что (где они выполняли поиск), обновляется и имеет 50% шанс инициировать запрос SQL.
Чтобы предотвратить загрузку, я хочу поместить CAPTCHA в этот запрос SQL.
Проблема, с которой я сейчас сталкиваюсь, заключается в том, что CAPTCHA мгновенно выходит из строя. Я предполагаю, что это потому, что первая форма сработала. Это отбрасывает назад "неправильное решение", и это заставляет меня верить в это.
Вот текущая структура.
<form id="search" method="post" action="" target="" onsubmit="refresh(this);">
<input type="text" name="q" size="31" maxlength="255" value="" />
<input style="color: #cc423f; font-weight:bold; padding: 7px 15px;" name="search" type="submit" value="Search" />
</form>
<script type="text/javascript">
function refresh(a){
// location.reload(true);
window.open("http://www.google.com/search?q="+a.q.value);
}
</script>
<?php
if(isset($_POST['q'])){
if (mt_rand(0, 1) === 0) { // 50% chance of this event happening
// BEGIN SolveMedia CAPTCHA form
echo "<form id=\"solve4points\" method=\"post\" action=\"\" target=\"\" onsubmit=\"refresh(this);\">"; ?>
<?php echo solvemedia_get_html("XI.WRU97NXJXuJWRfL0FajiudOutJyDC"); //this displays SolveMedia CAPTCHA widget
echo "<br /><input style=\"color: #cc423f; font-weight:bold; padding: 7px 15px;\" type=\"submit\" name=\"solve4points\" value=\"Get Points!\" />
</form>";
} // end SolveMedia CAPTCHA form
else { // 50% chance of this event happening
echo "<br /><p>Nope, not today!</p>";
}
}
if(isset($_POST['solve4points'])){
echo solvemedia_get_html("XI.WRU97NXJXuJWRfL0FajiudOutJyDC");
require_once("/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/solvemedia/solvemedia.php");
$privkey="xxxxxxxxxxxxxxxxxxxxxx"; // API keys for CAPTCHA
$hashkey="xxxxxxxxxxxxxxxxxxxxxx";// API keys for CAPTCHA
$solvemedia_response = solvemedia_check_answer($privkey, $_SERVER["REMOTE_ADDR"], $_POST["adcopy_challenge"], $_POST["adcopy_response"], $hashkey);
if (!$solvemedia_response->is_valid) { //if user fails to complete CAPTCHA correctly, do this
print "Error: ".$solvemedia_response->error;
}
else {//if user completed CAPTCHA correctly, do this
mysql_query......
}
}
?>
По соображениям безопасности я удалил информацию о подключении к базе данных и ключе API, но я знаю, что все правильно.
1 ответ
Может не стоит звонитьsolvemedia_get_html("XI.WRU97NXJXuJWRfL0FajiudOutJyDC");
2 раза.
Вы вызываете этот метод непосредственно перед проверкой ответа. Я не знаю Captcha SolutionMedia (я использовал один из Google Recaptcha), никогда не использовал его, но, возможно, вызывая его дважды, просто сделать недействительным ваш последний ответ, потому что вы только что попросили новый медиа для решения с того же IP-адреса.