registrace

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
radvis
Začátečník | 110
+
0
-

Ahoj,

chtěl jsem se zeptat, chci kontrolovat jestli uživatel zadal souhlasná hesla, můžu to napsat takhle?:

	public function registraceFormSubmitted(AppForm $RegistraceForm)
	{
		if ($RegistraceForm['registrovat']->isSubmittedBy()) {
			if($RegistraceForm['heslo'] == $RegistraceForm['heslo2']){
			$registrace = new Registrace;
			$registrace->insert($RegistraceForm->getValues());
			$this->flashMessage('Registrace byla dokončena.');
			}else{
			$this->flashMessage('Nesouhlasné hesla!');
			}
		}

		$this->redirect('Home:default');
	}

není to dodělaná, jen se předběžně ptám ať to nemusím zbytečně předělávat. Díky.

redhead
Člen | 1313
+
0
-

Kontrola shodnosti hesel se dá udělat dokonce na polích toho formuláře. Výhoda je v tom, že funguje i JS validace a chyba se vyhazuje standardně jako špatně vyplněný formulář.

$form->addPassword("password", "Heslo");
$form->addPassword("password_check", "Heslo znovu")
	->addRule(Form::EQUAL, 'Neshodují se hesla', $form['password']);

U toho zbytku problém nevidím.

Editoval redhead (1. 10. 2009 17:44)

Honza Marek
Člen | 1664
+
0
-

Asi jo, ale je to zbytečně složitý. Na políčka s heslama lze rovnou při definici formuláře aplikovat pravidla, aby byla stejná.

$form->addPassword("heslo", "Heslo")
	->addRule(Form::FILLED);
$form->addPassword("heslo2", "Kontrola")
	->addRule(Form::EQUAL, "Hesla musí být stejná", $form["heslo"]);

// EDIT: Tohle se mi snad ještě nestalo :-D Nicméně mám to lepší, pač to mám bez chyby.

Editoval Honza M. (1. 10. 2009 17:43)

Panda
Člen | 569
+
0
-

Možná bude lepší použít přímo validaci z Nette. Při vytváření formuláře:

<?php
public function createComponentRegistraceForm()
{
	$form = new AppForm();
	// ...
	$form->addPassword('heslo', 'Heslo:', 40);
	$form->addPassword('heslo2', 'Potvrzení hesla:', 40)
	     ->addRule(Form::EQUAL, 'Zadaná hesla se musí shodovat.', $form['heslo']);
	// ...

	return $form;
}
?>

Pak se o kontrolu hesel postará sám formulář a v události onSubmit se nemusí nic kontrolovat. Výhodou je také to, že se může použít JavaScriptová validace na straně klienta.

//Doplnění: Zatraceně, až třetí :'(

Aby můj post nebyl úplně zbytečný – při chybě ve vyplněném formuláři bude místo flash zpráviček lepší použít metodu Form::addError($message).

Editoval Panda (1. 10. 2009 17:44)

Honza Marek
Člen | 1664
+
0
-

A další… :-D

redhead
Člen | 1313
+
0
-

rofl! :D :D

tou chybou myslíš chybějící Form::FILLED? Já to tam nepsal (i když asi měl) jenom abych ukázal tu návaznost přes to Form::EQUAL :)

BTW: ta kontrola před odesláním příspěvku by fakt bodla! :D

Editoval redhead (1. 10. 2009 17:48)

radvis
Začátečník | 110
+
0
-

teď mi to hází problém s db „Unknown column ‚heslo2‘ in ‚field list‘“

Panda
Člen | 569
+
0
-

Pokud používáš dibi, tak při vkládání do databáze musíš z hodnot formuláře odstranit ty prvky, pro které není odpovídající sloupec v databázi:

$values = $RegistraceForm->getValues();
unset($values['heslo2']);
$registrace = new Registrace;
$registrace->insert($values);
radvis
Začátečník | 110
+
0
-

už, díky moc;).

Honza Marek
Člen | 1664
+
0
-

redhead napsal(a):

tou chybou myslíš chybějící Form::FILLED?

Načapal jsem tě ještě, když jsi tam měl $this->form…

redhead
Člen | 1313
+
0
-

jo tak, pravda to jsem tam měl, holt, copy n paste :)