Predavani value do formulare ze session

adferg
Člen | 31
+
0
-

Ahoj, resim takovy pro me ne uplne trivialni problem. Mam jednoduchou stranku s formularem o nekolika textovych inputech. Ten formular ma uzivatel vyplnovat opakovane a cilem je, aby byla nektera pole po opakovanem nacteni formulare uz predvyplnena (typicky ta, ktera jsou stale stejna, jako e-mail).

Takze klasicky mam v presenteru nahozeny formular a sablona mi ho vykresluje, model nasledne uklada do databaze – potud vse ok.
Vlozit data z prvniho odeslaneho formulare do session se mi podarilo, nicmene:

Zkusil jsem si dat do formulare k poli e-mail

->setHtmlAttribute('placeholder', $this->getSession('mySection')->email)

a to je OK, ale

->setHtmlAttribute('value', $this->getSession('mySection')->email)

uz mi nezobrazuje v poli nic.

Zaroven nevim, jak tam dat podminku, aby se pri prvnim odesilani formulare, kdy v session jeste nejsou zadna data, zobrazil nejaky predem dany placeholder typu „e-mail“ a hodnota atribut value nebyl dany.

Omlouvam se, snad je takhle pochopitelny o co mi jde. Budu vdecny za radu/pomoc. Diky

Ondřej Kubíček
Člen | 494
+
0
-

výchozí hodnoty se nastavuje přes setDefaultValue viz dokumentace https://doc.nette.org/…in-presenter#…

adferg
Člen | 31
+
0
-

Ondřej Kubíček napsal(a):

výchozí hodnoty se nastavuje přes setDefaultValue viz dokumentace https://doc.nette.org/…in-presenter#…

Aha, pravda, pravda. To funguje. Dekuju! Jeste se ale zeptam, jak by bylo mozne vyresit tu podminku… tedy pokud v session je udaj o e-mailu, zobrazit jej, pokud tam neni, dat do pole placeholder nastaveny v sethtmlattribute. Dekuji

David Grudl
Nette Core | 8239
+
+3
-

Dávat email do placeholderu je nesmysl, zmate to uživatele.

adferg
Člen | 31
+
0
-

No, z nejakeho duvodu, to tak ma byt. Ale mozna jsem jen nedokazal spravne popsat pozadovanou funkcionalitu – jde o to, aby pole ktere uz jednou uzivatel vyplnil, nemusel vyplnovat podruhe, protoze vstup by se nemel (ale muze) menit.

Vyresil jsem to asi ne uplne optimalne tim, ze jsem pridal placeholder do sablony a az kdyz je v session hodnota, tak se prepise value.

S mym experimentovanim se session ale vyvstal novy problem pri nasazovani na produkci. V error logu jest psano:

PHP Warning: session_id(): Cannot change session id when headers already sent in

Myslel jsem, ze pomuze promazat cache aplikace, ale ani to, ani otevreni v anonymnim okne nepomaha. Poradite prosim?

David Grudl
Nette Core | 8239
+
+2
-

Pokud už to dříve vyplnil, tak to nastav jako výchozí hodnotu (setDefaultValue) a kašli na placeholder, to je skoro vždycky zlo.

dakur
Člen | 493
+
+1
-

@adferg Na placeholder žádný if nepotřebuješ, protože pokud field obsahuje default value, tak se ani placeholder neukáže.

$field
  ->setDefaultValue(this->getSession('mySection')->email)
  ->setHtmlAttribute('placeholder', 'jan@novak.cz');


PHP Warning: session_id(): Cannot change session id when headers already sent in

Kde přesně k tý session přistupuješ? Vypadá to, že voláš getSession() až po tom, co se začala renderovat nějaká šablona. Anebo máš někde na začátku některého souboru nějaký tisknutelný znak (např. mezera před <?php).

Editoval dakur (21. 4. 2021 9:29)