Hallo,
Ik heb het winkelwagen script van een tutorial hier en eigenlijk weer opnieuw geschreven dus alle codes naar mijn eigen wens opgebouwd en voor mij overbodige dingen weg gehaald dingen toegevoegd.

maar nu is er 1 probleem en ik kom er niet uit, namelijk als ik 1 product toevoeg doet hij dat en ik kan zelf het product nog een keer toevoegen zodat aantal goed werkt maar nu het probleem wil ik een geheel ander product toevoegen doet hij niks.

de verwerkings code

<?php
// Sessies 'aanzetten'
session_start();

// Producten controleren
if(!empty($_POST['id'])) $product_nr = $_POST['id'];
else exit('Geen id');
if(!empty($_POST['aantal'])) $aantal = $_POST['aantal'];
else exit('Geen aantal');
if(!empty($_POST['maat'])) $maat = $_POST['maat'];
else exit('Geen maat');
if(!empty($_POST['kleur'])) $kleur = $_POST['kleur'];
else exit('Geen kleur');


// Controleren of er al inhoud is op de winkelwagen
if(empty($_SESSION['winkelwagen']))
{
	// Zoniet, nieuwe aannmaken
	$_SESSION['winkelwagen'] = $product_nr.','.$aantal.','.$maat.','.$kleur;
}
else
{
	// Winkelwagen opsplitsen
	$winkelwagen = explode('|', $_SESSION['winkelwagen']);

	// Winkelwagen inhoud tellen
	$count = count($winkelwagen);

	// Kijken of product al in de winkelwagen zit
	$add = FALSE; // Variabelen om te kijken of we later moeten toevoegen
	foreach($winkelwagen as $products)
	{
		/*
		Uitleg v.d. explode hieronder
			$product[x] -->
			x == 0 -> product_nr
			x == 1 -> aantal
			x == 2 -> maat
			x == 3 -> kleur
		*/
		$product = explode(',',$products);
		if($product[0] == $product_nr)
		{
			// Het product is al in de winkelwagen dus hoeveelheid verhogen met aantal producten dat je wilt
			$product[1] = $product[1] + $aantal;
			$add = FALSE;  // Dus niet toevoegen
		}

		// En weer in de sessie zetten
		$i++;
		if($i == 1)
		{
			$_SESSION['winkelwagen'] = $product[0].','.$product[1].','.$product[2].','.$product[3];
		}
		else
		{
			$_SESSION['winkelwagen'] = $_SESSION['winkelwagen'].'|'.$product[0].','.$product[1].','.$product[2].','.$product[3];
		}
	}

	// Als we dus wel moeten toevoegen
	if($add)
	{
		$_SESSION['winkelwagen'] = $_SESSION['winkelwagen'].'|'.$product[0].','.$product[1].','.$product[2].','.$product[3];
	}
}

// Doorsturen naar winkelwagen
header('Location: winkelwagen.php');
?> 


Kan iemand zien of ik in de gehele code iets fout heb gedaan? waardoor dit probleem kan onstaan?

U kunt het hier zelf ervaren: http://after-party.nl/Winkelwagen/

Gr, Milo
Op regel 51 verhoog je $i terwijl ik nergens zie dat $i al bestaat.

Zet dit bovenin je script.
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

// rest
?>
Wat ik zelf prettiger vind werken (ook gemakkelijker met explode) is het volgende:

Je maakt een sessie variabele shoppingcart, welke ook weer een array bevat:

$_SESSION['shoppingcart']['artikel_id']['maat'] = 'aantal';

Op deze manier kan je snel bekijken of een artikel al in de shoppingcart voorkomt. Daarbij is het tellen heel gemakkelijk, hoef je geen explode te gebruiken en kan je ook snel controleren ([php]in_array()[/php] ) of een artikel al in de lijst staat.

Het is dan vrij simpel om items toe te voegen, aantallen te veranderen of zelfs om items uit je sessie te verwijderen.

Code wordt op die manier een stuk overzichtelijker en werkbaarder. Je hebt in bovenstaande "session voorbeeld" ook meteen de maat er staan van het bestelde artikel.
Beste Robert,

