Ik zit met een probleem.
Als ik een nieuw product toevoeg en heb er al een in gaat het fout. Wat klopt er niet aan deze code? De producten worden als volgt in de sessie gezet: 4454,1|5757,2 PRODUCTNUMMER,AANTAL

<?php
// add.php
session_start();

echo $_SESSION['cart'];

if($_GET['art'])
{
if(empty($_SESSION['cart']))
{
$_SESSION['cart'] = $_GET['art'].",1";
}
else
{
$cart = explode("|",$_SESSION['cart']);
$products = explode(",",$cart);
echo $cart."-".$products;
// Winkelwagen inhoud tellen
$count = count($cart);

// En controleren of het product al in de winkelwagen zit
$add = TRUE; // var om later te kijken of we moeten toevoegen
print_f($cart);
foreach print_f($cart);
{
$i++;
if ($i == 1) {
$_SESSION['cart'] = $products[0].",11";
} else {
$_SESSION['cart'] = $_GET['art'].",13|".$products[0].",".$products[1];
}
}

if ($add) { // Als we dus wel moeten toevoegen
$_SESSION['cart'] = $products[0].",1|".$_GET['art'].",12";
}


}
}


?>
Dit is niet handig gedaan. $_SESSION is een array en kan ook zelf arrays bevatten. Dus zou ik et als ik jou was als volgt doen:


<?php
// add.php
session_start();

if($_GET['art'])
{
   if( isset( $_SESSION['cart'][ $_GET['art'] ] ) ) // Als het artikel al in de mand zit.
   {
        $_SESSION['cart'][ $_GET['art'] ]++; // Voeg er 1 artikel aan toe.
   }
   else // Als het artikel nog niet in de mand zit, voeg er 1 van toe.
   {
        $_SESSION['cart'][ $_GET['art'] ] = 1;
   }
}
?>


Dit is ongeveer samengevat wat jij hierboven doet. Als je iets niet snapt vraag et dan gerust.

EDIT: wat foutjes uit de code gehaald.
Oké,
Maar hoe kan ik het dan uitlezen in mijn winkel wagentje?
Want als ik gewoon de session laat zien krijg ik dit: "Array"

Hieronder het script van het winkelwagetje

<?
session_start();

include('config.php');
include('header.inc');

if(empty($_SESSION['cart']))
{
echo '<b>U heeft geen producten in uw winkel wagen.</b><br>';
}
else
{

$cart = explode("|",$_SESSION['cart']);
$count = count($cart);

if($count == 1)
{
$tekst_art = "<b>U heeft 1 artikel in uw winkelwagen.</b>";
}
else
{
$tekst_art = "<b>U heeft ".$count."' artikelen in uw winkelwagen.</b>";
}

$total = 0;

foreach($cart as $products)
{
$product = explode(",", $products);
$verzendkosten = 6.20;
$sql = "SELECT setnr, prijs FROM lego_pro WHERE setnr = ".$product[0]; // Weet je nog, uit die sessie
$query = mysql_query($sql) or die (mysql_error()."<br>in file ".__FILE__." on line ".__LINE__);
$pro_cart = mysql_fetch_object($query);
$i++;


echo '<table border="0" width="100%">
<tr bgcolor="#6487DC">
<td valign="top" width="22%"><p><b>Procuct</b></p>
<td valign="top" colspan="2"><p><b>Prijs per stuk</b></p>
<td valign="top" width="19%"><p><b>Aantal</b></p>
<td valign="top" colspan="2"><p><b>Bedrag</b></p></tr>
<form name=bestelform action=cart.php method=GET><input type=hidden name=q value=add><input type=hidden name=PHPSESSID value=d1a82440ea6ba17c59b2a6b51eb36bf6><input type=hidden name=prodID value=EDDDE9D2BE><tr>
<td valign=top width="22%"><p>
'.$pro_cart->setnr.'</p><td valign=top width="5%"><p>&euro;<td valign=top width="32%"><div align=right><p>
'.$pro_cart->prijs.'</p></div><td valign=top width="19%">1<td valign=top width="5%"><p>&euro;<td valign=top width="14%"><div align=right><p>';
$total = $pro_cart->prijs * 1;
echo '
'.$total.'</p></div></p></td></tr></form><tr>
<td colspan=4 valign=top height="21"><p>Verzendkosten binnen Nederland</p>
<td valign=top height="21" width="5%"><p>&euro;</p>';

$sub_totaal = $total + $verzendkosten;

echo '<td valign=top height="21" width="14%"><div align=right><p>
6,20</p></div></td></tr><tr><td valign=top width="22%"><p><b>Totaal</b></p>
<td valign=top width="5%"><td valign=top width="32%">
<td valign=top width="19%"><td valign=top width="5%"><p><b>&euro;</b></p>
<td valign=top width="14%"><div align=right><p>'.$subtotaal.'</p></div></td></tr></table><br>

<table border="0"><tr><td>
<a href="cart.php?PHPSESSID=d1a82440ea6ba17c59b2a6b51eb36bf6&q=bfr">
<img src="bes.bmp" border="0" alt="Bestelling afhandelen"></a><td>
<a href="cart.php?PHPSESSID=d1a82440ea6ba17c59b2a6b51eb36bf6&q=bfr">Bestelling afhandelen</a>
<td>

<a href="cart.php?PHPSESSID=d1a82440ea6ba17c59b2a6b51eb36bf6&q=emp">
<img src="emp.bmp" border="0" alt="Winkelwagen leegmaken"></a><td>
<a href="cart.php?PHPSESSID=d1a82440ea6ba17c59b2a6b51eb36bf6&q=emp">Winkelwagen leegmaken</a>
<td>

<a href="javascript:window.print()">
<img src="printer.bmp" border="0" alt="Pagina afdrukken"></a><td>
<a href="javascript:window.print()">Pagina afdrukken</a>
</td></tr></table> ';

}
}
include('footer.inc');
?>
Hoe kan ik een array uitlezen?
foreach, implode, for...
Hoe kan ik dat aanpakken want zoals ik al eerder had gepost het script van het winkelwagentje krijg ik een foutmelding: "Unkown "Array"...".
Wat doe ik fout of wat gaat er fout?
nou.. wat je hebt is een array, die kan je niet zo echoen...
dus zet er een lusje omheen..en benader niet de array, maar de INHOUD zoals: $arr[id]
product toevoegen => $_SESSION['cart'][] = 'product';
en dan
<?php
if(isset($_SESSION['cart']))
{
for($i = 0; $i; $i++)
{
echo $_SESSION['cart'][$i];
}
}
else
{
echo 'there are no products in the cart';
}
?>
Wat ik had gedaan als ik jou was is het volgende:


<?php

if(!isset($_SESSION['product'])){
     $_SESSION['product'] = array();
}

?>


Vervolgens als er een product toegevoegt moet worden:


<?php

$_SESSION['product'][] = ($product => array($product,$aantal));

?>


Zo komt je hele product array er zo uit te zien:


<?php

$_SESSION['product'] = array(
   "39083" => array("39083","2")
   "34389" => array("34389","4")
);

?>


Nu kan je uitlezen wanneer iemand zijn product wil toevoegen of dat product al in zijn winkelwagentje zit:


<?php

foreach ($_SESSION['product'] AS $values){
   "hier de code om te controleren" ( d.m.v. $values[$product] bv )
}

<?


Als laatste zou ik meer dingen opslaan in de sessie bij het product, waaronder de naam, de prijs en de omschrijving.. als iemand onder het winkelen producten in ze winkelmandje doet, maar ondertussen word de prijs, de naam of weet k veel wat veranderd..zou een beetje lullig zijn voor de koper is t ni:P

Hoop dat je hier wat aan hebt..
gr,

nick
@jeroen, en wat als er een product uit het winkelwagentje verwijderd word?
dan werkt jou code niet meer ( de for lus ) gebruik bij een array foreach, dan kom je nooit in de knoop als een bepaalde $i waarde niet meer bestaat
Sorry dat ik niet meer gereageerd heb maar je kunt de array als volgt uitlezen:

<?
foreach( $_SESSION['cart'] as $productnummer => $aantal )
{
   // Doe hier wat je wil met $productnummer en $aantal
}
?>


en als je 1 product wilt verwijderen uit het wagentje doe dan

<?
unset( $_SESSION['cart'][ $productnummer ] );
?>

$productnummer is het nummer van het product dat je wilt verwijderen, er is geen link met de foreach lus

en als je wilt weten of er wel producten in het wagentje zitten gebruik dan

<?
if( count( $_SESSION['cart'] ) > 0 )
{
    // lees hier het winkelwagentje uit
}
else
{
   // er zijn geen producten
}
?>

Reageren