Ahoj, chtěl bych se zeptat. Lze použít foreach a while v jednom?
Nějak takto:
foreach(...)
{
while(...)
{
...
}
}
Díky předem za odpovědi
foreach($_SESSION["polozky"] as $ip => $polozky)
{
while($kosikd = mysql_fetch_assoc($kosik))
{
$_POST["pnazev"] = $kosikd["pnazev"];
echo "Název: ".$_POST["pnazev"]." Index pole: ".$ip."<br />";
}
}
Index pole mi to píše všude nulu a nevím proč ...
mimochodem proc mas uvnitr ten druhej cyklus, kdyz neni nijak vazanej na $ip ani na $polozky?
kdyz ti to vrati treba milion polozek tak pro kazdou polozku v kosiku to vypises milionkrat... mozna tam sou i vetsi cisla jen ses k nim nedostal (ze si neodskroloval) nebo tam mas jednu polozku
#8 KIIV
Tak ještě takto:
$kosik = @mysql_query("SELECT pnazev FROM produkty WHERE pid IN ('".implode("','",$_SESSION["polozky"])."')");
foreach($_SESSION["polozky"] as $ip => $polozky)
{
while($kosikd = mysql_fetch_assoc($kosik))
{
$_POST["pnazev"] = $kosikd["pnazev"];
echo "Název: ".$_POST["pnazev"]." <br /> Index pole: ".$ip."<br /><br />";
}
}
už chápeš? Potřebuju dostat další info z db na základě hodnoty v SESSIONS a zároveň potřebuju index té položky, abych to mohl mazat ...
a jo uz sem pochopil presne... proc tam mas furt nulu... mas treba 10 polozek .. to ti vrati select... a tech deset polozek prochazis i ze session... takze
foreach -> $ip = 0 while fetch_assoc -> jeden radek vypise se ip = 0
while fetch_assoc -> druhy radek vypise se ip = 0
....
while posledni radek vypise se ip = 0
foreach -> $ip = 1 while - neni co nacist... uz se nacetlo pred tim
to same pro vsechny dalsi
$kosik = @mysql_query("SELECT pnazev FROM produkty WHERE pid IN ('".implode("','",$_SESSION["polozky"])."')");
foreach($_SESSION["polozky"] as $ip => $polozky) {
echo "zpracovavam index pole: $ip\n";
while($kosikd = mysql_fetch_assoc($kosik)) {
echo "zpracovavam polozku z databaze: ".$kosikd["pnazev"]."\n";
$_POST["pnazev"] = $kosikd["pnazev"];
//echo "Název: ".$_POST["pnazev"]." <br /> Index pole: ".$ip."<br /><br />";
}
}
pro lepsi nazornost.. neni to opraveny kod!!
muzes si ty data z databaze ulozit do pole podle pid jako indexu... (snad tam aspon nemas duplicity :D)
a pak jen indexovat $data[$polozky]
nebo horsi verze je pro kazdou polozku vytahnout data z databaze zvlast
timhle tvrdis ze uvnitr $_SESSION["polozky"] je seznam pidcek z databaze : pid IN ('".implode("','",$_SESSION["polozky"])."')
a ve foreach mas $ip => $polozky (resp spise $polozka) takze v $polozky MUSI byt nejaky PID jinak ti nemuze z toho databazovyho dotazu nic vylezt
proc tedy nemuzes udelat:
$kosik = @mysql_query("SELECT pid, pnazev FROM produkty WHERE pid IN ('".implode("','",$_SESSION["polozky"])."')");
$nazvy = array();
while($kosikd = mysql_fetch_assoc($kosik)) {
$nazvy[$kosikd['pid']] = $kosikd['pnazev'];
}
foreach($_SESSION["polozky"] as $ip => $polozka) {
echo "Název: ".$nazvy[$polozka]." <br /> Index pole: $ip <br /><br />\n";
}
$nazvy[$kosikd['pid']] = $kosikd;
$nazvy[$polozka]['pnazev'] (proste cokoliv, co jsi vyjmenoval v selectu .. klidne si to v selectu muzes i pojmenovat nejak jinak : SELECT pnazev as nazev, pid as id, dalsi as neco FROM ..... )
ne tak jak si napsal ale takto:
$nazvy[$kosikd['pid']]['pnazev'] = $kosikd['pnazev'];
$nazvy[$kosikd['pid']]['cena'] = $kosikd['cena''];
nebo cele to pole priradit najednou:
$nazvy[$kosikd['pid']] = $kosikd;
tak muzes mit $nazvy[...], $ceny[...] kdyz se ztracis v poli poli... kdyby neco tak na vypis struktury je pres print_r($nazvy) --- tam je videt vsechny polozky a pod jake klice patri a tak... (kdyz to hodis do tagu <pre> nebo kouknes primo na zdrojovy kod stranky aby nebylo zniceny formatovani)
jak sem naznacil uz nekolikrat:
echo "Název: ".$info[$polozka]['pnazev']." Cena: ".$info[$polozka]['cena']."";
nebo:
$pol_info = $info[$polozka];
echo "Název: ".$pol_info['pnazev']." Cena: ".$pol_info['cena']."";
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku