Autor Zpráva
joe
Profil
Ahoj,

na stránkách ... jsem si náhodou všimnul, že je formulář, kde mají inputy se stejným názvem (name). Jde pomocí nějakého skriptu ty inputy odlišit.
Jejich kód je
<input type="radio" name="jmeno" value="hodnota" id="idecko">
<input type="radio" name="jmeno" value="hodnota" id="idecko">
Znám jen způsob odlišení pomocí pole
<input type="radio" name="jmeno[]" value="hodnota" id="idecko">
<input type="radio" name="jmeno[]" value="hodnota" id="idecko">


Tak nějak nechápu jak ty hodnoty pak zjistí?
Hugo
Profil
IMHO ne, pokud ti jde o PHP.
Joker
Profil
joe
Jaký smysl má mít na stránce úplně stejná zaškrtávátka se stejnými hodnotami?

Pokud mají alespoň různé hodnoty, dá se to odlišit podle toho, jaká hodnota v tom prvku bude.
Jinak se jim dají přiřadit různá IDčka a rozlišit to Javascriptem (včetně toho, že ten Javascript by mohl hodnoty kopírovat třeba do cookie nebo skrytého pole)
joe
Profil
Joker
Žádný smysl to nemá, jenom mě překvapilo, že to jde. Úprava Javascriptem mě taky napadla, ale tak to určitě není...

Hugo
Proto jsem to dal sem :-)

A není možný, že když se nepoužije PHP, že to je pole automaticky, když jsou stejný položky? Ale všude jsem četl jen o poli...
bukaj
Profil
joe
Radio buttony („přepínátka“) jsou právě od toho, aby tam bylo možno poslat jenom jednu hodnotu z nějakého výčtu ;o) Jejich použití je podobné jako <select>u – u něj taky většinou chceme, aby byla vybrána jedna hodnota (i když se dá samozřejmě nastavit možnost vybrání více hodnot; osobně jsem ji ale použil jen málokdy) –, ale na odpovědi typu ano/ne, ankety apod. se <select> nehodí – je lepší jasně vidět, co za možnosti jsou; navíc se mi zdá použití <select>u pro tyto případy nepřirozené.
DoubleThink
Profil *
IMHO ne, pokud ti jde o PHP.
Ale ano.

Pokud jde o client-side, prohlížeč pošle všechny hodnoty za sebou. PHP ale při parsování POST/GET dat samozřejmě stejné klíče přepíše.
Takže u GET je to jasné - vytáhne se QUERY_STRING a vyparsuje ručně.
Ekvivalentně pak u POST existuje proměnná $HTTP_RAW_POST_DATA (viz PHP core: always_populate_raw_post_data).
joe
Profil
bukaj
Sakra, moje chyba :-) Myslel jsem třeba i u checkboxů, ale stejně, když by to byly i ty radio buttony, tak když by jako název bylo pole, tak z POSTu dostanu taky jenom jeden výsledek s klíčem 0 v tom poli.

DoubleThink
Zajímavé, díky, zase chytřejší :-) Jen by mě zajímalo k čemu to je dobré, za použití jen jednoho názvu, kromě toho, že s tím je pak trošku větší práce to dostat.
bukaj
Profil
joe
ale stejně, když by to byly i ty radio buttony, tak když by jako název bylo pole, tak z POSTu dostanu taky jenom jeden výsledek s klíčem 0 v tom poli.
Ale u toho právě u radio buttonů jde :o) Z více možností vybrat jednu jedinnou. Tam je pole naprosto zbytečné.

Myslel jsem třeba i u checkboxů
Checkboxy jsou zase od toho, aby uživatel mohl „zaškrtnout“ více možností. A na více možností je logické, že musíš použít pole. Přesně, jak píše DoubleThink, PHP nemůže vědět, že když mu v QUERY_STRINGu dorazí kategorie=foo&kategorie=bar, že to pochází z několika checkboxů a že by mělo proto v $_GET na indexu katgorie vytvořit pole a do něj dát položky foo a bar. Resp. PHP QUERY_STRING „čte“ zleva doprava, takže nejdříve si oddělí jednotlivé části pomocí ampresandu (&), pak každou položku nově vzniklého pole rozdělí podle rovnítka, kdy první část je klíč a druhá hodnota, takže nejdříve indexu kategorie nastaví hodnotu foo, ale pak jde dál a na stejném indexu je podle QUERY_STRINGU i hodnota bar, takže foo jde do pryč a je tam bar.

