validace formuláře – reset hesla

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
sidrach
Člen | 23
+
0
-

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
+
0
-

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
+
0
-

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.

sidrach
Člen | 23
+
0
-

Jo, měl jsi pravdu. Děkuji.

Bylo to tím, že jsem si to rušil ze session. Stačilo přehodit si ten unset místo do formu, do akce grida za krok který volá funkci edit v modelu. Teprve až ta projde bez vyjímky, tak se vykoná.