SitePoint Sponsor

User Tag List

Results 1 to 6 of 6
  1. #1
    SitePoint Member
    Join Date
    Aug 2011
    Posts
    21
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    reCaptcha display problem

    Any thoughts on why my recaptcha might look like this:

    Picture 3.png

    Currently, it is nested inside of a <div> that pushes it a few hundred pixels to the right. Otherwise, if it is unformatted in my css, it looks normal.

    thanks for any insight.

  2. #2
    Barefoot on the Moon! silver trophy
    Force Flow's Avatar
    Join Date
    Jul 2003
    Location
    Northeastern USA
    Posts
    4,516
    Mentioned
    51 Post(s)
    Tagged
    1 Thread(s)
    Go ahead and post your HTML & CSS code. The issue is in there somewhere, most likely. It's hard to troubleshoot without seeing it.
    Visit The Blog | Follow On Twitter
    301tool 1.1.5 - URL redirector & shortener (PHP/MySQL)
    Can be hosted on and utilize your own domain

  3. #3
    SitePoint Member
    Join Date
    Mar 2011
    Posts
    2
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I think you can click on the side button of the refresh button.Thank you for sharing this with us.

  4. #4
    SitePoint Member
    Join Date
    Aug 2011
    Posts
    21
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Thanks a lot for the responses. Markmatt: Thanks, but the refresh button on the recaptcha doesn't correct this issue. Force Flow: I appreciate your support and have printed the relevant code below.

    My recaptcha code is structured as an included 'require_once' in php. After which i
    PHP Code:
    echo recaptcha_get_html($publickey); 
    to display the captcha. The included file is:

    PHP Code:
    define("RECAPTCHA_API_SERVER""http://www.google.com/recaptcha/api");
    define("RECAPTCHA_API_SECURE_SERVER""https://www.google.com/recaptcha/api");
    define("RECAPTCHA_VERIFY_SERVER""www.google.com");

    /**
     * Encodes the given data into a query string format
     * @param $data - array of string elements to be encoded
     * @return string - encoded request
     */
    function _recaptcha_qsencode ($data) {
            
    $req "";
            foreach ( 
    $data as $key => $value )
                    
    $req .= $key '=' urlencodestripslashes($value) ) . '&';

            
    // Cut the last '&'
            
    $req=substr($req,0,strlen($req)-1);
            return 
    $req;
    }



    /**
     * Submits an HTTP POST to a reCAPTCHA server
     * @param string $host
     * @param string $path
     * @param array $data
     * @param int port
     * @return array response
     */
    function _recaptcha_http_post($host$path$data$port 80) {

            
    $req _recaptcha_qsencode ($data);

            
    $http_request  "POST $path HTTP/1.0\r\n";
            
    $http_request .= "Host: $host\r\n";
            
    $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
            
    $http_request .= "Content-Length: " strlen($req) . "\r\n";
            
    $http_request .= "User-Agent: reCAPTCHA/PHP\r\n";
            
    $http_request .= "\r\n";
            
    $http_request .= $req;

            
    $response '';
            if( 
    false == ( $fs = @fsockopen($host$port$errno$errstr10) ) ) {
                    die (
    'Could not open socket');
            }

            
    fwrite($fs$http_request);

            while ( !
    feof($fs) )
                    
    $response .= fgets($fs1160); // One TCP-IP packet
            
    fclose($fs);
            
    $response explode("\r\n\r\n"$response2);

            return 
    $response;
    }



    /**
     * Gets the challenge HTML (javascript and non-javascript version).
     * This is called from the browser, and the resulting reCAPTCHA HTML widget
     * is embedded within the HTML form it was called from.
     * @param string $pubkey A public key for reCAPTCHA
     * @param string $error The error given by reCAPTCHA (optional, default is null)
     * @param boolean $use_ssl Should the request be made over ssl? (optional, default is false)

     * @return string - The HTML to be embedded in the user's form.
     */
    function recaptcha_get_html ($pubkey$error null$use_ssl true)
    {
        if (
    $pubkey == null || $pubkey == '') {
            die (
    "To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>");
        }
        
        if (
    $use_ssl) {
                    
    $server RECAPTCHA_API_SECURE_SERVER;
            } else {
                    
    $server RECAPTCHA_API_SERVER;
            }

            
    $errorpart "";
            if (
    $error) {
               
    $errorpart "&amp;error=" $error;
            }
            return 
    '<script type="text/javascript" src="'$server '/challenge?k=' $pubkey $errorpart '"></script>

        <noscript>
              <iframe src="'
    $server '/noscript?k=' $pubkey $errorpart '" height="300" width="500" frameborder="0"></iframe><br/>
              <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
              <input type="hidden" name="recaptcha_response_field" value="manual_challenge"/>
        </noscript>'
    ;
    }




    /**
     * A ReCaptchaResponse is returned from recaptcha_check_answer()
     */
    class ReCaptchaResponse {
            var 
    $is_valid;
            var 
    $error;
    }


    /**
      * Calls an HTTP POST function to verify if the user's guess was correct
      * @param string $privkey
      * @param string $remoteip
      * @param string $challenge
      * @param string $response
      * @param array $extra_params an array of extra variables to post to the server
      * @return ReCaptchaResponse
      */
    function recaptcha_check_answer ($privkey$remoteip$challenge$response$extra_params = array())
    {
        if (
    $privkey == null || $privkey == '') {
            die (
    "To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>");
        }

        if (
    $remoteip == null || $remoteip == '') {
            die (
    "For security reasons, you must pass the remote ip to reCAPTCHA");
        }

        
        
            
    //discard spam submissions
            
    if ($challenge == null || strlen($challenge) == || $response == null || strlen($response) == 0) {
                    
    $recaptcha_response = new ReCaptchaResponse();
                    
    $recaptcha_response->is_valid false;
                    
    $recaptcha_response->error 'incorrect-captcha-sol';
                    return 
    $recaptcha_response;
            }

            
    $response _recaptcha_http_post (RECAPTCHA_VERIFY_SERVER"/recaptcha/api/verify",
                                              array (
                                                     
    'privatekey' => $privkey,
                                                     
    'remoteip' => $remoteip,
                                                     
    'challenge' => $challenge,
                                                     
    'response' => $response
                                                     
    ) + $extra_params
                                              
    );

            
    $answers explode ("\n"$response [1]);
            
    $recaptcha_response = new ReCaptchaResponse();

            if (
    trim ($answers [0]) == 'true') {
                    
    $recaptcha_response->is_valid true;
            }
            else {
                    
    $recaptcha_response->is_valid false;
                    
    $recaptcha_response->error $answers [1];
            }
            return 
    $recaptcha_response;

    }

    /**
     * gets a URL where the user can sign up for reCAPTCHA. If your application
     * has a configuration page where you enter a key, you should provide a link
     * using this function.
     * @param string $domain The domain where the page is hosted
     * @param string $appname The name of your application
     */
    function recaptcha_get_signup_url ($domain null$appname null) {
        return 
    "https://www.google.com/recaptcha/admin/create?" .  _recaptcha_qsencode (array ('domains' => $domain'app' => $appname));
    }

    function 
    _recaptcha_aes_pad($val) {
        
    $block_size 16;
        
    $numpad $block_size - (strlen ($val) % $block_size);
        return 
    str_pad($valstrlen ($val) + $numpadchr($numpad));
    }

    /* Mailhide related code */

    function _recaptcha_aes_encrypt($val,$ky) {
        if (! 
    function_exists ("mcrypt_encrypt")) {
            die (
    "To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed.");
        }
        
    $mode=MCRYPT_MODE_CBC;   
        
    $enc=MCRYPT_RIJNDAEL_128;
        
    $val=_recaptcha_aes_pad($val);
        return 
    mcrypt_encrypt($enc$ky$val$mode"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
    }


    function 
    _recaptcha_mailhide_urlbase64 ($x) {
        return 
    strtr(base64_encode ($x), '+/''-_');
    }

    /* gets the reCAPTCHA Mailhide url for a given email, public key and private key */
    function recaptcha_mailhide_url($pubkey$privkey$email) {
        if (
    $pubkey == '' || $pubkey == null || $privkey == "" || $privkey == null) {
            die (
    "To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " .
                 
    "you can do so at <a href='http://www.google.com/recaptcha/mailhide/apikey'>http://www.google.com/recaptcha/mailhide/apikey</a>");
        }
        

        
    $ky pack('H*'$privkey);
        
    $cryptmail _recaptcha_aes_encrypt ($email$ky);
        
        return 
    "http://www.google.com/recaptcha/mailhide/d?k=" $pubkey "&c=" _recaptcha_mailhide_urlbase64 ($cryptmail);
    }

    /**
     * gets the parts of the email to expose to the user.
     * eg, given johndoe@example,com return ["john", "example.com"].
     * the email is then displayed as john...@example.com
     */
    function _recaptcha_mailhide_email_parts ($email) {
        
    $arr preg_split("/@/"$email );

        if (
    strlen ($arr[0]) <= 4) {
            
    $arr[0] = substr ($arr[0], 01);
        } else if (
    strlen ($arr[0]) <= 6) {
            
    $arr[0] = substr ($arr[0], 03);
        } else {
            
    $arr[0] = substr ($arr[0], 04);
        }
        return 
    $arr;
    }

    /**
     * Gets html to display an email address given a public an private key.
     * to get a key, go to:
     *
     * http://www.google.com/recaptcha/mailhide/apikey
     */
    function recaptcha_mailhide_html($pubkey$privkey$email) {
        
    $emailparts _recaptcha_mailhide_email_parts ($email);
        
    $url recaptcha_mailhide_url ($pubkey$privkey$email);
        
        return 
    htmlentities($emailparts[0]) . "<a href='" htmlentities ($url) .
            
    "' onclick=\"window.open('" htmlentities ($url) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"Reveal this e-mail address\">...</a>@" htmlentities ($emailparts [1]);


    Thanks again for taking a moment to look at my issue. I appreciate any insight.

  5. #5
    SitePoint Evangelist
    Join Date
    Apr 2009
    Location
    South Carolina
    Posts
    458
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Your code looks like what is provided by Google. If the PHP is working, (and it should be) I would suspect the HTML or CSS.

    Since you have a div around the recaptcha, if you provide that code and the css, maybe someone will see the cause.
    Each day is a learning experience.

  6. #6
    SitePoint Member
    Join Date
    Aug 2011
    Posts
    21
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    After painstakingly combing through my css rules, I noticed that I had set some fixed values for "table". Although there are no table elements on the page, having a default value set to

    Code:
    table { table-layout: fixed; }
    was the culprit. After deleting this value, the reCaptcha displays properly.

    Thanks a lot for the support. It was helpful to know that the php was properly structured during troubleshooting.


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •