Nicht mehr ganz neu hier
Hi @ all,
ich habe ein wirklich sehr merkwürdiges Problem mit meinem Warenkorb, da es sehr schlecht zu beschreiben ist ohne den Code einmal gesehn zu haben werde ich ihn hier auflisten.
So und nun zum konkreten Problem. Bei einem bestimmten Aufruf von URL's tritt ein sehr merkwürdiger Fehler auf. Ich liste mal die Aufrufe der URL's und dann das Ergebnis auf.
Vorher gut zu wissen:
prod_id = 1 => Wundertüte aus dem Morgenland
prod_id = 2 => Jim Knopfs Knopf
Wie ihr sehen könnt verhält sich mein Skript sehr merkwürdig oO und ich habe wirklich überhaupt keine Idee, wo das Problem liegen könnte. Ich denke es versteckt sich irgendwo in der function addItemToCart(), aber wo da oO ?
Ich hoffe ihr könnt mir bei diesem Problem helfen
LG
MrManko
ich habe ein wirklich sehr merkwürdiges Problem mit meinem Warenkorb, da es sehr schlecht zu beschreiben ist ohne den Code einmal gesehn zu haben werde ich ihn hier auflisten.
PHP:
<?php
/* 15.01.2009 */
if(!isset($_SESSION['warenkorb'])) {
$_SESSION['warenkorb'] = array();
}
function start($action) {
if($action == "add") {
//Hier wird der Artikel hinzugefügt
addItemToCart($_GET['prod_id'],$_GET['quantity']);
}
else if($action == "edit") {
//Hier wird der Artikel editiert
editItemInCart($_GET['index'],$_GET['quantity']);
}
else if($action == "delete") {
//Hier wird der Artikel gelöscht
deleteItemFromCart($_GET['index']);
}
else if($action == "delete_all") {
deleteAllItemsFromCart();
}
else {
//Hier wird dann einfach der Warenkorb ohne Aktion aufgerufen
calcCart();
}
}
//Diese Funktion legt Artikel im Warenkorb ab
function addItemToCart($prod_id, $quantity) {
//Argumente aufsplitten, falls es mehrere sind.
$prod_input = explode("@", $prod_id);
$quantity_input = explode("@", $quantity);
//Durchläuft den Array $prod_input komplett
for ($i=0; $i < count($prod_input); $i++) {
//Liest den kompletten Inhalt des Warenkorbes ein
foreach($_SESSION['warenkorb'] as $key => $value) {
$inCart = false;
//Überprüft, ob der Artikel schonmal im Warenkorb vorhanden ist.
if (in_array($prod_input[$i], $value)) {
$_SESSION['warenkorb'][$key][quantity] += $quantity_input[$i];
$inCart = true;
}
}
//Dieser if Zweig greift, falls der Artikel nicht im Warenkorb vorhanden war.
if (!$inCart) {
array_push($_SESSION['warenkorb'],array('prod_id' => $prod_input[$i], 'quantity' => $quantity_input[$i]));
}
}
//Ruft den Warenkorb auf
calcCart();
}
//Diese Funktion editiert die Anzahl eines Artikels
function editItemInCart($index, $quantity) {
$index_input = explode("@", $index);
$quantity_input = explode("@", $quantity);
//Durchläuft den Array $prod_input komplett
for ($i=0; $i < count($index_input); $i++) {
//Liest den kompletten Inhalt des Warenkorbes ein
$_SESSION['warenkorb'][$index_input[$i]]['quantity'] = $quantity_input[$i];
}
calcCart();
}
//Diese Funktion löscht Artikel aus dem Warenkorb
function deleteItemFromCart($index) {
unset($_SESSION['warenkorb'][$index]);
calcCart();
}
//Diese Funktion löscht alle Artikel aus dem Warenkorb
function deleteAllItemsFromCart() {
unset($_SESSION['warenkorb']);
$_SESSION['warenkorb'] = array();
calcCart();
}
//Diese Funktion gibt den Inhalt des Warenkorbs aus
//Ausgabe kann alles sein: Direkte Ausgabe mit echo,
//Definition von Templatevariablen oder wie in diesem
//Fall eine XML Datei.
function calcCart() {
header('Content-Type: application/xml');
echo "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>"; //<?
echo "<cart>";
$gesPreis = 0;
foreach($_SESSION['warenkorb'] as $key => $value) { //foreach ist PHP 4 kompatibel
$SQL = "SELECT * FROM products WHERE pID = '$value[prod_id]'";
$RES = mysql_query($SQL);
$ROW = mysql_fetch_assoc($RES);
$prod_name = $ROW['pName'];
//Rechnet den Artiklpreis mal die Anzahl
$prod_price = $ROW['pPreis'] * $value['quantity'];
// Hier dann die XML Ausgabe.
echo "<prodIndex>$key</prodIndex>";
echo "<prod>$prod_name</prod>";
echo "<preis>$prod_price</preis>";
echo "<anzahl>$value[quantity]</anzahl>";
$gesPreis += $prod_price;
}
//Netto Wert in Brutto Wert umwandeln
$gesPreisBrutto = NettoInBrutto($gesPreis);
//Brutto Wert in Session speicher für PayPal API
$_SESSION['gesPreis'] = $gesPreisBrutto;
//Anzahl der abgelegten Produkte ermitteln
$gesArtikel = count($_SESSION['warenkorb']);
echo "<gesamtPreis>$gesPreis</gesamtPreis>";
echo "<gesamtPreisBrutto>$gesPreisBrutto</gesamtPreisBrutto>";
echo "<anzahlArtikel>$gesArtikel</anzahlArtikel>";
echo "</cart>";
}
/*------------------------------------------------------------------------------------------------------------*/
function NettoInBrutto($arg) {
$arg = 119*$arg/100;
$arg = sprintf("%01.2f",$arg);
return $arg;
}
?>
Vorher gut zu wissen:
prod_id = 1 => Wundertüte aus dem Morgenland
prod_id = 2 => Jim Knopfs Knopf
Code:
1.) Aufruf: warenkorb.php?action=add&prod_id=2&quantity=1
=> 1x Jim Knopfs Knopf
2.) Aufruf: warenkorb.php?action=add&prod_id=1&quantity=1
=> 2x Jim Knopfs Knopf <-- (Das darf doch eig. gar nicht möglich sein)
3.) Aufruf: warenkorb.php?action=add&prod_id=1&quantity=1
=> 2x Jim Knopfs Knopf
=> 1x Wundertüte aus dem Morgenland
Ich hoffe ihr könnt mir bei diesem Problem helfen
LG
MrManko