Autor Zpráva
Fanda
Profil *
Mám obyčejný formulář a v něm jako name="pole[]" Zadám do toho formuláře např. 4 hodnoty a odešlu. Na další stránce ho zpracuji jako

$pole[]= $_POST ['pole[]']

Když se zeptám: echo count($pole); Vypíše to 5, i když jsem ve skutečnosti odeslal jen 4 hodnoty.

Zkoušel jsem to pole projet i foreach ($pole as $bla) { echo $bla;} a to mi vypsalo sprvávně jen ty 4 hodnoty, které jsem do něj zapsal. Nevíte, kde dělám chybu?
Peca
Profil
Zkus print_r($pole); Třeba tam jsou nějaké prázdné hodnoty, které se nevypisují.
Fanda
Profil *
echo count($pole);
echo print_r($pole);

5
Array ( [0] => Vojta [1] => Fanda [2] => Andre [3] => Hynek [4] => )

Mám tomu rozumět tak, že ta pátá hodnota pole existuje, ale je prázdná? Pokud ano, jak se jí zbavím a jak to, že se mi tam vůbec objevila?
Pro doplnění tady je ta část mého formuláře do něhož jsem zadal ta 4 jména.

for ($i=1; $i<=4; ++$i)
{
echo "<tr>
<td>Jméno č.",$i,":</td>
<td><input type="text" name="pole[]" size="20" maxlength="15" />
</td>
</tr>";
}
D1ce
Profil
Fanda
Někde to páte pole bude skryté. Tento kód je naprosto korektní:

echo '<pre>';
var_dump(count($_POST['pole']));
var_dump($_POST['pole']);
echo '</pre>';
?>
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post" name="nazev">
<table>
<?php
for ($i = 1; $i != 5; ++$i) {
?>
<tr>
<td> Jméno č.
<?php echo $i; ?>
:</td>
<td>
<input type="text" name="pole[]" size="20" maxlength="15" /></td>
</tr>
<?php
}
?>
</table>
<input type="submit" name="sub" value="odesli">
</form>
D1ce
Profil
Fanda
Jinak pokud neobjevíte, kde máte to skryté pole mohlo by pomoct něco ve stylu:

/**
* Zamerne jsem nepouzil cyklus s unset, takhle mi to
* pripada mnohem elegantnejsi
*/
if(count($pole) > 4) {
$pole = array($pole[0], $pole[1], $pole[2], $pole[3]);
}
Rellik
Profil
Pole se vzdy indexuje od 0 takze by melo stacit zmenit radek $pole[]= $_POST ['pole[]'] na

$pole[1]= $_POST ['pole[]']

pak uz by to nemelo pocitat od 0 ale od 1...
jiank to pocita od 0 do 4 coz je celkem 5.
Fanda
Profil *
Na jednu stranu by to všechno vysvětlovalo, ale na druhou mi přijde logičtější, že když mám pole o čtyřech hodnotách, tak se bude počítat od 0 do 3.
Jinak jsem zkoušel ty případné změny, které navrhoval D1ce. Elegantní řešení s podmínkou nemělo žádný účinek. Ten var_dump mi vypsal vždy něco jako string(5) a hodnotu pole.
Také sem zjistil, že mi to dělají všechny formuláře, kam zadávám hodnoty jako pole. Pokaždé, když dám count, vypíše se číslo o jednotku vyšší.

ps: Rád bych se také zeptal, co znamená tenhle zápis v action u formuláře: <?php echo $_SERVER['REQUEST_URI']; ?>
Rellik
Profil
Myslim ze sem vyresil tvuj problem takto:

<?php

echo '<pre>';
var_dump(count($_POST['pole']));
var_dump($_POST['pole']);
echo '</pre>';
?>
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post" name="nazev">
<table>
<?php
for ($i=0; $i<=3; ++$i)
{
$cislo = $i+1;
echo '<tr>
<td>Jméno č.'.$cislo.':</td>
<td><input type="text" name="pole[]" size="20" maxlength="15" />
</td>
</tr>';
}
?>
</table>
<input type="submit" name="sub" value="odesli">
</form>

Je to odskousene a funguje to... ;)
A tady toto <?php echo $_SERVER['REQUEST_URI']; ?> vypise jen cestu k souboru ktery je zrovna nacteny a v kterem se to ma zpracovat...
D1ce
Profil
Fanda
Jestli tohle nevypíše čtyřku, tak už vážně začnu věřit na duchy:

/**
* Zamerne jsem nepouzil cyklus s unset, takhle mi to
* pripada mnohem elegantnejsi
*/
if(count($pole) > 4) {
$pole = array($pole[0], $pole[1], $pole[2], $pole[3]);
echo '<pre>';
var_dump($pole, count($pole));
echo '</pre>';
}

Btw1: nebyl n8hodou dump před tím přiřazením?
Btw2: Místo $pole[]= $_POST ['pole[]']; bych dal $pole = $_POST['pole']; a mělo by to fungovat, přetože to zavání Cargo cult programmingem.
peta
Profil
Fanda
echo count($pole);
echo print_r($pole);
5
Array ( [0] => Vojta [1] => Fanda [2] => Andre [3] => Hynek [4] => )
To take znamena:
Array (
[0] => "Vojta"
[1] => "Fanda"
[2] => "Andre"
[3] => "Hynek"
[4] => "")
A pocet polozek je teda 5, count spravne hlasi 5.

Jinak teda cteni hodnot z postu provadin
$x = isset($POST["hodnota"])?$POST["hodnota"]:"";
Nespoleham na globalni promenne, ze to bude v $hodnota;
Takze si muzes jako prvni vypsat $_POST a get
echo "<hr>POST = "; print_r($_POST);
echo "<hr>GET = "; print_r($_GET);

Jo, a co kdybys ukazal ten kod?
aaa.php -> aaa.php.txt a sup na web, odkaz do diskuze :)
Toto téma je uzamčeno. Odpověď nelze zaslat.