Validácia náhodne generovaných čísel

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
RichardT
Člen | 43
+
0
-

Dobrý deň,

mám klasický AppForm

$form = new AppForm( $this, $name );
$form->addProtection();

$form->addGroup( 'Confirm' );

$number1 = $this->model->getRandomNumber( 1, 9 );
$number2 = $this->model->getRandomNumber( 1, 9 );

$form->addText( 'verificator', sprintf( '%d + %d = ', $number1, $number2 ), 2, 2 )
    ->addRule( Form::EQUAL, 'Security summary is not correct.', $number1 + $number2 );
$form->addSubmit( 'ok', 'Delete user' );

$form->onSubmit[] = array( $this, 'formDeleteSubmitted' );

Overenie teda spočíva v kontrole toho, či užívateľ správne vypočítal jednoduchý matematický príklad (súčet 2 náhodne vygenerovaných čísel z intervalu 1 až 9). Ploblém ale je, že to neprejde overením na strane servera, predpokladám pre to, lebo pri odoslaní formulára dôjde k znovunačítaní stránky, a teda aj k vygenerovaniu iných čísel. Vedeli by ste mi poradiť nejaký pekný spôsob ako tento problém vyriešiť? Ďakujem vopred za odpovede!

jasir
Člen | 746
+
0
-

Z diskuze o komponente Captcha

<?php
$session = Environment::getSession('contact');
if ($session->key === NULL) {
        $session->key = mt_rand(20, 99);
}

$key = $session->key;

$a = mt_rand(10, $key - 10);
$b = $key - $a;

$form->addText('age', "$a + $b =")
        ->addRule(Form::EQUAL, 'Prove that you are human by computing the expression.', $key);
?>
RichardT
Člen | 43
+
0
-

Captcha je zbytočne zložitá, mne ide o to vytvoriť niečo ako potrvrdenie náhodnému kliknutiu, a nie obranu proti botom.

Cez sessions to ide, ale musím kontrolovať kedy bol formulár vytvorený po odoslaní a kedy nie (kontrolovať parameter do), aby som vedel kedy vygenerovať nové čísla a kedy nie. Bol som zvedavý či sa to nedá vyriešiť nejako krajšie.

pmg
Člen | 372
+
0
-

Pokud se má klíč náhodně měnit, bude potřeba ho někam uložit. Použít session je přitom nejjednodušší.

V kódu se klíč vygeneruje, pokud zatím vygenerován není, a v případě opakovaného vykreslení formuláře kvůli nějaké chybě se vypíše jiný příklad se stejným řešením. Po provedení akce pak stačí klíč odnastavit.

RichardT
Člen | 43
+
0
-

Más pravdu, iný príklad s rovnakým riešením bude to najjednoduchšie, spravím to tak. Díky moc