Autor Zpráva
nadsenec
Profil *
Ahoj,

chtěl bych se zeptat, jaký je podle vás nejlepší způsob zpracování dat z formuláře v případě, že po zpracování nechci přesměrovávat na další stránku s obsahem, ale na tu stejnou s tím, že formulář bude skryt a zobrazí se hláška o úspěšném / neuspěšném odeslání.

Díky.
abc
Profil
Ahoj,
jednoduše si někam (=URL, session, cookie), že byl formulář zpracován a před výpisem formuláře ověříš.
juriad
Profil
nadsenec:
Po zpracovaní formuláře (odeslaného metodou POST) musíš vždy přesměrovat, ale můžeš přesměrovat na tu samou stránku.
Odesílat formulář metodou GET je správně jen v připadě, že se jedná o akci, která nic nemění (například filtrování).

Poznamenej si informaci o zpracování do SESSION. Pokud očekáváš, že uživatelé budou pracovat s více formuláři najednou (produkty v e-shopu), poznamenej si to do nějakého pole uvnitř SESSION s náhodným klíčem a ten klíč pošleš součástí adresy na kterou budeš přesměrovávat.
sitole
Profil
nadsenec:
Já to dělám tak, že tam jednoduše nacpu IF, který říká, jesliže je obsah formuláře prázdný/není tam co by sisi příl nepustí to dál. :)
FAKTOR2
Profil
$akce = isset($_GET["akce"]);
echo "<form action='".FUSION_SELF."?akce=pridat' method='post'>";

nasleduje formulár ktorý končí tlačidlom pridať 

echo "<tr><td></td><td><input type='submit' name='upravit' value='Pridat' class='button'></td></tr>";
echo "</tbody></table>";

if ($akce == "pridat") {
$ikona = $_POST["ikona"];
$nazov = $_POST["nazov"];
$result = dbquery("INSERT INTO armor_lahke VALUES ('','$nazov', '$ikona','$def', '$typ', '$nazivot', '$namanu', '$naobranu')"); 
$hlaska = "<script>alert(\"Predmet úspešne pridaný!\"); window.location.href=\; </script>"; };
lionel messi
Profil
FAKTOR2:
Čo tým chcel básnik povedať?

1. Význam FUSION_SELF mi uniká, konštantu si nikde nedefinoval.

2. Tabuľku ukončuješ, ale neotváraš.

3. Funkcia dbquery patrí akejsi vo vlákne nikde nespomínanej databázovej knižnici.

4. Písať INSERT bez vymenovania stĺpcov nie je najlepšia praktika (vyhol by si sa napr. zadávaniu '' pre stĺpce s AUTO_INCREMENT).

5. Presmerovanie JavaScriptom sa nehodí.
FAKTOR2
Profil
lionel messi:

Básnik uviedol iba výňatok z kodu ( jáááj , ahááá )
Básnik odkazuje na isset .
2. "nasleduje formulár ktorý končí tlačidlom pridať" ( FAKTOR2 2015 )
4. Aké hodnoty by si chcel odosielať do stĺpca ID ?
6. Netuším ako tvoj komentár napomohol danej téme a dotyčnému.
lionel messi
Profil
FAKTOR2:
4. Aké hodnoty by si chcel odosielať do stĺpca ID ?

Žiadne, ale sme sa nepochopili. Namiesto:

INSERT INTO armor_lahke VALUES ('','$nazov', '$ikona','$def', '$typ', '$nazivot', '$namanu', '$naobranu')

je oveľa lepšie písať:

INSERT INTO armor_lahke(nazov, ikona, def, typ, nazivot, namanu, naobranu) VALUES ('$nazov', '$ikona','$def', '$typ', '$nazivot', '$namanu', '$naobranu')

(viď Psaní INSERT INTO)

Navyše mám pocit, že v posledných 3 stĺpcoch očakávaš čísla, ktoré sa neohraničujú apostrofmi a nikde nevidím escapovanie užívateľského vstupu.

6. Netuším ako tvoj komentár napomohol danej téme a dotyčnému.

Za relevantnú považujem napr. poznámku 5.
FAKTOR2
Profil
lionel messi:
Jáj takto že si definuješ čo chceš vložiť a len tie hodnoty vložíš.
Teda tam tie aspostrofi ani nemusia byť.
escapovanie užívateľského vstupu ? To mu nerozumiem.
lionel messi
Profil
FAKTOR2:
escapovanie užívateľského vstupu ? To mu nerozumiem.

Definitivní příručka escapování
Alphard
Profil
Obecně, skrývání formuláře nemusí být ideální chování. Na určité url má být nějaký obsah, nemá mizet. Jde-li např. o kontaktní formulář, není přece nic špatného na tom po odeslání zobrazit jasnou hlášku, že mail/zpráva byla uložena a zobrazit prázdný formulář pro další požadavek. Má-li se obsah změnit, např. na specifickou stránku s poděkováním, proč nezměnit i url?

Řešení, které popisoval [#3] juriad, se říká „flash messages“, což bych popsal jako stavové zprávy. Pod tímto názvem lze hledat další informace, běžně to implementují frameworky. Mechanismus přenosu zprávy o odeslání formuláře potom není řešen pro konkrétní akce, ale jde o obecnou funkci webu na vyšší úrovni controlleru. Jakákoliv akce může uložit svoji zprávu a v šabloně se vždy kontroluje, jestli je nějaká zpráva ve frontě a případně se zobrazí.

[#6] lionel messi
K tomu smazanému dodatku. Chápu, jak to myslíš a v zásadě souhlasím, ale vždy je pro mě těžké rozhodnout se, jak to řešit. Mám to mazat? Pak to FAKTOR2 nikdo nevysvětlí. Mám to vyčlenit? Možná na to dojde, jestli bude diskuse pokračovat, uvidíme... Mám to tiše smazat za týden a vyčistit původní téma? Pomůže to někomu? Mám to ignorovat? Bývá to nejjednodušší :-)

Jáj takto že si definuješ čo chceš vložiť a len tie hodnoty vložíš.
Ono je to lepší i z pohledu budoucího rozšíření databáze a přehlednosti. Když se použije vhodná databázová vrsta a data se vkládají jako asociativní pole, je i docela pohodlné.
nadsenec
Profil *
Díky všem za reakce.

Alphard: Jde o to, že to je single page prezentace, takže to jinak nejde. O možnosti zobrazit hlášku i formulářem jsem přemýšlel, ale nezdá se mi to "hezké" z hlediska designu webu.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: