2

I am trying to get this captcha working in the laravel framework. I want it to work with a contactus page but I have no clue how to implement the php section into the laravel framework as I am trying to put it in the post contact us function in the controller but it breaks my program

The Html in the view

<img id="captcha" src="/securimage/securimage_show.php" alt="CAPTCHA Image" />
 <input type="text" name="captcha_code" size="10" maxlength="6" />

 <a href="#" onclick="document.getElementById('captcha').src = '/securimage/securimage_show.php?' + Math.random(); return false">[ DifferentImage ]</a>

This code I am trying to get in the contoller:

include_once $_SERVER['DOCUMENT_ROOT'] . '/securimage/securimage.php';

$securimage = new Securimage();
if ($securimage->check($_POST['captcha_code']) == false) {
  // the code was incorrect
  // you should handle the error so that the form processor doesn't continue

  // or you can use the following code if there is no validation or you do not know how                   
  echo "The security code entered was incorrect.<br /><br />";
  echo "Please go <a href='javascript:history.go(-1)'>back</a> and try again.";
  exit;
}

Here is the : documentation https://www.phpcaptcha.org/documentation/quickstart-guide/

1 Answer 1

2

I am assuming that you ran the securimage_test.php on your server and the test passes. Here is what I did to get it working.

Add this line to your app's composer.json, in the "require": { ... },:

    "dapphp/securimage": "~3.5",

run composer update to install the securimage package and add its class to the autoload.

For the image and input I added this into my form:

<img id="captcha" style="width: 241px; height: 80px;" src="/captcha" alt="CAPTCHA Image" />
<input class="form-control" type="text" name="captcha_code" size="10" maxlength="6" />
<a href="#" onclick="document.getElementById('captcha').src = '/captcha?' + Math.random(); return false">[Generate a new image]</a>

Add '/captcha' or any other URL you want to use as the captcha image to your routes file to point to a function that is a copy of the function in securimage_show.php

in routes.php:

Route::get('/captcha', 'HomeController@getCaptcha');

in my case it is in HomeController.php:

public
function getCaptcha()
{
    $img = new Securimage();

    // set namespace if supplied to script via HTTP GET
    if (!empty($_GET['namespace'])) $img->setNamespace($_GET['namespace']);

    $img->show();  // outputs the image and content headers to the browser
    // alternate use:
    // $img->show('/path/to/background_image.jpg');
}

Then in the post method wherever you validate your form, add the validation for the captcha:

    $image = new Securimage();
    if ($image->check(Input::get('captcha_code')) !== true)
    {
        // add however you handle feedback to the user here
        $errors = new MessageBag();
        $errors->add('captcha_code', 'Text you entered does not match');
        return Redirect::back()
            ->with('errors', $errors)
            ->withInput(Input::only('email', 'name'));
    }
    // text matches, go on processing
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.