Random nummer valideren ( php rand )
Ik gebruik de functie $rand om een willekeurig nummer (tussen 100 en 1000) te tonen in mijn contactformulier, om anti-span tegen te gaan. Gebruiker moet dit nummer overnemen, want anders wordt formulier niet verstuurd.
Maare, hoe kan ik dit nummer valideren middels if/else statement?
Als niet correct > error
Anders > formulier versturen
Dit heb ik tot nu toe, maar werkt niet.
(form_sum = de value van betreffende invoer veld)
Ik vergelijk de ingevoerde waarde met de rand (maar daar gaat het fout)
Guido
Gewijzigd op 25/10/2014 23:43:52 door Guido -
Je zal met sessions moeten werken hiervoor.
Kun je me op weg helpen hoe ik middels session_start de rand variabale tijdelijk kan laten staan?
Guido
http://phptuts.nl/view/39/9/ (ergens halverwege en het hele volgende hoofdstuk).
Kijk inderdaad eens naar sessions. Dat is niet heel moeilijk en is op heel veel plekken al erg goed uitgelegd. Bijvoorbeeld Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
// Start een sessie
session_start();
// Behoud random getal of creëer een nieuw random getal
$_SESSION['rand'] = isset($_SESSION['rand']) ? $_SESSION['rand'] : rand(100, 999);
?>
// Start een sessie
session_start();
// Behoud random getal of creëer een nieuw random getal
$_SESSION['rand'] = isset($_SESSION['rand']) ? $_SESSION['rand'] : rand(100, 999);
?>
Gewijzigd op 26/10/2014 00:24:16 door G P
Ik gebruik jouw code:
Code (php)
1
2
2
session_start();
$_SESSION['rand'] = isset($_SESSION['rand']) ? $_SESSION['rand'] : rand(100, 999);
$_SESSION['rand'] = isset($_SESSION['rand']) ? $_SESSION['rand'] : rand(100, 999);
Ik toon random getal op formulier middels:
Het ingevulde getal lees ik uit met:
Ik vergelijk getal op formulier met het ingevulde getal:
Natuurlijk wil ik dat de sessie gewist wordt nadat ik op submit gedrukt heb:
Na versturen wordt dankbericht aan gebruiker getoond ($info).
Neem aan dat ik de session_destroy zo goed gebruik?
Dus direct na het versturen, want direct na op submit drukken is te vroeg.
Guido
Unset($_SESSION['rand']);
Lijkt me zat.
Srel dat de gebruiker ingelogd was, dan is dat ook direct voorbij.
Guido
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$sum = $_POST["form_sum"];
if (!($sum == $_SESSION['rand']))
{ error als niet overeenkomt
}
?>
$sum = $_POST["form_sum"];
if (!($sum == $_SESSION['rand']))
{ error als niet overeenkomt
}
?>
Dat kan iets korter, maar vooral overzichtelijker:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
if ($_POST['form_sum'] !== $_SESSION['rand'])
{ error als niet overeenkomt
}
?>
if ($_POST['form_sum'] !== $_SESSION['rand'])
{ error als niet overeenkomt
}
?>
== betekent IS GELIJK
!= betekent IS NIET GELIJK
=== betekent IS GELIJK, en ook qua type (0 is niet False)
!== betekent IS NIET GELIJK EN/OF NIET GELIJK QUA TYPE
Gewijzigd op 27/10/2014 20:59:29 door Eddy E
Alhoewel het gewoon kan, heeft het in dit specifieke geval overigens geen meerwaarde om !== te gebruiken in plaats van !=.
http://www.w3schools.com/php/showphp.asp?filename=demo_operator_comparison
En hier nog wat uitleg er over.
Zoals Willem zegt lijkt me er geen meerwaarde te zijn om "!==" te gebruiken ipv "!=". Desondanks, kwaad kunnen doet het ook niet. Het is enkel iets foutgevoeliger.
Zoals in het voorbeeld:
Gewijzigd op 28/10/2014 08:23:54 door Willem vp
Hmm... dit vind ik eigenlijk een structurele fout in PHP. De type juggler zou m.i. '123abc' naar 0 moeten vertalen...
Zo leren we toch allen weer bij!
Dank allemaal!
Guido