Jen by mě zajímalo k čemu to je dobré, za použití jen jednoho názvu
U radio buttonů to jinak ani nejde – prohlížeč by pak nepoznal, které spolu souvisí, takže bys jich mohl vybrat víc. U checkboxů stejně jako u multiple <select>u se používá syntaxe pole a pak ti do aplikace dorazí pole možností vybraných uživatelem. Pokud by jsi použil několik názvů, zjišťování, co bylo a nebylo zaškrtnuto/vybráno by nebyla až taková sranda.

kromě toho, že s tím je pak trošku větší práce to dostat
Právě naopak – práce je s tím míň. (Pokud to použiješ správně, samozřejmě :o))
joe
Profil
bukaj
Ale u toho právě u radio buttonů jde :o)
Ja vím, že u radio buttonů se očekává, že je jen jedna možnost. Napsal jsem to pak proto, abysme si rozumněli. Takže je jedno jestli skupinu radio buttonů pojmenuju "nazev" nebo "nazev[]", i když druhý případ je zbytečný, funguje to stejně a to jsem tim chtěl napsat. Koukni na čas, kdy jsem zakládal diskuzi :-)

A na více možností je logické, že musíš použít pole.
No právě, že pole jako název použít nemusíš, jak píše DoubleThink ;-) a o to mi šlo. To co popisuješ je v případě posílání metodou get a ne post. Mě překvapilo právě to, že u nějaké skupiny mají jako name nastavený "nazev" a ne "nazev[]", protože s tím polem by se podle mě pracovalo jednodušeji, ale ještě jsem $HTTP_RAW_POST_DATA nezkoušel.

Pokud by jsi použil několik názvů, zjišťování, co bylo a nebylo zaškrtnuto/vybráno by nebyla až taková sranda.
Byla, nic na tom není, ale není důvod to tak dělat :-)

práce je s tím míň
Předpokládám, že jsi myslel s polem, tedy když jako name napíšu "nazev[]" ;-)
bukaj
Profil
joe
Koukni na čas, kdy jsem zakládal diskuzi
Áh, noční seance :o)

No právě, že pole jako název použít nemusíš
Dobře, použil jsem špatné sloveso – tak tedy měl bys ;o)

To co popisuješ je v případě posílání metodou get a ne post
Stejně to ale platí i pro POST. Stejný řetězec, který se by se při použití metody GET připojil na konec URI, se akorát při POST uloží do těla požadavku (a v PHP by tedy měl jít získat pomocí $HTTP_RAW_POST_DATA).

Předpokládám, že jsi myslel s polem, tedy když jako name napíšu "nazev[]" ;-)
Ne, myslel jsem tím, že pokud budeš používat syntax pole tam, kde se… by se používat měla – tedy v případech, kdy potřebuješ poslat více věcí pod jedním indexem – a skalární syntax používat tam, kde chceš indexu přiřadit jednu věc, pak bude práce míň. Neboli je podle mě blbost užívat syntax pole u skupiny radio buttonů a skalární syntax u skupiny spolu souvisejících checkboxů.
joe
Profil
bukaj
Ok, tak už víme co jsme tím každý chtěl napsat, skončíme to :-)
Neboli je podle mě blbost užívat syntax pole u skupiny radio buttonů a skalární syntax u skupiny spolu souvisejících checkboxů.
No mě se to taky nezdá :-) Ale teď jsem to úplně náhodou objevil i na lidech.cz když se přihlásíš na seznamu na lidech, koukneš do nastavení profilu a pak kódu ;-) ale tam to zpracovávají nějakým cgi skriptem, to jsem ještě nedělal a snad ani dělat nebudu :-)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0