Hi ho....
also ich verzweifle hier seit 2 Tagen an einem Code für einen Warenkorb.
Ausführung: Benutzer wählt ein Produkt und klickt auf "Kaufen", beim klick darauf wird auf eine andere Datei verlinkt welche die ID des zu kaufenden Produkts mit übernimmt.
z.B: von detail.php?id=10 AUF kaufen.php?id=10
So, nun ist es aber so, das wenn ich im Script prüfe ob der Artikel bereits im Warenkorb ist dennoch beide abfragen durchführt.. Ein Update für das Hinzufügen (bei nochmaligen klick) und die Insert anweisung, wenns halt noch nicht im Warenkorb ist.
Hier mal die DB-Struktur (warenkorb)
session|artikel_name|artikel_anzahl|artikel_preis|set_time
hvidvh6oh9s9fkfjgbls8tnmf214btsh|T-Shirt|1|9.99|1243275555
nun hier des Script/Datei (kaufen.php)
Interessant wird es erst ab "//Prüfen ob bereits im Warenkorb", alles andere ist nur für die vollständigkeit mit angegeben.
Nun jedenfalls wird beim Aufrufen des Scriptes... einmal der Artikel (wenn nicht vorhanden in die Datenbank eingetragen und gleich sofort im nachhinein das Update ausgeführt. Was zur folge hat, das nicht nur ein Artikel sondern gleich 2x die Artikelmenge im Warenkorb sind.
Nun meine frage ist einfach nur, warum wird hier die IF anweisung übersprungen?
Also, nachdem ich die Datei durch aufzählen der Script- bzw. Dateidurchläufe durchläufe mitgeloggt habe, kann ich mit sicherheit sagen, das die Datei wirklich nur einmal ausgeführt wird.
Bitte helft mir...
Hab es zwar schon anders gelöst (per timestamp verschachtelungen) aber das ist auf dauer etwas umständlich und nicht sinn der sache das doch am ende irgendwas schief läuft.
Serverinformationen:
php-version: 5.2.9 (run on apache2)
mysql-version: 5.0.45
Edit: achso, ich nutze .htaccess um SEO Optimierte Urls zu erzeugen, aber daran wird es bestimmt nicht liegen?!
also ich verzweifle hier seit 2 Tagen an einem Code für einen Warenkorb.
Ausführung: Benutzer wählt ein Produkt und klickt auf "Kaufen", beim klick darauf wird auf eine andere Datei verlinkt welche die ID des zu kaufenden Produkts mit übernimmt.
z.B: von detail.php?id=10 AUF kaufen.php?id=10
So, nun ist es aber so, das wenn ich im Script prüfe ob der Artikel bereits im Warenkorb ist dennoch beide abfragen durchführt.. Ein Update für das Hinzufügen (bei nochmaligen klick) und die Insert anweisung, wenns halt noch nicht im Warenkorb ist.
Hier mal die DB-Struktur (warenkorb)
hvidvh6oh9s9fkfjgbls8tnmf214btsh|T-Shirt|1|9.99|1243275555
nun hier des Script/Datei (kaufen.php)
PHP:
<?php
include("inc/config.php");
/*
$_GET['id'] ist die übertragene ID des zu kaufenden Artikels/Produktes
*/
$sql = dbquery("SELECT * FROM shop_artikel WHERE script_id = '".$_GET['id']."' AND script_menge != '0' LIMIT 1");
if( mysql_num_rows($sql) == 1 )
{
//Artikel vorhanden
$row = mysql_fetch_array($sql);
$artikel_preis = $row['script_price'];
//Prüfen ob bereits im Warenkorb
$sql_warenkorb = dbquery("SELECT * FROM `shop_warenkorb` WHERE `session` LIKE '".session_id()."' AND `artikel_name` LIKE '".$row['script_name']."' LIMIT 1");
//Prüfen ob Artikel bereits im Warenkorb ist.
if( mysql_num_rows($sql_warenkorb) == 0 )
{
//Einmal in den Warenkorb legen
$addTo = dbquery("INSERT INTO `shop_warenkorb` (`session`,`artikel_name`,`artikel_anzahl`,`artikel_preis`,`set_time`) VALUES ('".session_id()."', '".$row['script_name']."', '1', '".$artikel_preis."', '".time()."')");
}else{
//Warenkorb - Artikel update - +1
$addTo = dbquery("UPDATE shop_warenkorb SET artikel_anzahl = artikel_anzahl + 1 WHERE session = '".session_id()."' AND artikel_name = '".$row['script_name']."' LIMIT 1");
}
if( $addTo == true )
{
$_SESSION['warenkorb'] = true;
$meldung['artikelname'] = '1x '.$row['script_name'];
$meldung['produkt_id'] = $_GET['id'];
$Cboxen = cBox($row['script_name'].' wurde in den Warenkorb gelegt', tpl_read('c_produkt_bestellen',$meldung));
}else{
/* Warenkorb eintrag war fehlerhaft */
$meldung['code'] = 'Warenkorb';
$meldung['beschreibung'] = 'Der gewünschte Artikel konnte aus einem Unbekannten grund nicht in den Warenkorb gelegt werden.';
$Cboxen = cBox('Artikel wurde nicht im Warenkorb abgelegt', tpl_read('c_fehlerseite',$meldung));
}
}else{
//Produkt ID fehlerhaft
$Cboxen = cBox('Fehlerhafte Artikel-ID', tpl_read('c_no_produkt_details'));
$Nboxen = nBox_zufallsprodukt().nBox_newprodukt();
}
template($Cboxen,$Nboxen);
?>
Nun jedenfalls wird beim Aufrufen des Scriptes... einmal der Artikel (wenn nicht vorhanden in die Datenbank eingetragen und gleich sofort im nachhinein das Update ausgeführt. Was zur folge hat, das nicht nur ein Artikel sondern gleich 2x die Artikelmenge im Warenkorb sind.
Nun meine frage ist einfach nur, warum wird hier die IF anweisung übersprungen?
Also, nachdem ich die Datei durch aufzählen der Script- bzw. Dateidurchläufe durchläufe mitgeloggt habe, kann ich mit sicherheit sagen, das die Datei wirklich nur einmal ausgeführt wird.
Bitte helft mir...
Hab es zwar schon anders gelöst (per timestamp verschachtelungen) aber das ist auf dauer etwas umständlich und nicht sinn der sache das doch am ende irgendwas schief läuft.
Serverinformationen:
php-version: 5.2.9 (run on apache2)
mysql-version: 5.0.45
Edit: achso, ich nutze .htaccess um SEO Optimierte Urls zu erzeugen, aber daran wird es bestimmt nicht liegen?!
Zuletzt bearbeitet: