Mám formulář:
<input type="checkbox" name="promena[]">
Potřebuji ji dát jako "checked" v závislosti na tom, zdali byla poslána jako $_GET[]. Jenže jak na to? Jak se v poli $_GET[] objeví pole promena[0]? Třeba jako dvourozměrné pole $_GET[promena][0], nebo jak?
To nějak vůbec nefunguje, když dám:
$array = $_GET['promena'];
echo $array;
vypíše: array
Když:
foreach ($array as $key => $value) {
echo "Klíč: $key; Hodnota: $value<br>\n";
}
Nevypíše nic.
Jak je to možný, že tam to pole je, ale vlastně není?
No jo je to tak: Není to možný :o)
Já to přesměrovával ještě přes jednu stránku a tam jsem si omylem z té proměnné v query-stringu udělal řetězec "array", který se mi pak zobrazil v adresním řádku. Jinými slovy funkce Http_Build_Query pro PHP4 po úpravě má být:
<?php
function Http_Build_Query_4($array) {
foreach ($array as $key => $val) {
if (Is_Array($array[$key])) {
foreach ($array[$key] as $akey => $aval) {
$get_string .= $key."[".$akey."]=".URLEncode(StripSlashes($aval))."&";
}
}
elseif (!Empty($val)) {
$get_string .= $key."=".URLEncode(StripSlashes($val))."&";
}
}
$get_string = Ereg_Replace("^&*", "", $get_string);
$get_string = Ereg_Replace("&*$", "", $get_string);
return $get_string;
}
?>
Kdybyste to někdo potřeboval. Tak a konec monologu :o)
zkus misto $array = $_GET['promena']; dat $array = $_POST['promena']; a uvidis ;)
Jestli jsem to pochopil spravne, mas namysli neco takoveho (princip)?
<form method="post" enctype="multipart/form-data" action="test.php">
1 <input type="checkbox" name="promenna[]" value="1" <?php
if (isset($_POST['promenna']) AND in_array("1", $_POST['promenna'])) echo "checked='checked' ";
?>/><br />
2 <input type="checkbox" name="promenna[]" value="2" <?php
if (isset($_POST['promenna']) AND in_array("2", $_POST['promenna'])) echo "checked='checked' ";
?>/><br />
3 <input type="checkbox" name="promenna[]" value="3" <?php
if (isset($_POST['promenna']) AND in_array("3", $_POST['promenna'])) echo "checked='checked' ";
?>/><br />
4 <input type="checkbox" name="promenna[]" value="4" <?php
if (isset($_POST['promenna']) AND in_array("4", $_POST['promenna'])) echo "checked='checked' ";
?>/><br />
5 <input type="checkbox" name="promenna[]" value="5" <?php
if (isset($_POST['promenna']) AND in_array("5", $_POST['promenna'])) echo "checked='checked' ";
?>/><br />
<input type="submit" />
</form>
<pre>
<?php
if (isset($_POST['promenna'])) print_r($_POST['promenna']);
?>
</pre>
"zkus misto $array = $_GET['promena']; dat $array = $_POST['promena']; a uvidis ;)"
to je snad jedno jakou použiju metodu.
myslis? no tak pokud odesilas formular jako GET, coz bych snad nikdy nepochopil, tak tam samozrejme nech $_GET. Ale jestli si myslis, ze je to uplne jedno, tak te upozornuju, ze fakt neni. Kdyby to bylo jedno, tak existuje jen jedna metoda, ne dve.
Šmarjá, myslím jedno z hlediska našeho problému - tedy jak je dostupná odeslaná proměnná typu pole ve zpracovatelském skriptu. Není principielní rozdíl v:
$array = $_GET['promena'];
echo $array[0];
a v:
$array = $_POST['promena'];
echo $array[0];
Mě šlo jen o to, jak to napsat jedním řádkem, ale asi to nelze, protože v tom globálním poli je další pole a v něm až jsou ty data. V globálním poli tedy přímo dosažitelné nejsou.
Navíc těžko můžu předávat něco zpátky do formuláře skriptem metodou post. Alespoň tady na wz to nejde. Nebo ty to umíš?
>Navíc těžko můžu předávat něco zpátky do formuláře skriptem metodou post. Alespoň tady na wz to nejde. Nebo ty to umíš?
ne, to neumim, ale predpokladam, ze hlavni cesta dat je z formulare do skriptu, tedy POST, a pote ty post data vratis zpatky do toho formulare, ale V RAMCI jednoho souboru, tzn. neco na zpusob toho, co jsem napsal [31. 01. 2006 00:41]. Nevim, proc by mela ta data pendlovat mezi formularem, skriptem, na ktery data odesilam a pak jeste jinym souborem, ktery je bez zpracovani (napr. ulozeni) "pouze" zobrazi...
Btw. neni problem pouzit $_POST['promenna'][0], pokud obsahem promenne je pole. (nezalezi na metode).
<HTML>tak mi pripada, ze prave nekdo objevil dvou-rozmerny pole, nevi co s nim a premysli moc nahlas?</HTML>
To je jednoduchý, je to přesně jak říkáš, formulář odešle, skript zpracuje, když zjistí chybu předá chybové stránce, která zahlásí tu chybu a přesměruje zpátky na formulář, kterému předá data, aby nebyl prázdný. Každá věc má vlastní soubor, proto si musejí ta data předávat. Dělají to metodou post pro nová data a get pro data chybná. Kapišto? Ale to mluvíme ouplně o něčem jiném než bylo téma. To téma bylo právě o tom dvourozměrném poli a teda proč nefunguje $_POST['promenna'][0]. Podle toho co tu říkáte by to fungovat mělo a chyba je někde jinde.