<?php
if (!isset($_SESSION)) { session_start(); }

if (isset($_SESSION['login']) && $_SESSION['login'] === true && isset($_SESSION['userid']) && $_SESSION['userid'] != "") {
header('location: loggedin.php');
exit();
}

include "connect.php";
include "functions.php";

$error = "";

if (isset($_POST['login']) || isset($_POST['username']) || isset($_POST['password']) || isset($_POST['g-recaptcha-response'])) {

$username = $_POST['username'];
$password = $_POST['password'];
$captcha= $_POST['g-recaptcha-response'];
if (checkUsername($username) === false) {
$error = "Onjuiste inlogpoging";
}
if (checkPassword($password) === false) {
$error = "Onjuiste inlogpoging";
}
if(!$captcha){
$error = "Please check the the captcha form.";

}

$secure_username = bin2hex(htmlspecialchars($username));
$secure_password = bin2hex(htmlspecialchars($password));

$q_checklogin = mysqli_query($conn, "SELECT id FROM users WHERE username = UNHEX('$secure_username') AND password = UNHEX('$secure_password')");

if (mysqli_num_rows($q_checklogin) === 1) {
$r_checklogin = mysqli_fetch_assoc($q_checklogin);
$_SESSION['userid'] = $r_checklogin['id'];
$_SESSION['login'] = true;
header('location: loggedin.php');
} else {
$error = "Onjuiste inlogpoging";
}

}
?>

Ik heb deze code geschreven maar iedere keer als ik wil inloggen logt de website in zonder dat de captcha geverifieerd is, dit niet mij bedoeling. De gebruikersnaam en het wachtwoord moeten kloppen hierna moet de captcha geverifieerd worden en dan pas mag er ingelogd zijn. Hoe krijg ik het voor mekaar om dit te doen?
ik heb het gezien. google recaptcha.. i ll be back.

[size=xsmall]Toevoeging op 13/03/2016 16:42:39:[/size]

Oke voorbeeld aangepast met Recaptcha van google.

- zelf even je eigen site-key en secret-key er in zetten
- werkt alleen met gebruik van een domeinnaam dus niet met 127.0.0.1 of localhost.


<?php
function checkCaptcha($secret, $captcha) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/recaptcha/api/siteverify');
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,
            'secret=' . $secret . '&response=' . $captcha);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $response = curl_exec($ch);

    curl_close ($ch);
    
    $response = json_decode($response, TRUE);
    
    if(isset($response['success']) && $response['success'] == 'true')
        return true;
    
    return false;
}

session_start();

$key = 'jouw eigen site-key';
$secret = 'jouw eigen secret-key';
$error = '';

// als het formulier verstuurd wordt dan is de request in de POST methode.
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    if(!checkCaptcha($secret, $_POST['g-recaptcha-response']))
            $error = 'Ongeldige captcha';
    
    // HIER KAN NOG MEER VALIDATIE PLAATSVINDEN
    
    
    // als de validatie geslaagd is sturen we de gebuiker door naar een andere pagina
    if($error == '') {
	// DOE HIER WAT JE MOET DOEN VOOR DE AFHANDELING VAN JE FORMULIER

        header('Location: homepage.php');
        exit;
    }
}
// PAS HIERONDER STARTEN WE MET DE OUTPUT. session_start() en header() zouden anders niet werken!
?>
<!DOCTYPE html>
<html>
    <head>
        <title>Captcha!</title>
        <meta charset="UTF-8">
        <script src='https://www.google.com/recaptcha/api.js'></script>
    </head>
    <body>
        <?php 
            if(strlen($error))
                echo '<p>' . $error . '</p>';
        ?>
        <form action method="post">
            <div class="g-recaptcha" data-sitekey="<?php echo $key; ?>"></div>
            <button>Test!</button>
        </form>
    </body>
</html>
Sander Bakker op 13/03/2016 15:04:30
Ben een beginner met PHP net een maandje bezig & snap nog niet helemaal hoe & waar alles moet staan

Wellicht is een loginsysteem waarbij je communiceert met een externe dienst ter verificatie niet de beste plaats om te starten met PHP. Da's toch een beetje binnenkomen via de zijdeur.
@Thomas, maar het kan geen kwaad om te profiteren van een goed algoritme van Google.
@Ariën toch alleen als je kunt doorgronden wat er gebeurt, anders is het niets meer dan een "googeltruuk".

Indien je je eigen loginmechanisme schrijft -zelfs, en mogelijk te meer, wanneer je gebruik maakt van hulpstukken- is het zaak dat je snapt wat je doet.

Reageren