Jednoduchá ochrana formuláře proti spamu

Allconius
Člen | 317
+
0
-

Ahoj, vytvořil jsem si jednoduchou ochranu formuláře zadáním součtu čísel:

        $mail = '';
        $min = 1;
        $max = 20;
        //$a = rand($min,$max);
        //$b = rand($min,$max);
        $a = 7;
        $b = 10;

        $captcha =$a + $b;


        $form = new Form;
        $form->addProtection();

        $form->addGroup();

        $form->addText('mail', 'E-mail:')
            ->setDefaultValue($mail)
            ->addRule([$this, 'validateUniqueEmail'], 'Tato e-mailová adresa už je zaregistrována.')
            ->setRequired('Zadejte prosím Vaši E-mailovou adresu.')
            ->addRule(Form::EMAIL, 'Zadejte prosím Váš e-mail ve správném formátu.')
            ->addRule([$this, 'validateDomainEmail'], 'Tato e-mailová adresa neexistuje!');


        $form->addText('captcha', 'Zadejte součet čísel '.$a.'+'.$b.' :', 3, 3)
            ->addRule($form::EQUAL, 'Součet není správně.', $captcha)
            ->setRequired('Musíte vyplnit pole pro potvrzení.');


        $form->addSubmit('submit', 'Odeslat');
        $form->onSuccess[] = [$this, 'editFormSucceeded'];

ty statický hodnoty jsou OK, ale ten rand mi nefunguje protože se formulář při odeslání přegeneruje. Dá se nějak zprovoznit i ty rand hodnoty ?

Michal Kumžák
Člen | 106
+
0
-

Musíš ji je nějak předat, například uložením do session. Pak už stačí jen testovat, zda tyto hodnoty máš naplněné/existují a buď si je vytvoříš nebo použiješ ty co máš v session. Po odeslání formuláře, pak hodnoty ze session vymažeš.

Allconius
Člen | 317
+
0
-

Michal Kumžák napsal(a):

Musíš ji je nějak předat, například uložením do session. Pak už stačí jen testovat, zda tyto hodnoty máš naplněné/existují a buď si je vytvoříš nebo použiješ ty co máš v session. Po odeslání formuláře, pak hodnoty ze session vymažeš.

Aha, už vím jak na to, už jsem řešil předávání dat přes session tak to jen použiju i na ten form. Díky moc.