Autor Zpráva
Bill
Profil *
Mame toto: soubor.php?co=promena1
Jde nejak udelat (mozna to bude znit jako nesmysl) aby se do $co priradilo vice promenych? Asi to nepujde, co?
Michalek
Profil
nevim, mozna ze se to poradi priradit do pole
soubor.php?co[]=promenna1&co[]=promenna2

v php by se to pak mohlo volat $_GET[co][1] a $_GET[co][2] - ale nejsem si jist
DoubleThink
Profil *
nebo posílat:

soubor.php?co=hodnota1|hodnota2|hodnota3|

v PHP pak použít fci explode()
llook
Profil
Michalek: Tohle funguje, dokonce je o tom zmínka v manuálu.
Indexy pole bys měl vždycky uzavírat do apostrofů nebo uvozovek - $_GET['co'][1] - protože jinak to PHP pokládá za konstantu a pokud by někde byla definována konstanta 'co', tak by PHP použilo hodnotu té konstanty. Navíc při užitečné volbě error_reporting = E_ALL v php.ini to otravuje chybami.
Yuhů
Profil
llooku, můžeš prosím rozvinout, jak potom vypadá ta url?

soubor.php?co=prvni_hodnota&co=druha_hodnota

Takhle, nebo jinak? A nečísluje se to pole potom od nuly?
llook
Profil
soubor.php?co[]=prvni_hodnota&co[]=druha_hodnota
Správně by to mělo být URL kódovaný:
soubor.php?co%5B%5D=prvni_hodnota&co%5B%5D=druha_hodnota
Čísluje se to pak od nuly, je to jako kdybys v PHP napsal:
$_GET['co'][] = 'prvni_hodnota'
$_GET['co'][] = 'druha_hodnota'

Občas se to používá ve formulářích, třeba u víceřádkového výběru:
<select multiple="multiple">
<option name="co[]" value="prvni_hodnota">prvni_hodnota</option>
<option name="co[]" value="druha_hodnota">druha_hodnota</option>
</select>

Sice to není validní, protože v name nemůžou být znaky jako '[' a ']', ale funguje to.
V PHP manuálu to je schovaný ve FAQ: http://www.php.net/manual/cs/faq.html.php#faq.html.arrays
Yuhů
Profil
hmmm, to jsem fakt netušil, díky!
Zeli
Profil *
Taktez diky!
llook
Profil
Pardon, v tom příkladu s multiselectem mám chybu. Správně je to takhle:

<select multiple="multiple" name="co[]">
<option value="prvni_hodnota">prvni_hodnota</option>
<option value="druha_hodnota">druha_hodnota</option>
</select>

V option totiž není atribut name, což mi připadá ze strany W3C kapku nedomyšlený. Jinak by se to dalo dělat stejně jako u checkboxů.

Lze to řešit buďto složitěji parsováním query stringu, nebo jednodušeji (z pohledu HTML invalidně, ale funkčně) těmi hranatými závorkami.
Já osobně vícenásobný výběr nepoužívám, protože jsem přesvědčen, že uživatelé na něj nejsou zvyklý a ne vždy ho umí ovládat (vysvětlete BFU něco jako ctrl-klik). Je lepší nahradit ho checkboxema, zvlášť při více hodnotách.
Lemur
Profil *
Lze to udělat i jinak a validně - pomocí funkce serialize() se z čehokoliv udělá řetězec při zachování struktury (klidně to může být i vícerozměrné pole) a výsledek se zakóduje uuencoduje pomocí base64_encode(). Pokud je to moc velké, jde to zmenšit tak, že se mezivýsledek zkomprimuje. Výsledné funkce jsou tedy:

function var_encode($var)
{
return(base64_encode(gzdeflate(serialize($var))));
}

function var_decode($var)
{
return(@unserialize(@gzinflate(@base64_decode($var))));
}

Vypadá to sice šíleně, ale dá se tím poslat skoro všechno (mimo resourců), jediná nevýhoda je při ladění - bez dekódování je to nečitelné.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0