Autor Zpráva
TomasRe
Profil
Můžete mi prosím poradit? Ve formuláři se mi načítá do jednotlivých input name=dni.$i, kde $i je od 1 do 5. Při odeslání formuláře pak chci načíst všech 5 proměnných způsobem:

for ($i=1;$i<=5;$i++){$dni.$i.=$_REQUEST["dni".$i]; echo $ponor.$i;}

to však vypíše 10 místo 5 hodnot

Moderátor Alphard: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Alphard
Profil
Snaha číslovat proměnné je naprosto špatná, opravdu, naučte se pracovat s poli.
Formulářové inputy si můžete také pojmenovat jako pole name="den[1]" a pak hned pracovat s polem $_REQUEST['den'].
TomasRe
Profil
Alphard:
Rozumím. To určitě použiji, ale zasekl jsem se již při tvorbě polí. Pro vysvětlení - připojím se k databázi a chci vytvořit pole:

<?php
$vysledek = mysql_query("SELECT * FROM tabulka WHERE cena!=0 ORDER BY poradi");
while ($zaznam = mysql_fetch_array($vysledek)):
$pole = array (1 => $zaznam["id"]);
echo implode(", ", array_keys($pole));
endwhile;
?>

což vypíše 11111
xROAL
Profil
<?php
$pole = array(); // vytvoríme prázdne pole
$vysledek = mysql_query("SELECT * FROM tabulka WHERE cena!=0 ORDER BY poradi");
while ($zaznam = mysql_fetch_array($vysledek)):
$pole[] = $zaznam['id']; // zápis $pole[] znamená "pridaj na koniec pola"
endwhile;
echo implode(", ", array_keys($pole)); // výpis dáme až keď skončí celý cyklus a pole bude naplnené
?>

V pôvodnom zápise si zakaždým vytváral nové pole, ktorého jediným prvkom bol kľúč "1" s hodnotou $znaznam["id"] - resp. si si toto pole stále dookola prepisoval novým.
TomasRe
Profil
xROAL:
Moc děkuju za radu. V cyklu pak vložím <input name="$pole[$i]", kde $i je proměnná podle počtu prvků v poli. Když to pak načítám na další stránce:

$pole = $_REQUEST['pole'];
echo $pole[2];

jak můžu vypsat jednotlivé proměnné? $pole[2] mi přijde jako nesmysl a i tak se to chová.
TomasRe
Profil
Našel jsem nápovědu

foreach($_REQUEST['pole'] as $pole);

ale to hází chybu: Invalid argument supplied for foreach()
lionel messi
Profil
TomasRe:
to hází chybu: Invalid argument supplied for foreach()
Čo vypíše var_dump($_REQUEST['pole']);? Podľa chyby sa zdá, akoby to v tom okamihu nebolo pole, ale iný dátový typ.
TomasRe
Profil
lionel messi:
To vrací NULL :-(. Abych nemátl - pole jsem přejmenoval na "posob" - viz.:

<?php
$posob = array();$text = array();$dni = array();
$vysledek = mysql_query("SELECT * FROM cenik_ponor WHERE cena!=0 ORDER BY poradi");
while ($zaznam = mysql_fetch_array($vysledek)):
$posob[] = "posob".$zaznam['id'];
$text[] = $zaznam['text'];
$dni[] = "dni".$zaznam['id'];
endwhile;

$pocet = mysql_result(mysql_query("SELECT COUNT(*) FROM cenik_ponor WHERE cena!=0"), 0);
settype ($pocet, integer);
$i=0;
for ($j=1;$j<=$pocet;$j++){
echo "<tr><td><strong>".$text[$i]." &nbsp;</strong></td><td class='tab_10'></td><td><strong>osob:</strong> &nbsp;</td><td><select name='".$posob[$i]."'>";
for ($k=0;$k<15;$k++) echo "<option value='".$k."'>".$k."</option>";
echo "</select></td><td class='tab_10'></td><td><strong> dní:</strong> &nbsp;</td><td><select name='".$dni[$i]."'>";
for ($k=1;$k<15;$k++) echo "<option value='".$k."'>".$k."</option>";
echo "</select></td></tr>";
$i++;
}
?>
TomasRe
Profil
Ale chyba musí být v přijmutí dat. Pro zjednodušení jsem udělal stránku:

<form action="test4.php" method="post">
<?php
$pos = array();
$pos = array (1 => "posoa","posob","posoc");

echo "<input type='text' name='".$pos[1]."'>";
echo "<input type='text' name='".$pos[2]."'>";
echo "<input type='text' name='".$pos[3]."'>";
?>
<input type="submit">
</form>

a její zpracování:

<?php
var_dump($_REQUEST['pos']);
$vypis = $_REQUEST['pos'];
echo "<br>dynamicky: ".$vypis[0];
?>

<?
$vypis2 = $_REQUEST['posoa'];
echo "<br>staticky: ".$vypis2;
?>

výpis je pak ale negativní - tedy NULL
Keeehi
Profil
formulář
<form action="test4.php" method="post">
    <input type='text' name="pos[]"'>
    <input type='text' name="pos[]"'>
    <input type='text' name="pos[]"'>
    <input type="submit">
</form>

zpracování
<?php
var_dump($_POST['pos']);

for( $i=0 ; $i < 3 ; ++$i ) {
    echo  "pos ".($i+1).": $_POST[pos][$i]<br>";
}
?>
Kajman
Profil
Navíc v name můžete použít jako klíč toho pole id z databáze...

<?php
$opt_dni=$opt_osob='';
for ($k=0;$k<15;$k++) $opt_osob.="<option value='".$k."'>".$k."</option>";
for ($k=1;$k<15;$k++) $opt_dni.="<option value='".$k."'>".$k."</option>";

$vysledek = mysql_query("SELECT * FROM cenik_ponor WHERE cena!=0 ORDER BY poradi");
while ($zaznam = mysql_fetch_array($vysledek))
{
    echo "<tr><td><strong>".htmlspecialchars($zaznam['text'])." &nbsp;</strong></td><td class='tab_10'></td><td><strong>osob:</strong> &nbsp;</td><td><select name='posob[".$zaznam['id']."]'>";
    echo $opt_osob;
    echo "</select></td><td class='tab_10'></td><td><strong> dní:</strong> &nbsp;</td><td><select name='dni[".$zaznam['id']."]'>";
    echo $opt_dni;
    echo "</select></td></tr>";
}
?>
zpracování
<?php
foreach($_POST['posob'] as $id => $pocet_osob)
{
    if($pocet_osob>0)
    {
        echo "<br>id:$id, Osob:$pocet_osob, dní:".$_POST['dni'][$id];
    }
}
TomasRe
Profil
Keeehi:
Super. Funguje. Mockrát děkuju... Jsem velkým dlužníkem...


Kajman:
Naprosto perfektní, mockrát děkuji. Ještě jeden dotaz - u $opt_osob - je ".=" - jak to funguje? Buď neumím hledat na googlu, nebo to nikdo nepíše...
Kajman
Profil
TomasRe:
http://php.net/manual/en/language.operators.string.php
TomasRe
Profil
Kajman:
Moc děkuju....

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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