Cyklus foreach a while – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Cyklus foreach a while – PHP – Fórum – Programujte.comCyklus foreach a while – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Forest0
Stálý člen
8. 6. 2013   #1
-
0
-

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   

Nahlásit jako SPAM
IP: 92.62.230.–
Row0
Stálý člen
8. 6. 2013   #2
-
0
-

Ano

Nahlásit jako SPAM
IP: 90.176.7.–
Forest0
Stálý člen
8. 6. 2013   #3
-
0
-

#2 Row
Ono mi to totiž jaksi nefunguje :-D

Nahlásit jako SPAM
IP: 92.62.230.–
KIIV
~ Moderátor
+43
God of flame
8. 6. 2013   #4
-
0
-

to, proc to nefunguje, bude v tech castech co mas vyteckovany... napriklad menis to pole, nad kterym delas foreach

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Row0
Stálý člen
8. 6. 2013   #5
-
0
-

tak sem hod cely kod

Nahlásit jako SPAM
IP: 90.176.7.–
Forest0
Stálý člen
8. 6. 2013   #6
-
0
-

   

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č ...

Nahlásit jako SPAM
IP: 92.62.230.–
KIIV
~ Moderátor
+43
God of flame
8. 6. 2013   #7
-
0
-

a zkusil sis vypsat obsah toho session?   print_r($_SESSION["polozky"]) nebo pripadne cely   print_r($_SESSION) ;  ?

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KIIV
~ Moderátor
+43
God of flame
8. 6. 2013   #8
-
0
-

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

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Forest0
Stálý člen
8. 6. 2013   #9
-
0
-

#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 ...

Nahlásit jako SPAM
IP: 92.62.230.–
KIIV
~ Moderátor
+43
God of flame
8. 6. 2013   #10
-
0
-

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

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KIIV
~ Moderátor
+43
God of flame
8. 6. 2013   #11
-
+2
-
Zajímavé

   

$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!!

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Forest0
Stálý člen
8. 6. 2013   #12
-
0
-

#11 KIIV
Už to funguje, jak má, ale potřebuju to do jednoho echa. Jak na to, prosím?

Nahlásit jako SPAM
IP: 92.62.230.–
KIIV
~ Moderátor
+43
God of flame
8. 6. 2013   #13
-
0
-

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

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Forest0
Stálý člen
8. 6. 2013   #14
-
0
-

#13 KIIV
Jenže index pole je jiný než pid

Nahlásit jako SPAM
IP: 92.62.230.–
KIIV
~ Moderátor
+43
God of flame
8. 6. 2013   #15
-
0
-

#14 Forest
index pole je tusim $ip  ... $polozky alias spise $polozka je to, co si spojoval joinem do "IN (...)" v selectu, takze to sedet musi

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Forest0
Stálý člen
8. 6. 2013   #16
-
0
-

#15 KIIV
Tak tě asi nechápu :-D

Nahlásit jako SPAM
IP: 92.62.230.–
KIIV
~ Moderátor
+43
God of flame
8. 6. 2013   #17
-
0
-

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

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Forest0
Stálý člen
8. 6. 2013   #18
-
0
-

#17 KIIV
Momentálně tam je:

$_SESSION["polozky"][0] = 1;
$_SESSION["polozky"][1] = 3;
Nahlásit jako SPAM
IP: 92.62.230.–
KIIV
~ Moderátor
+43
God of flame
8. 6. 2013   #19
-
0
-

a co je tedy to  1 a 3 ? kdyz podle toho vyhledavas v databazi jako by to bylo pid ?

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Forest0
Stálý člen
8. 6. 2013   #20
-
0
-

#19 KIIV
ID zboží (produktu)

Nahlásit jako SPAM
IP: 92.62.230.–
Řešení
KIIV
~ Moderátor
+43
God of flame
8. 6. 2013   #21
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

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";
}
Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Forest0
Stálý člen
8. 6. 2013   #22
-
0
-

#21 KIIV
:-D luxus :-D tak diky moc :-)

Nahlásit jako SPAM
IP: 92.62.230.–
Forest0
Stálý člen
9. 6. 2013   #23
-
0
-

A co když chci i jiné hodnoty a ne jen názvy?

Nahlásit jako SPAM
IP: 92.62.230.–
KIIV
~ Moderátor
+43
God of flame
9. 6. 2013   #24
-
0
-

$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 .....  ) 

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Forest0
Stálý člen
9. 6. 2013   #25
-
0
-

#24 KIIV
Takze muzu mit:

$nazvy[$kosikd['pid']] = $kosikd['pnazev'];

$nazvy[$kosikd['pid']] = $kosikd['cena''];

??

Nahlásit jako SPAM
IP: 92.62.230.–
KIIV
~ Moderátor
+43
God of flame
9. 6. 2013   #26
-
0
-

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;

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Forest0
Stálý člen
9. 6. 2013   #27
-
0
-

#26 KIIV
A jak to pak vypíšu?

Nahlásit jako SPAM
IP: 92.62.230.–
KIIV
~ Moderátor
+43
God of flame
9. 6. 2013   #28
-
0
-

$nazvy[$nejaky_pid]['pnazev']

$nazvy[$nejaky_pid]['cena']

??

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Forest0
Stálý člen
9. 6. 2013   #29
-
0
-

#28 KIIV
A pomocí $nazvy[$polozka] to nejak neudelam? Uz se v tom fakt ztracim :-/

Nahlásit jako SPAM
IP: 92.62.230.–
KIIV
~ Moderátor
+43
God of flame
9. 6. 2013   #30
-
0
-

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)

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Forest0
Stálý člen
9. 6. 2013   #31
-
0
-

#30 KIIV
Muzu to teda vypsat takto:

while($kosikd = mysql_fetch_assoc($kosik))
{
$info[$kosikd["pid"]] = $kosikd;
}

foreach($_SESSION["polozky"] as $ip => $polozka)
{
echo "Název: ".$nevim_co_tady_bude." Cena: ".$nevim_co_tady_bude."";
}

Nahlásit jako SPAM
IP: 92.62.230.–
KIIV
~ Moderátor
+43
God of flame
9. 6. 2013   #32
-
+1
-
Zajímavé

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']."";

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Forest0
Stálý člen
9. 6. 2013   #33
-
0
-

#32 KIIV
Konečně! KIV je král! :-D už to jde tak, jak potřebuju :-)))

Nahlásit jako SPAM
IP: 92.62.230.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 33 hostů

Podobná vlákna

Cyklus foreach — založil Montezo

Foreach — založil Karel

Foreach — založil Marty_SVK

WHILE VE WHILU VE FOREACH — založil row

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý