| Autor | Zpráva | ||
|---|---|---|---|
| jaspys Profil |
#1 · Zasláno: 9. 12. 2011, 19:40:26
Zdravím. Mám problém jak zkombinovat dva způsoby zpracování checkboxů ve formuláři. Z tadabáze vypisuji řádky záznamů a ke každému přiřadím jeden checkbox
<input type="checkbox" name="oznaceno" value="'.$radek.'">Označit
Poté na konec přiřadím jeden, kterým vše označuji i odznačuji <input type="checkbox" name="CheckAll" onclick="checkAll(document.vysledky.CheckAll, document.vysledky.oznaceno)">Označit vše
volám na to funkci function checkAll(CheckAll,field)
{
if(CheckAll.checked == true)
for (i = 0; i < field.length; i++)
field[i].checked = true ;
else for (i = 0; i < field.length; i++)
field[i].checked = false ;
}Pokud si určité řádky označím a pak je chci předat metodou POST do dalšího okna (kde to zpracuji) a chci zjistit jaké checkboxi byli zatrhlé, tak v $_POST["oznaceno"] je hodnota pouze posledního checkboxu. Pokud je budu ale číslovat, tak mi zase nejde to hromadné označení.
Nesetkali jste se prosím někdo s podobným problémem? Nic vhodného jsem na netu k tomu nenašel... |
||
| Alphard Profil |
#2 · Zasláno: 9. 12. 2011, 20:00:58
Setkali. Name zapište jako pole, klíčem nechť je ideálně id záznamu.
|
||
| jaspys Profil |
#3 · Zasláno: 9. 12. 2011, 20:25:20
ale jak pak právě zapsat tu funkci pro označování checkAll? To se mi s polem nepodařilo rozchodit
|
||
| Alphard Profil |
#4 · Zasláno: 9. 12. 2011, 20:40:04
Tady je sekce PHP, nevím, jestli to js umí nějak vhodně řešit jen na základě nějaké iterace nad name. Ale určitě je možné najít patřičné prvky na základě třídy, pozice v DOMu a podobně.
Jestli chcete, přesunu to do kategorie javascriptu. |
||
| jaspys Profil |
#5 · Zasláno: 9. 12. 2011, 20:43:51
ok, díky za přesunutí
|
||
| Chamurappi Profil |
#6 · Zasláno: 10. 12. 2011, 12:27:58
Reaguji na jaspyse:
Z hlediska HTML a DOMu hranaté závorky v name vůbec nic neznamenají, různá name se berou jako různá name. Můžeš si sestavovat postupně jednotlivé názvy políček jako řetězec ve formátu "oznaceno[" + i + "]" a projet všechny i, dokud nenarazíš na neexistující prvek.
Reaguji na Alpharda: „určitě je možné najít patřičné prvky na základě třídy“ Neefektivní, navíc musíš řešit nekompatibility prohlížečů. Hierarchie jmen je mnohem pohodlnější. „Name zapište jako pole“ Neexistuje v PHP nějaký snadný způsob, jak se dostat k hodnotám se stejným name? Na server se totiž normálně odesílají. (Jiné jazyky to většinou umí.)
Co by se dělo, kdyby se použilo několikanásobně name="oznaceno[]", tj. bez konkrétního indexu? Nevzniklo by v PHP pole?
|
||
| jenikkozak Profil |
#7 · Zasláno: 11. 12. 2011, 11:19:45
Chamurappi:
Nikdo zkušenější neodpověděl, a tak se osměluji. :-) „Co by se dělo, kdyby se použilo několikanásobně name="oznaceno[]", tj. bez konkrétního indexu? Nevzniklo by v PHP pole?“ PHP vytváří při při příjmu dat z formuláře superglobální proměnnou - asociativní pole _POST (při použití metody post). Při tom se rozsekají data z postu, parametry a hodnoty (neznám terminologii HTTP požadavků) se použijí jako klíč a hodnota tohoto pole. (Tedy atribut name z položky formuláře se stane klíčem pole.) Tento proces je ale tak naivní, že položky pole se stejným klíčem se bezstarostně přepíšou. Použije-li se několikanásobně name="oznaceno[]", tedy name končící na "[]", vznikne v poli _POST indexované pole. (Indexem je pořadí, ve kterém parametry dorazí.)
Také je dobré myslet na to, že PHP nehledí na typy proměnných. Budu-li ale mít ve formuláři 3 name a první budou připravené pro indexované pole ( oznaceno[], oznaceno[] a oznaceno), z těch prvních sice vznikne indexované pole se dvěma hodnotami, ale přepíše se třetí hodnotou, která bude pouze položkou pole _POST (takže v tomto poli bude jen jedna položka). Přijdou-li parametry v pořadí oznaceno[], oznaceno, oznaceno[], pak v PHP vznikne v _POST indexované pole, přepíše se na položku _POST, která se přepíše na indexované pole. (Takže v poli _POST bude indexované pole s jedinou položkou.)
Index v indexovaném poli se dá určit pomocí čísla v hranatých závorkách atributu name položky formuláře. (Např. oznaceno[3].) Při tvorbě pole _POST však nezáleží na indexech, ale na pořadí, ve kterém parametry přijdou. Z parametrů v pořadí oznaceno[3], oznaceno, oznaceno[2] přežije jen poslední, ačkoliv má index nižší než oznaceno[3].
Stejným způsobem vzniká také pole _GET při použití metody get. V takovémto případě se dá (méně pohodlnější cestou, ale přesto velice snadno) vytáhnout z superglobální _SERVER celý seznam parametrů a hodnot, rozřezat se na jednotlivé části a nakládat s ním podle libosti. U metody post je situace komplikovanější v tom, že se tento seznam v superglobální _SERVER nenachází. (Sehnat se jistě dá, ale ani nevím kde.) Pokud se tedy počítá s tím, že bude formulář posílán PHP skriptu, je lepší použít různá name nebo name končící na dvojici hranatých závorek. Jinak autor přijde celý smutný do kategorie PHP a bude zkoumat, co si má počít, a stejně mu někdo poradí, aby atributy v HTML přepsal. |
||
| Tori Profil |
#8 · Zasláno: 11. 12. 2011, 13:35:56
jenikkozak:
„Sehnat se jistě dá, ale ani nevím kde.)“ Spolehlivě se dá číst z php://input: urldecode(file_get_contents('php://input'));, pak explodovat podle & (parse_str() se nedá použít, dochází k přepisování jako v $_POST). Pak ještě v závislosti na nastavení i z $HTTP_RAW_POST_DATA (taky jako řetězec).
|
||
|
Časová prodleva: 14 let
|
|||
0