Jednoduchá ochrana formuláře proti spamu
- Allconius
- Člen | 317
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
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
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.