Zou u dit nader kunnen verklaren zo begrijp ik hem niet echt.

En nu voegt hij wel toe maar steeds hetzelfde id tenzij er een fout in de foreach loop zit bij winkelwagen.php


@ SanThe, u had gelijk over de $i maar nu is dit iets wat ik gewoon heb overgenomen en bij het orginele script is dit ook zo nu neem ik aan dat het wel moet blijven maar moet het verplaatst worden of moet ik ergens bovenaan $i waarde 0 geven?

PS: Licht het aan mij maar is er sinds kort spellings controle?
Kan site niet vinden. Slechte dns bij b-one.
Sorry, mag ik vragen wat dat inhoud?
Aar schreef op 26.08.2009 16:18
@SanThe, welke URL bedoelde je?

Bovenstaande: http://after-party.nl/Winkelwagen/

Verder een stukje uitwerking zoals Robert bedoelt. (Getest en werkt)
<?php
// Sessies 'aanzetten' en 'checken en eventueel aanmaken'
session_start();
$_SESSION['winkelwagen'] = (isset($_SESSION['winkelwagen'])) ? $_SESSION['winkelwagen'] : array();

// Producten controleren
if(empty($_POST['id']) or empty($_POST['aantal']) or empty($_POST['maat']) or empty($_POST['kleur']))
{
exit('Onvoldoende gegevens. Vul alle velden in');
}

// Controleren of er al inhoud is op de winkelwagen
if(isset($_SESSION['winkelwagen'][$_POST['id']][$_POST['maat']][$_POST['kleur']]))
{
$_SESSION['winkelwagen'][$_POST['id']][$_POST['maat']][$_POST['kleur']] += $_POST['aantal'];
}
else // Zoniet, nieuwe aannmaken
{
$_SESSION['winkelwagen'][$_POST['id']][$_POST['maat']][$_POST['kleur']] = $_POST['aantal'];
}

// Doorsturen naar winkelwagen
header('Location: winkelwagen.php');
?>

Okok, dan ga ik nu proberen omm op winkelwagen.php alles te kunnen weergeven dmv de foreach loop en mysql query

heb dit nu

<?php
// Sessie starten
session_start();

error_reporting(E_ALL); 
ini_set("display_errors", 1); 

// Database connectie maken
include('config.php');

if(empty($_SESSION['winkelwagen']))
{
	echo 'Uw winkelwagen is leeg.';
}
else
{
	$winkelwagen = $_SESSION['winkelwagen'];
	
	foreach($winkelwagen as $products)
	{
		$query = mysql_query("SELECT * FROM artikelen WHERE id = '".$_SESSION['winkelwagen'][$_POST['id']]."'");
		$record = mysql_fetch_array($query);
		echo $record['omschrijving'];
		echo '<br>';
		echo $_POST['aantal'];
		echo '<br>';
		echo '<hr>';
		echo '<br>';
	}
}
?>


Ga nu testen

EDIT

Ik weet wat ik fout doe maar niet hoe ik het moet oplossen.
Want ik krijg 2 parse errors op regel 21, 25.
Ik moet
$_POST['aantal'];
en
$_SESSION['winkelwagen'][$_POST['id']];

anders weergeven maar ik zou neit weten hoe.

ik moet naar mijn idee iets doen als $_SESSION['winkelwagen'][$_POST['id']]

anders kan je hem toch neit te pakken krijgen, je stop hem namelijk onder die naam er in...
<?php
foreach($_SESSION['winkelwagen'] as $id => $id_value)
{
echo 'Artikel: ' . $id . '<br/>';
foreach($id_value as $maat => $maat_value)
{
foreach($maat_value as $kleur => $aantal)
{
echo ' Maat: ' . $maat;
echo ' Kleur: ' . $kleur;
echo ' Aantal: ' . $aantal . '<br/>';
}
}
}
?>
Uiteraard moet je de werkelijke namen even uit de database halen.
Serieus schut u die codes gewoon uit uw mouw ofzo??

Ik ga nu die hele code bekijken om te zien wat het doet en wat het inhoud

Hartstikke bedankt !!

PS nog 1 ding waar zijn de waarden _value voor?

Reageren