Bezpečné formuláre v html?

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

Zdravím, pozerám pozerám, no všade tu je popísané jak chrániť formuláre tvorené typom

$form = new Form;

$form->addText('name', 'Jméno:');
$form->addPassword('password', 'Heslo:');
$form->addSubmit('send', 'Registrovat');

Túto metódu tvorbu formulárov nemám rád, priam to neznášam. Je to zbytočné babranie nastavovať tam class a tak ďalej keď to omnoho rýchlejšie dokážem spraviť v html, a hlavne mi vadí že ten formulár vykreslí do table, desnéééé..

Moja otázka znie, dá sa nejak ošetriť formulár napísaný v html ? Napríklad

<input type="text" class="drist" name="meno"/>

chcem aby tento input bol povinný teda required. Ako, alebo či vôbec, dá sa to ?

Editoval account23 (23. 1. 2014 10:46)

matopeto
Člen | 395
+
0
-

Vykreslit si formular mozes kludne rucne, osetrenie bude na zaklade toho co si definoval v komponente. Vid dokumentacia : Vykreslovanie formularov.

Pavel Macháň
Člen | 282
+
0
-

account23 napsal(a):

Zdravím, pozerám pozerám, no všade tu je popísané jak chrániť formuláre tvorené typom

$form = new Form;

$form->addText('name', 'Jméno:');
$form->addPassword('password', 'Heslo:');
$form->addSubmit('send', 'Registrovat');

Túto metódu tvorbu formulárov nemám rád, priam to neznášam. Je to zbytočné babranie nastavovať tam class a tak ďalej keď to omnoho rýchlejšie dokážem spraviť v html, a hlavne mi vadí že ten formulár vykreslí do table, desnéééé..

Moja otázka znie, dá sa nejak ošetriť formulár napísaný v html ? Napríklad

<input type="text" class="drist" name="meno"/>

chcem aby tento input bol povinný teda required. Ako, alebo či vôbec, dá sa to ?

Nic ti nebrání to vykreslit ručně – Dokumentace

account23
Člen | 36
+
0
-

hm myslíš tento typ ?

{input name}

a nešlo by to normálne vytvoriť input v html ? a potom po odoslaní formuláru narazí na ošetrenie ? Už som prečítal celú dokumentáciu, ku všetkému sú rôzne spôsoby, ale že sa nedajú robiť formuláre v html ? Je to dosť bieda…

vvoody
Člen | 910
+
0
-

Asi hľadáš toto

Dokonce je možné jen „oživit“ prvky napsané čistě v HTML pomocí makra n:name, které ho sváže s formulářovým prvek uvedením jeho identifikátoru:

https://doc.nette.org/cs/forms#…

romiix.org
Člen | 343
+
0
-

Nejak stále nechápem akú výhodu má manuálne vypisovať HTML kód, manuálne napísať JS validáciu a jednotlivé časti formulára manuálne samostatne validovať oproti jednotnej definícií v PHP a automatickému renderu. Je to iba nejaká nepochopiteľná nechuť?

Manuálne vykreslovanie ti už poradené bolo a pomocou $wrappersdokumentácií vieš zlikvidovať tie desnéééé tabuľky.

Pavel Macháň
Člen | 282
+
0
-

account23 napsal(a):

hm myslíš tento typ ?

{input name}

a nešlo by to normálne vytvoriť input v html ? a potom po odoslaní formuláru narazí na ošetrenie ? Už som prečítal celú dokumentáciu, ku všetkému sú rôzne spôsoby, ale že sa nedajú robiť formuláre v html ? Je to dosť bieda…

<label for="frm-name">
<input n:name="name">
account23
Člen | 36
+
0
-

Hm no keď tak nad tým uvažujem, dalo by sa to prežiť, že to musím robiť cez PHP. Aspoň že to nemusím mať vykreslené v tabuľkách :D

Editoval account23 (23. 1. 2014 11:32)

Pavel Macháň
Člen | 282
+
0
-

account23 napsal(a):

Hm no keď tak nad tým uvažujem, dalo by sa to prežiť, že to musím robiť cez PHP. Aspoň že to nemusím mať vykreslené v tabuľkách :D

Tabulek bych se moc nebál. Pokud je nepoužiješ na strukturování layoutu ale pro formátování dat tak v nich nevidím problém. Za každou cenu rvát vše do divů mě přijde jako blbost.

Btw nic ti nebráví změnit tabulku na něco jiného viz dokumentace

$renderer = $form->getRenderer();
$renderer->wrappers['controls']['container'] = 'dl';
$renderer->wrappers['pair']['container'] = NULL;
$renderer->wrappers['label']['container'] = 'dt';
$renderer->wrappers['control']['container'] = 'dd';

Editoval EIFEL (23. 1. 2014 11:48)

Mysteria
Člen | 797
+
0
-

Osobně taky používám komplet manuální vykreslování, viz třeba:

<form n:name=searchForm >
	<img src='{$basePath}/images/search.png' alt='Search' /><input n:name=search />
</form>
account23
Člen | 36
+
0
-

@Mysteria a ako ho máš ošetrený v php napríklad ten

<input n:name=search />

aby bol required ?

matopeto
Člen | 395
+
0
-

to ti osetri nette na strane serveru, pokial chces i v browsru tak klasicky html5 <input n:name=search required />

Mysteria
Člen | 797
+
0
-

@account23: Normálně v presenteru $form->addText(‚search‘)->setRequired();

Filip Procházka
Moderator | 4668
+
0
-

Nadefinuješ strukturu

protected function createComponentMyForm()
{
	$form = new Form;

	$form->addText('name');
	$form->addPassword('password');
	$form->addSubmit('send');

	return $form;
}

V šabloně pak jen dáš do příslušných elementů n:name

<form n:name=myForm>
	<input n:name=name>
	<input n:name=password>
	<button n:name=send>Registrovat</button>
</form>

Profit.

Koukni co to vygeneruje za attributy, classy a labely si muzes pridat sam jak uznas za vhodne.

account23
Člen | 36
+
0
-

ahá tak toto už vypadá celkom fajne :) dík moc

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Ještě bych upřesnil, aby to z tohoto vlákna bylo jasné: ->setRequired() v té PHPčkové definici by se určitě mělo volat, atribut required v HTML nestačí, protože je potřebná i serverová validace. Použití makra n:name zároveň elementu doplní required atribut automaticky, takže ho není na input potřeba dopisovat ručně.