3Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
690
690
EMPFEHLEN
-
Hallo zusammen!
Ich arbeite jetzt schon seit einer Woche an einem Warenkorb-script mit Datenbankbasierten Login- und Registerbereich, welche auch alle funktionieren
.
Nun hab ich ein Problem, ich muss diese Warenkorb Session sprich den ausgewählten Warenkorbinhalt in eine Datenbank speichern.
Tja und jetzt weis ich nicht mehr weiter
, ich habe schon sämtliche Methoden aus verschieden Foren probiert aber irgendwie hakt es...
Ich hoffe mir kann jemand helfen bzw. einen Denkanstoss geben
wie ich dieses Problem lösen könnte.
p.s. habe es mit session_set_save_handler()-Funktion auch probiert, aber verstehe es nicht ganz.....
Hier meine Warenkorb.php und Index.php
Indexx.php
PHP-Code:<?php require warenkorb.php'; ?>
<html>
<head>
</head>
<body>
<?php warenkorb(); ?>
<br /><br />
<?php produkte(); ?>
</body>
</html>
Warenkorb
warenkorb.php
PHP-Code:<?php
session_start();
$page = 'indexx.php';
mysql_connect ('localhost','root','') or die (mysql_error());
mysql_select_db('warenkorb') or die(mysql_error());
if (isset($_GET['add'])) {
$menge =mysql_query('SELECT id, menge FROM produkte WHERE id='.mysql_real_escape_string((int)$_GET['add']));
while ($menge_row = mysql_fetch_assoc($menge)) {
if ($menge_row['menge']!=$_SESSION['cart_'.(int)$_GET['add']]) {
$_SESSION['cart_'.(int)$_GET['add']]+='1';
}
}
header('Location: '.$page);
}
if (isset($_GET['remove'])) {
$_SESSION['cart_'.(int)$_GET['remove']]--;
header('Location: '.$page);
}
if (isset($_GET['delete'])) {
$_SESSION['cart_'.(int)$_GET['delete']]='0';
header('Location: '.$page);
}
echo "<h3>Artikel im Einkaufswagen</h3>";
function produkte () {
echo "<h3>Vorhandene Artikel</h3>";
$get = mysql_query('SELECT id, name, beschreibung, preis FROM produkte WHERE menge > 0 ORDER BY id DESC');
if (mysql_num_rows($get)==0) {
echo "Keine Artikel vorhanden!";
}
else {
while ($get_row = mysql_fetch_assoc($get)) {
echo '<p>'.$get_row['name'].'<br />'.$get_row['beschreibung'].'<br />€'.number_format($get_row['preis'], 2).' <a href="warenkorb.php?add='.$get_row['id'].'">Add</a></p>';
}
}
}
function warenkorb() {
foreach($_SESSION as $name => $value) {
if ($value>0) {
if (substr($name, 0, 5)=='cart_') {
$id = substr($name, 5, (strlen($name)-5));
$get = mysql_query('SELECT id, name, preis FROM produkte WHERE id='.mysql_real_escape_string((int)$id));
while ($get_row = mysql_fetch_assoc($get)) {
$sub = $get_row['preis']*$value;
echo $get_row['name'].' x '.$value.' für €'.number_format($get_row['preis'], 2).' = € '.number_format($sub, 2).' <a href="warenkorb.php?remove='.$id.'">[-]</a> <a href="warenkorb.php?add='.$id.'">[+]</a> <a href="warenkorb.php?delete='.$id.'">[Löschen]</a><br />';
}
}
$total += $sub;
}
}
if ($total==0) {
echo "Ihr Warenkorb ist leer.";
}
else {
echo '<p>Gesamt: €'.number_format($total, 2).'</p>';
echo "<h5><a href='bestellung.php'>Bestellung abschließen</a> </h5>";
}
}
?>Geändert von FairfaX (02.06.11 um 05:12 Uhr)
-
02.06.11 09:28 #2
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.520
Viel einfacher wäre es, wenn du eine Cart-Klasse baust, oder statt einfach alles direkt in $_SESSION zu speichern, vorher in ein Array packen und dann das Array in $_SESSION speichern. Dann kannst du nämlich ganz einfach das komplette Array serialisieren und in der DB ablegen.
Da ich allerdings die Vermutung habe, das du mit in der DB speicher meinst, das die gekauften Artikel einer Bestellung zugeordnet werden sollen: Du brauchst eine Tabelle Bestellungen, welche ID+Bestellnummer+UserID+ArtikelID+Menge und ggf. den Preis aufnehmen kann, sprich du brauchst die Spalten dafür. Einen INSERT-Query kann man dann ja problemlos vornehmen.
Oder für welchen Zweck soll das Speichern denn nun stattfinden?Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Danke saftmeister, für deine schnelle Antwort!

