Random nummer valideren ( php rand )

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Guido  -

Guido -

25/10/2014 23:22:35
Quote Anchor link
Hallo,

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)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$sum = $_POST["form_sum"];
$rand = rand(100, 999);


Ik vergelijk de ingevoerde waarde met de rand (maar daar gaat het fout)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if (!($sum == $rand)) { error


Guido
Gewijzigd op 25/10/2014 23:43:52 door Guido -
 
PHP hulp

PHP hulp

28/03/2024 17:16:19
 
G P

G P

25/10/2014 23:52:06
Quote Anchor link
Dat komt omdat je steeds een ander getal krijgt bij het laden van de pagina.
Je zal met sessions moeten werken hiervoor.
 
Guido  -

Guido -

26/10/2014 00:10:29
Quote Anchor link
Dat idee kreeg ik idd ook... Als ik op submit druk wordt nieuwe geladen.
Kun je me op weg helpen hoe ik middels session_start de rand variabale tijdelijk kan laten staan?

Guido
 
Wouter J

Wouter J

26/10/2014 00:14:44
Quote Anchor link
Kijk inderdaad eens naar sessions. Dat is niet heel moeilijk en is op heel veel plekken al erg goed uitgelegd. Bijvoorbeeld http://phptuts.nl/view/39/9/ (ergens halverwege en het hele volgende hoofdstuk).
 
G P

G P

26/10/2014 00:23:52
Quote Anchor link
Om je opweg te helpen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>
De rest kan je waarschijnlijk wel zelf uitzoeken?
Gewijzigd op 26/10/2014 00:24:16 door G P
 
Guido  -

Guido -

26/10/2014 13:05:00
Quote Anchor link
Thanks, zekers.

Ik gebruik jouw code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
session_start();
$_SESSION['rand'] = isset($_SESSION['rand']) ? $_SESSION['rand'] : rand(100, 999);


Ik toon random getal op formulier middels:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
'. $_SESSION['rand'].'


Het ingevulde getal lees ik uit met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$sum = $_POST["form_sum"];


Ik vergelijk getal op formulier met het ingevulde getal:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if (!($sum == $_SESSION['rand'])) { error als niet overeenkomt


Natuurlijk wil ik dat de sessie gewist wordt nadat ik op submit gedrukt heb:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
if($sent == true) {
session_destroy();
return $info;
}

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
 
Ivo P

Ivo P

26/10/2014 16:16:28
Quote Anchor link
Lijkt me wat overkill om alles uit de session weg te gooien

Unset($_SESSION['rand']);

Lijkt me zat.
Srel dat de gebruiker ingelogd was, dan is dat ook direct voorbij.
 
Guido  -

Guido -

27/10/2014 18:02:10
Quote Anchor link
Niet aan gedacht, thanks! Gaan we doen.

Guido
 
Eddy E

Eddy E

27/10/2014 20:59:04
Quote Anchor link
Wellicht om je iets nieuws te leren:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$sum
= $_POST["form_sum"];
if (!($sum == $_SESSION['rand']))
   {
error als niet overeenkomt
   }
?>


Dat kan iets korter, maar vooral overzichtelijker:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
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
 
Willem vp

Willem vp

28/10/2014 07:54:42
Quote Anchor link
Alhoewel het gewoon kan, heeft het in dit specifieke geval overigens geen meerwaarde om !== te gebruiken in plaats van !=.
 
Peter K

Peter K

28/10/2014 08:05:07
Quote Anchor link
Hier een mooi voorbeeld:

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// Variabelen
$x=100;
$y="100";

// Vergelijken van x tov y
var_dump($x != $y);

// Resultaat: false 100 is namelijk hetzelfde als 100

// Vergelijken van x tov y

var_dump $x !== $y);

// Resultaat: true x is een nummer en y is een string (zie de quotes er omheen)

?>
 
Willem vp

Willem vp

28/10/2014 08:22:15
Quote Anchor link
Eigenlijk gaat het met !== "per ongeluk" goed, omdat PHP een string die op een getal lijkt eerst vertaalt naar een getal. Dat type checken van die operator is dus ook maar betrekkelijk. ;-)
Gewijzigd op 28/10/2014 08:23:54 door Willem vp
 
Wouter J

Wouter J

28/10/2014 09:59:11
Quote Anchor link
!== is gewoon wat stricker en daarom zou ik hem altijd gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
var_dump('123abc' == 123); // true, '123abc' wordt eerst getypecast naar een getal
var_dump('123abc' === 123); // false, gelukkig!
?>
 
Willem vp

Willem vp

28/10/2014 10:06:53
Quote Anchor link
> var_dump('123abc' == 123); // true

Hmm... dit vind ik eigenlijk een structurele fout in PHP. De type juggler zou m.i. '123abc' naar 0 moeten vertalen...
 
Peter K

Peter K

28/10/2014 10:21:45
Quote Anchor link
Zo leren we toch allen weer bij!
 
Guido  -

Guido -

29/10/2014 14:34:24
Quote Anchor link
En vooral ik ;-)

Dank allemaal!

Guido
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.