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?
a) als je het inlogformulier toont dan schrijf je de captha naar de sessie.
<?php
session_start();
$_SESSION['captcha'] = $captcha;
?>
b) als het formulier verstuurd is dan vergelijk je de captcha uit de sessie met de captcha in de $_POST array.
<?php
session_start();
if(!isset($_SESSION['captcha']) || trim(strtolower($_SESSION['captcha'])) != trim(strtolower($_POST['captcha'])))
$error = 'Captcha is niet juist';
?>
Ik raad je sterk aan de wachtwoorden te versleutelen met bcrypt (bij example #2). Je moet hiervoor wel PHP versie 5.5 of hoger hebben draaien.
Waar zouden deze 2 voorbeelden dan in de code komen te staan. Ben een beginner met PHP net een maandje bezig & snap nog niet helemaal hoe & waar alles moet staan
<?php
// een functie die een willekeurige reeks letters en cijfers maakt
function generateRandomString($length = 10) {
$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
session_start();
$error = '';
// als het formulier verstuurd wordt dan is de request in de POST methode.
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// validatie van de captcha
if(!isset($_SESSION['captcha']) || trim(strtolower($_SESSION['captcha'])) != trim(strtolower($_POST['captcha']))) {
$error = 'Captcha is niet juist';
}
// HIER KAN NOG MEER VALIDATIE PLAATSVINDEN
// als de validatie geslaagd is sturen we de gebuiker door naar een andere pagina
if($error == '') {
header('Location: homepage.php');
exit;
}
}
// maak een nieuwe captcha code
$_SESSION['captcha'] = generateRandomString(5);
// PAS HIERONDER STARTEN WE MET DE OUTPUT. session_start() en header() zouden anders niet werken!
// DISCLAIMER: GEBRUIK GEEN SVG OF TEXT OM DE CAPTCHA WEER TE GEVEN MAAR GENEREER EEN AFBEELDING.
// HIER IS DE CAPTCHA WEL GEWOON TEKST MAAR DIT IS SLECHTS EEN KORT VOORBEELD!
?>
<!DOCTYPE html>
<html>
<head>
<title>Captcha!</title>
<meta charset="UTF-8">
</head>
<body>
<?php
if(strlen($error))
echo '<p>' . $error . '</p>';
?>
<svg height="30" width="200">
<text x="0" y="15" fill="red"><?php echo $_SESSION['captcha']; ?></text>
</svg>
<form action method="post">
<input type="text" name="captcha" placeholder="vul de captcha code in">
<button>Test!</button>
</form>
</body>
</html>