[PHP] foreach loop geeft niet alle waardes weer

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Matthijs1982
  • Registratie: Augustus 2005
  • Laatst online: 02-06-2021
Ik heb onderstaand script voor een winkelwagen. Het is mogelijk om producten in het winkelmandje te plaatsen en bij die producten ook een productvariant te kiezen via een dropdown menu.
Bijvoorbeeld: Ik bestel een plasma tv en kies als productvariant zwart.
Nu wil ik dat in het winkelmandje dus staat plasma tv zwart.

Weet iemand of het mogelijk is om de variabele variant zo op te slaan dat deze aan het product gekoppeld wordt en zo ook meegestuurd wordt.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
foreach( $_SESSION['winkelwagen'] as $nummer => $info ) 
{ 
    $productnummer = $nummer; 
    $aantal        = $info['aantal']; 
    $variant       = $info['variant']; 

$keuze="SELECT Productnummer, productnaam, Prijs FROM producten WHERE Productnummer ='".mysql_real_escape_string($Productnummer)."'"; 
$result_keuze = mysql_query($keuze); 

while ($row_winkelmandje = mysql_fetch_array($result_keuze)){ 
    
    $bg = ($i++ % 2) ? "rij_tabel1" : "rij_tabel2"; 
echo "<tr class=\"$bg\" height=\"35\"> 
    <td><center>$aantal</center></td> 
    <td>&nbsp; ".$row_winkelmandje['productnaam']."<br />&nbsp; <i>".$variant."</i></td> 
    <td width=\"100\">&nbsp; &euro; $row_winkelmandje['Prijs']."</td> 
    <td class="verwijderknop\"><center><a href=\"http://www.test.nl/verwijderen/$row_winkelmandje[Productnummer]\" target=\"_self\"><img src=\"http://www.test.nl/afbeeldingen/button_verwijderen.gif\" alt=\"$merk uit de winkelwagen verwijderen\" border=\"0\" /></a></center></td> 
  </tr>"; 

}

Acties:
  • 0 Henk 'm!

  • Japius
  • Registratie: April 2003
  • Laatst online: 30-08 20:57
nevermind

[ Voor 91% gewijzigd door Japius op 12-04-2008 22:02 . Reden: ik zit niet op te letten. ]


Acties:
  • 0 Henk 'm!

  • Matthijs1982
  • Registratie: Augustus 2005
  • Laatst online: 02-06-2021
wanneer ik de $info['variant'] echo, heeft deze de waarde van de $info['aantal']
Weet iemand hoe ik een variant koppel aan het product en het aantal?

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Matthijs1982 schreef op zaterdag 12 april 2008 @ 22:10:
wanneer ik de $info['variant'] echo, heeft deze de waarde van de $info['aantal']
Dan heb je de waarde 'aantal' ook toegekend aan de key 'variant'.
Weet iemand hoe ik een variant koppel aan het product en het aantal?
Op dezelfde manier als dat je een aantal aan een product koppelt?

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • Matthijs1982
  • Registratie: Augustus 2005
  • Laatst online: 02-06-2021
Borizz schreef op zaterdag 12 april 2008 @ 22:18:
[...]

Dan heb je de waarde 'aantal' ook toegekend aan de key 'variant'.

[...]

Op dezelfde manier als dat je een aantal aan een product koppelt?
Moet ik dan 2 foreach loops maken?
Dus i.p.v.
PHP:
1
2
3
4
5
foreach( $_SESSION['winkelwagen'] as $nummer => $info ) 
{ 
    $productnummer = $nummer; 
    $aantal        = $info['aantal']; 
    $variant       = $info['variant'];


PHP:
1
2
3
4
foreach( $_SESSION['winkelwagen'] as $Productnummer => $aantal ) 
{ 
foreach( $_SESSION['winkelwagen'] as $Productnummer => $variant) 
{


Ik zit hier al erg lang mee en kom er niet mee verder.

Acties:
  • 0 Henk 'm!

  • djiwie
  • Registratie: Februari 2002
  • Laatst online: 17-09 16:35

djiwie

Wie?

Doe eens een print_r() van $_SESSION['winkelwagen']?

Acties:
  • 0 Henk 'm!

  • Matthijs1982
  • Registratie: Augustus 2005
  • Laatst online: 02-06-2021
een print_r geeft het volgende:
Array ( [234] => 1 )

De variant wordt niet meegenomen.
productnummer en aantal wel.

Acties:
  • 0 Henk 'm!

  • djiwie
  • Registratie: Februari 2002
  • Laatst online: 17-09 16:35

djiwie

Wie?

Dan moet je bij het assignen van je producten niet $_SESSION['winkelwagen'][$productnr]=$aantal doen, maar iets als $_SESSION['winkelwagen'][$productnr]=array("aantal"=>$aantal, "variant"=>$variant).

Acties:
  • 0 Henk 'm!

  • Matthijs1982
  • Registratie: Augustus 2005
  • Laatst online: 02-06-2021
Ik kom er niet uit.
Hij geeft geen foutmelding meer, maar er wordt geen product meer weergegeven in het winkelwagentje.
Ik heb nu dit:

PHP:
1
2
3
4
5
6
7
8
9
10
$aantal=$_POST['aantal']; 
$variant = $_POST['variant']; 
$Productnummer=$_POST['Productnummer']; 
$_SESSION['winkelwagen'][$productnummer]=array('aantal'=>$aantal, 'variant'=>$variant); 

foreach( $_SESSION['winkelwagen'] as $nummer => $info ) 
{ 
    $Productnummer = $nummer; 
    $aantal        = $info['aantal']; 
    $variant       = $info['variant'];


De output is nu Array ( [] => Array ( [aantal] => 1 [variant] => 8 ) )
Dit klopt, alleen worden er geen producten weergegeven, dus de variabelen na de foreach loop blijven leeg.

[ Voor 28% gewijzigd door Matthijs1982 op 12-04-2008 23:35 ]


Acties:
  • 0 Henk 'm!

  • Matthijs1982
  • Registratie: Augustus 2005
  • Laatst online: 02-06-2021
Het werkt nu eindelijk!
Bedankt !

PHP:
1
2
3
4
5
6
7
8
9
10
11
$aantal=$_POST['aantal']; 
$variant = $_POST['variant']; 
$Productnummer=$_POST['Productnummer']; 

$_SESSION['winkelwagen'][$Productnummer]=array('aantal'=>$aantal, 'variant'=>$variant);

foreach( $_SESSION['winkelwagen'] as $nummer => $info ) 
{ 
    $Productnummer = $nummer;
    $aantal        = $info['aantal']; 
    $variant       = $info['variant'];

Acties:
  • 0 Henk 'm!

  • dEUSdude
  • Registratie: Juni 2002
  • Niet online
Een tip: gebruik eenduidige variabel-namen, m.a.w., altijd dezelfde opbouw.
Persoonlijk kies is altijd voor lowercase, dan kun je ook niet fouten als bovenstaand maken...

Acties:
  • 0 Henk 'm!

Verwijderd

Als je kijkt naar de Iterator interface zal je zien dat foreach(){} reset(); automatisch toepast.
While(); en for(); doen dit niet!

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$test = array(1,2,3,4,5,6,7,8,910,11,12,13,14,15);
while(list(, $value) = each($test)){
     echo $value.'<br/>'.PHP_EOL;
}
//reset($test); //zonder deze reset gaat het niet werken!
while(list(, $value) = each($test)){
     echo $value.'<br/>'.PHP_EOL;
}
//maar foreach weer wel 
foreach($test as $value){
     echo $value.'<br/>'.PHP_EOL;
}
?>
Pagina: 1