validace formuláře – reset hesla
- sidrach
- Člen | 23
Zdravím a rovnou se dopředu omlouvám za vlastní nedovtipnost. Ale už bych potřeboval radu..
Mám Grido datagrid a v něm seznam uživatelů, akce je editace uživatele a nechtěl jsem na to dělat další form který je dost podobný stejnému formu pro přidání nového uživatele. Pokud provedu reset hesla (checkbox pwd_reset == TRUE) tak vše funguje, pokud ale nechci dělat reset (pwd_reset == FALSE), tak po mě stejně chtějí pole pro heslo aspoň 8 znaků hesla i když nejsou required.
Co je špatně na té validaci?
protected function createComponentPridatUzivateleForm()
{
$role = array('admin' => 'Administrátor',
'uzivatel' => 'Uživatel',
'externista' => 'Externí spolupracovník',
'zakazan' => 'Zakázat účet');
$objednavky = array(0=>'žádné',
1=>'firma',
2=>'všechny');
$form = new Nette\Application\UI\Form;
$form->addText('jmeno', 'Login: ')->setRequired('Vyplňte prosím př. jméno.')->addRule(Form::MIN_LENGTH, 'Jméno musí mít alespoň 3 znaky.', 3);;
if (isset($this->getSession('user_zmena')->user_zmena)){
$zmena = $this->getSession('user_zmena')->user_zmena;
unset($this->getSession('user_zmena')->user_zmena);
$submitText = 'Uložit';
$this->template->popis_formulare = 'Upravit uživatele: ';
$poleHodnot = $this->database->table('uzivatele')->get($zmena);
//TOHLE JE TA VALIDACE
$form->addCheckBox('pwd_reset', 'Reset hesla?', FALSE);
$form->addPassword('heslo', 'Heslo: ')->addConditionOn($form['pwd_reset'], Form::EQUAL, TRUE)->setRequired('Vyplňte prosím heslo.')->addRule(Form::MIN_LENGTH, 'Heslo musí mít alespoň 8 znaků.', 8);
$form->addPassword('heslo_potvrzeni', 'Heslo znovu: ')->addConditionOn($form['pwd_reset'], Form::EQUAL, TRUE)->setRequired('Vyplňte prosím heslo ještě jednou.')->addConditionOn($form['heslo'], Form::FILLED)->addRule(Form::EQUAL, 'Hesla se musí shodovat.', $form['heslo']);
//
$form->addHidden('id',$zmena);
} else {
$submitText = 'Založit uživatele';
$this->template->popis_formulare = 'Založit nového uživatele: ';
$form->addPassword('heslo', 'Heslo: ')->setRequired('Vyplňte prosím heslo.')->addRule(Form::MIN_LENGTH, 'Heslo musí mít alespoň 8 znaků.', 8);
$form->addPassword('heslo_potvrzeni', 'Heslo znovu: ')->setRequired('Vyplňte prosím heslo ještě jednou.')->addConditionOn($form['heslo'], Form::FILLED)->addRule(Form::EQUAL, 'Hesla se musí shodovat.', $form['heslo']);
}
$form->addText('email', 'Email: ')->setRequired('Vyplňte email uživatele.')->addCondition(Form::MAX_LENGTH, 60)->addRule(Form::PATTERN, 'Email není ve správném formátu.', '[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}');
$form->addSelect('role', 'Role: ', $role)->setRequired('Vyberte jednu z rolí uživatele.');
$form->addSelect('objednavky', 'Objednávky emailem: ', $objednavky)->setRequired('Vyberte jednu z možností.');
$form->addSubmit('odeslat', $submitText);
if(isset($zmena)){
$form->setDefaults($poleHodnot);
unset($zmena);
}
$form->onSuccess[] = $this->pridatUzivateleFormSucceeded;
return $form;
}
- David Matějka
- Moderator | 6445
predpokladam, ze problem bude v
if (isset($this->getSession('user_zmena')->user_zmena)){
$zmena = $this->getSession('user_zmena')->user_zmena;
unset($this->getSession('user_zmena')->user_zmena);
po odeslani session neexistuje, takze se provede ta druha cast – zalozit uzivatele
proc to resis pomoci session? predavej si to v URL..
- sidrach
- Člen | 23
matej21 napsal(a):
predpokladam, ze problem bude v
if (isset($this->getSession('user_zmena')->user_zmena)){ $zmena = $this->getSession('user_zmena')->user_zmena; unset($this->getSession('user_zmena')->user_zmena);
po odeslani session neexistuje, takze se provede ta druha cast – zalozit uzivatele
proc to resis pomoci session? predavej si to v URL..
Vyzkousim to rano predat pres get. Nejak jsem predpokladal, ze validace
probehne az potom, co je slozeny a naplneny formular, takze kdyz poslu ze
pwd_reset je false, tak validace probehne ok. Pokud to tedy chapu spravne, tak
se po odeslani form znovu
presklada a tam uz neni pritomna hodnota ze session, takze se pak vyskladaji
password pole s jinými pravidly validace.