Více formulářů na jedné stránce – s třídou Form
- Honza Kuchař
- Člen | 1662
Dobrý den,
jsem v NETTE úplný začátečník, používám NETTE/Form samostatně. (tzn.
ne AppForm)
Když odešlu formulář s neplatnými údaji a je povolen JS, tak vyskočí
hláška a vše je ok. Pokud ovšem vypnu JS, formulář vypisuje stále pouze
chyby, které nastaly v 1. formuláři, i když jsem odeslal, ten druhý.
Tzn. 1. funguje bez nejmenších problémů, každý další má problém. :(
(Jestli funguje $f->isSubmitted() jsem nezkoušel)
Používám následující kód:
<?php
$fPrihlasit = new Form("fPrihlasit");
$fPrihlasit->getElementPrototype()->name="loginForm";
$fPrihlasit->addText('uzivatel', 'Uživatelské jméno')
->addRule(Form::FILLED, 'Zadej uživatelské jméno!');
$fPrihlasit->addPassword('heslo', 'Heslo')
->addRule(Form::FILLED, 'Zadej heslo!');
$fPrihlasit->addSubmit('odeslat', 'PŘIHLÁSIT');
if ($fPrihlasit->isSubmitted() AND $fPrihlasit->isValid()) {
$values = $fPrihlasit->getValues();
//Debug::dump($values);
login($values["uzivatel"],$values["heslo"]);
}
echo $fPrihlasit;
/* /////////////////////////////////////////////////////////////////////////////////////// */
$fRegistrace = new Form("fRegistrace");
$msg = " je poviný údaj!";
$fRegistrace->addText('jmeno' ,'Jméno')
->addRule(Form::FILLED, 'Jméno '.$msg);
$fRegistrace->addText('prijmeni','Příjmení')
->addRule(Form::FILLED, 'Příjmení '.$msg);
$fRegistrace->addText('mesto' ,'Město')
->addRule(Form::FILLED, 'Město '.$msg);
$fRegistrace->addText('user' ,'Uživatelské jméno')
->addRule(Form::FILLED, 'Uživatelské jméno '.$msg);
$fRegistrace->addPassword('pass' ,'Heslo')
->addRule(Form::FILLED, 'Heslo '.$msg);
$fRegistrace->addPassword('pass2' ,'Heslo znovu')
->addRule(Form::FILLED, 'Prosím zadejte heslo i podruhé.');
$fRegistrace->addText('email' ,'E-mail')
->addRule(Form::FILLED, 'E-mail '.$msg)
->addRule(Form::EMAIL, 'E-mail není platný!')
->emptyValue = "@";
$fRegistrace->addSubmit('odeslat', 'REGISTROVAT');
echo $fRegistrace;
?>
Editoval honzakuchar (15. 3. 2009 0:43)
- vlki
- Člen | 218
Tady je problém s tím, že třída Form
neřeší, odkud ten
post přišel. Viz api https://api.nette.org/…orm.php.html#359
Řešením by tedy bylo nastavit jim do action nějaké různé adresy (např. jen v query řetězci) nebo nějaké skryté pole a formulář identifikovat podle tohoto. Asi není počítano s tím, aby dva diametrálně různé formuláře zpracovával stejný skript.
- Honza Kuchař
- Člen | 1662
Díky moc. Myslel jsem si, že to tak dopadne. :) Takže už jsem web přepsal tak, aby používal MVC → používám teď AppFrom. Jestli to funguje nevím, zatím jsem to nezkoušel.
- Honza Kuchař
- Člen | 1662
Jasný :) Ještě k tomu new Form() → pokoušel jsem se to ještě udělat přes ruční přidání proměné „do“ do URL, ale to taky nefungovalo. :( Ale to je jedno, to už je pryč, už je tady MVC a vše je ok :)
Mimo chodem – poznatek z krátké praxe s Nette frameworkem: „Nette je opravdu perfektní framework. Když ho na nějaké části aplikace prostě používat nechci, nemusím. :) Opravdu super. :) Díky za něho. ;) Ještě akorát doufám, že nenarazím na něco, když už bude aplikace z 99% hotová, co framework neumí. Ale myslím si, že je to hodně nepravděpodobné vzhledem k rozšířitelnosti Nette. Takže když něco neumí, většinou se s tím ještě pořád dá něco dělat.“
P.S.: Dobrou noc všem, co ještě v těhle pozdních hodinách okouní tady na fóru. :)