Primitivní CAPTCHA neprojde Nette validací?
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Mysteria
- Člen | 797
Na opsání jednoho čísla funguje bez problémů:
$c1 = mt_rand(0, 9);
$c2 = mt_rand(0, 9);
$form->addHidden('c1', $c1);
$form->addHidden('c2', $c2);
$form->addText('captcha')->setAttribute('placeholder', "Vypočítejte příklad $c1 + $c2 =")
->addRule(Form::FILLED, "Vypočítejte příklad $c1 + $c2 =")
->addRule(Form::EQUAL, 'Zadejte prosím správný výsledek.', $form['c1']);
Problém je, když tam chci mít „příklad“:
$form->addText('captcha')->setAttribute('placeholder', "Vypočítejte příklad $c1 + $c2 =")
->addRule(Form::FILLED, "Vypočítejte příklad $c1 + $c2 =")
->addRule(Form::EQUAL, 'Zadejte prosím správný výsledek.', $form['c1']->getValue() + $form['c2']->getValue());
Přes JS validaci projde správně přes správný výsledek, ale pořád tam někde vzniká error, protože onSuccess[] se nevykoná, pouze onSubmit[], když si vypíšu chyby formuláře, tak samozřejmě „Zadejte prosím správný výsledek“.
Díky za pomoc.
- Mysteria
- Člen | 797
@Mesiah: Přenáším je samozřejmě taky, jenom jsem to tam nedával, kompletní 2. příklad samozřejmě vypadá takhle:
$c1 = mt_rand(0, 9);
$c2 = mt_rand(0, 9);
$form->addHidden('c1', $c1);
$form->addHidden('c2', $c2);
$form->addText('captcha')->setAttribute('placeholder', "Vypočítejte příklad $c1 + $c2 =")
->addRule(Form::FILLED, "Vypočítejte příklad $c1 + $c2 =")
->addRule(Form::EQUAL, 'Zadejte prosím správný výsledek.', $form['c1']->getValue() + $form['c2']->getValue());
Proto mě právě není jasný, jak je možný, že když to kontroluju jenom na hodnotu jednoho z nich, tak to funguje, ale jakmile chci kontrolovat součet, tak to už nejde.
- Mysteria
- Člen | 797
@Mesiah: Vrací normálně string. Ale problém bude někde v getValue(), protože:
// Projde
addRule(Form::EQUAL, 'Zadejte prosím správný výsledek.', $form['c1']);
// NEprojde
addRule(Form::EQUAL, 'Zadejte prosím správný výsledek.', $form['c1']->getValue());
// Tohle nemůžu udělat, protože Nette\Forms\Controls\HiddenField could not be converted to int
addRule(Form::EQUAL, 'Zadejte prosím správný výsledek.', $form['c1'] + $form['c2']);
// NEprojde
addRule(Form::EQUAL, 'Zadejte prosím správný výsledek.', $form['c1']->getValue() + $form['c2']->getValue());
Editoval Mysteria (9. 1. 2014 18:14)