PHP表单嵌套在PHP表单中,CAPTCHA立即失败

时间:2013-07-01 22:44:16

标签: php validation captcha

我有一个带有简单搜索框和输入按钮的页面。当用户进行搜索时会发生两件事:

  1. 会打开一个新标签页,它会在Google上搜索他们输入的内容 in。

  2. 他们刚刚访问的页面(他们进行搜索的位置)刷新,并且有50%的机会触发SQL查询。

  3. 为了防止僵尸,我想在这个SQL查询上放置一个CAPTCHA。

    我目前遇到的问题是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 个答案:

答案 0 :(得分:1)

也许你不应该打电话 solvemedia_get_html("XI.WRU97NXJXuJWRfL0FajiudOutJyDC"); 2次。

在检查答案之前调用此方法。 我不知道solvemedia captcha(我使用的是google recaptcha中的那个),从未使用它,但可能会调用它两次,只是使你的上一次响应无效,因为你只是要求从同一个ip地址解决一个新媒体。 / p>