Zur Speicherung:
Stimmt, die Artikel sollen einer Bestellung zugeordnet werden ( m zu n Beziehung?) da bräucht ich doch noch eine Tabelle z.B. BestellPosition oder....?
Und der Code müsste dann so aussehen oder?: (Funktioniert nicht)
PHP-Code:$query = "INSERT INTO bestellungen (id, name, preis, menge)
VALUES ('$_SESSION . cart_() . ')";
$abfsessions = mysql_query($query);
if (!$abfsessions) die ("Fehler in der Abfrage");
GrußGeändert von FairfaX (02.06.11 um 15:55 Uhr)
-
02.06.11 16:54 #4
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.520
Nein, wenn du 4 Spalten angibst, musst du auch 4 Spalten füllen. Angenommen, du hast ein Array $cart, was in der Session liegt und so aussieht:
Code php:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
$cart = array( 'user' => '1234', // Mal angenommen, das wäre die ID des Users saftmeister 'bestellartikelliste' => array( // Artikel im Warenkorb sind ja evtl. mehrer, also wieder ein array 1 => array( // Artikel haben Eigenschaften wie ID, Artikelnummer, Preis, Farbe, Größe, etc. id => 567, artikel_nr => 'ABC123', bez => 'Waschmaschine "Superweiß"', umdr_pro_min => 1500, farbe => 'weiss' preis => 500.0, anzahl => 1, ), 2 => array( // Und noch ein Artikel mit bestimmten Attributen id => 789, bez => 'Kühlschrank Superfreeze', artikel_nr => 'DEF987', farbe => 'marinblau', preis => 250.0, anzahl => 1 ) ) ); // Den Waren-Korb in die Session $_SESSION['cart'] = $cart;
An anderer Stelle kannst du dann auf die Elemente im Warenkorb zugreifen, um sie in die Bestellungstabelle zu schreiben:
Code php:1 2 3 4 5 6 7 8 9 10 11 12 13 14
$cart = $_SESSION['cart']; foreach($cart['bestellartikelliste'] as $bestellartikel) { $query = sprintf("INSERT INTO bestellungen (artikelid, name, preis, menge) VALUES (%d, %s, %f, %d)", $bestellartikel['id'], $bestellartikel['bez'], $bestellartikel['preis'], $bestellartikel['anzahl'] ); mysql_query( $query ) or die( mysql_error() ); $insert_id = mysql_insert_id(); // Hier die insert_id benutzen, um sie in eine Kreuz-Tabelle zu schreiben - wegen Normalisierung }
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
ok, danke werde es jetzt mal ausprobieren!
-
Hallo,
also ich habe den Code jetzt angepasst und eingefügt, aber irgendwie tut sich da nichts...
Deshalb wollte ich fragen, ob mir jemand zeigen kann wo und wie ich den Code in meine Warenkorb.php einfügen muss, damit die Inhalte in der Datenbank gespeichert werden.
Ich komm einfach nicht weiter und wäre für jede Hilfe dankbar!
-
04.06.11 17:57 #7
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.520
Wenn du jetzt noch die Warenkorb.php posten würdest, und beschreibst, wie du vorgehen willst, damit die Werte in die DB geschrieben werden (ungefährer Ablauf), könnte man evtl. weiter helfen.
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Ok, ich habe eine Datenbank (warenkorb) mit 2 Tabellen (1. produkte und 2.bestellung).
Dazu habe ich zwei php Dateien.
1. Indexx.php
2. Warenkorb.php
Die Warenkorb.php beinhaltet 2 Schleifen. Die erste Schleife (function produkte) ruft die vorhandenen Produkte aus der Datenbank ab.
Die zweite (function warenkorb), zeigt die ausgewählten Produkte in der Session
$_SESSION['warenkorb_'] an.
Nun sollen beim Klick auf Bestellung abschließen, alle Produkte, die sich in der $_SESSION['warenkorb_'] in die Datenbank eingetragen werden.
Ich wollte dies so machen, dass die Produkte = id, name, menge und preis, welche sich in der $_SESSION['warenkorb_'] befinden in die Datenbank gespeichert werden, aber ich hab es bis jetzt nicht hinbekommen.
Zuerst habe ich es über INSERT INTO versucht, dann mit dem session__set_save_handler versucht, bin aber kläglich gescheitert. auf anraten von saftmeister habe ich es mit array code aber ohne erfolg
Das Problem liegt wahrscheinlich daran, dass man die $_SESSION['warenkorb_'] auslesen muss und dann kann man erst die Variablen in die Datenbank bestellung -> speichern. und genau hier komm ich nicht weiter...
Indexx.php
PHP-Code:<?php require warenkorb.php; ?>
<html>
<head>
</head>
<body>
<?php warenkorb(); ?>
<br /><br />
<?php produkte(); ?>
</body>
</html>
Warenkorb.php
PHP-Code:<?php
session_start();
$page = 'indexx.php';
mysql_connect ('localhost','root','') or die (mysql_error());
mysql_select_db('warenkorb') or die(mysql_error());
if (isset($_GET['add'])) {
$menge =mysql_query('SELECT id, menge FROM produkte WHERE id='.mysql_real_escape_string((int)$_GET['add']));
while ($menge_row = mysql_fetch_assoc($menge)) {
if ($menge_row['menge']!=$_SESSION['warenkorb_'.(int)$_GET['add']]) {
$_SESSION['warenkorb_'.(int)$_GET['add']]+='1';
}
}
header('Location: '.$page);
}
if (isset($_GET['remove'])) {
$_SESSION['warenkorb_'.(int)$_GET['remove']]--;
header('Location: '.$page);
}
if (isset($_GET['delete'])) {
$_SESSION['warenkorb_'.(int)$_GET['delete']]='0';
header('Location: '.$page);
}
echo '<span style="font-family:Verdana;font-size:large;font-weight:bold;color:blue;">Artikel im Einkaufswagen</span><br /><br />';
function produkte () {
echo "<h3>Vorhandene Artikel</h3>";
$get = mysql_query('SELECT id, name, beschreibung, preis FROM produkte WHERE menge > 0 ORDER BY id DESC');
if (mysql_num_rows($get)==0) {
echo "Keine Artikel vorhanden!";
}
else {
while ($get_row = mysql_fetch_assoc($get)) {
echo '<p>'.$get_row['name'].'<br />'.$get_row['beschreibung'].'<br /><br />Preis: €'.number_format($get_row['preis'], 2).' <a href="warenkorb.php?add='.$get_row['id'].'">ADD</a></p>';
}
}
}
function warenkorb() {
foreach($_SESSION as $name => $value) {
if ($value>0) {
if (substr($name, 0, 10)=='warenkorb_') {
$id = substr($name, 10, (strlen($name)-10));
$get = mysql_query('SELECT id, name, preis FROM produkte WHERE id='.mysql_real_escape_string((int)$id));
while ($get_row = mysql_fetch_assoc($get)) {
$sub = $get_row['preis']*$value;
echo $get_row['name'].' x '.$value.' für €'.number_format($get_row['preis'], 2).' = € '.number_format($sub, 2).' <a href="warenkorb.php?remove='.$id.'">[-]</a> <a href="warenkorb.php?add='.$id.'">[+]</a> <a href="warenkorb.php?delete='.$id.'">[Löschen]</a><br />';
}
}
$gesamt += $sub;
}
}
if ($gesamt==0) {
echo "Ihr Warenkorb ist leer.";
}
else {
echo '<p>Gesamt: €'.number_format($gesamt, 2).'</p>';
echo "<h5><a href='bestellung.php'>Bestellung abschließen</a> </h5>";
}
}
?>Geändert von FairfaX (04.06.11 um 18:32 Uhr)
-
04.06.11 22:34 #9
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.520
Ein INSERT INTO ist aber genau das richtige, um es in der DB abzulegen. Hier mal ein Entwurf:
Code php:1 2 3
// Hier müsstest du die Variablen $id, $name, $menge und $preis mit den Werten aus warenkorb_ befüllen $query = "INSERT INTO bestellungen (id, name, menge, preis) VALUES ($id, $name, $menge, $preis)"; mysql_query( $query ) or die ( mysql_error() );
Das ist als Schablone allgemein für MySQL-Datenbank-Abfragen (INSERT gehört dazu) zu sehen.Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
Ähnliche Themen
-
Formularfelder ind Session speichern, anschließend auslesen und session löschen
Von Fabian Frank im Forum PHPAntworten: 2Letzter Beitrag: 16.04.09, 15:35 -
Session Daten in Datenbank speichern
Von Katzenbauer im Forum PHPAntworten: 2Letzter Beitrag: 14.08.06, 21:06 -
Datei in session speichern?
Von webpagemaster im Forum PHPAntworten: 1Letzter Beitrag: 19.04.06, 14:37 -
Switch in Session speichern ?
Von phpMars im Forum PHPAntworten: 10Letzter Beitrag: 06.09.05, 15:08 -
Session ID in Datenbank speichern möglich ?
Von mgh im Forum PHPAntworten: 12Letzter Beitrag: 21.11.04, 17:19





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren