Vyplnění hesel ve formuláři po neúspěšné PHP validaci
- MartyIX
- Člen | 217
Mám velice jednoduchý formulář a funkce nickValidator mi zjistí, zda je daná přezdívka používaná či ne. Problém nastane když uživatel odešle formulář (vše má vyplněné správně) a přezdívka není volná, pak se nastaví výchozí hodnoty u všech prvků formuláře správně a jen u hesel se nevyplní nic. Možná je to nerozumné ale i tak bych rád kdyby v takovém případě uživatel pouze změnil přezdívku a mohl kliknout na submit a nemusel znovu zadávat heslo. Jak toho docílit?
protected function createComponentSignInForm()
{
$this->form = new AppForm;
$form = $this->form;
$form->addText('nick', 'Username:')
->addRule(Form::FILLED, 'Please fill the username field.')
->addRule(array($this, 'nickValidator'), 'The username was chosen by another user.')
->getControlPrototype()->class('required');
$form->addPassword('pass', 'Password:')
->addRule(Form::FILLED, 'Please fill the password field.')
->addRule(Form::MIN_LENGTH, 'The password is too short. Minimal length is %d characters.', 5)
->getControlPrototype()->class('required');
$form->addPassword('pass2', 'Re-type password:')
->addRule(Form::FILLED, 'Re-type your password again.')
->addRule(Form::EQUAL, 'Passwords are not the same.', $form['pass'])
->getControlPrototype()->class('required');
$form->addSubmit('ok', 'Send')
->onClick[] = array($this, 'okClicked');
$form->addSubmit('cancel', 'Cancel')
->setValidationScope(FALSE) // prvek se nebude validovat
->onClick[] = array($this, 'cancelClicked');
return $form;
}
- redhead
- Člen | 1313
Toto je bezpečnostní řešení a není to chyba, už vůbec ne v Nette, ale obecně. Na všech stránkách to takhle funguje a neznám jedinou, kde by heslo mohlo být předvyplněno. Jediným řešením je kontrolovat username ajaxově během vyplňování formuláře a neodesílat kvůli tomu formulář a načítat znovu stránku.