Suchen
Inside Wiki
Nützliche Links




 
phpforum.de bei Facebook
 
phpforum.de bei Twitter
 

Zurück   PHP Forum: phpforum.de > phpforum.de Wiki > phpforum.de Wiki

PHP Wiki Dieses Wiki sammelt Lösungen, zu Problemen, welche immer wieder im Forum auftauchen.

 
 
Artikel-Optionen Ansicht
  #1  

Standard Warenkorb mit Sessions realisieren

 

Inhalte

Warenkorb mit Sessions realisieren



Warum Sessions?


Einen Warenkorb mit Sessions erstellen - Klingt erst einmal nach einer einfachen Sache. Da ein Kunde wahrscheinlich mehr als nur einen Artikel in seinen Warenkorb legt, ist ein Array vonnöten. Doch warum nutzt man nicht die komfortable Datenbank-Anbindung? Jeder Artikel, der in einen Warenkorb gelegt wurde, wird in einer Datenbank gespeichert. So hat der Betreiber auch gleich Einsicht auf Artikel, die in einen Warenkorb gelegt wurden. Außerdem muss man nicht mit Arrays hantieren. Also, warum das Spiel mit Sessions?

Ganz einfach:
In der Datenbank-Tabelle "Warenkorb" werden die Einträge der Artikel-IDs gespeichert, die der Kunde in seinen Warenkorb legt. Nun schließt er das Browserfenster, ohne sich auszuloggen. Man hat also keine Chance, einen vergessen Logout abzufangen. Die Eintrage, die eigentlich temporär in der Tabelle "Warenkorb" verweilen sollten, sind nun für immer gespeichert, und niemand holt sie heraus. Der Daten-Müll ist vorprogrammiert.

Sessions sind temporär - und immer da wenn der User eingeloggt ist - Also geradezu geschaffen für den Warenkorb.

Die Variablen


Zunächst muss unser Warenkorb-Projekt eingebunden werden. Ich habe es direkt auf die Artikel-Seite inkludiert, auf der alle Artikel angeboten werden. Die Daten werden bei mir per $_POST-Variablen übergeben. Für eine GET-Übergabe müsste man noch einmal alle Werte prüfen da sie natürlich sehr leicht in der Adresszeile manipulierbar sind.

Auf den Warenkorb möchte ich so zugreifen:
Code:
$_SESSION['wk']

Hat ein Kunde also den Artikel-Nr. 14 und 29 in seinen Warenkorb hinterlegt, sieht es hinter den Kulissen so aus:
Code:
$_SESSION['wk']['14']
$_SESSION['wk']['29']


Die Ausgabe


Zunächst also die gewohnte SQL-Abfrage, der Vollständigkeit halber: Hier wird auch gleich bei der Ausgabe der verfügbaren Artikel entschieden, ob der Button "In den Warenkorb legen" oder "Aus dem Warenkorb nehmen" angezeigt wird; Beides zusammen würde ja keinen Sinn ergeben.
PHP Quellcode:
$abfrage = 'SELECT * FROM tabelle ORDER BY id';
  $query = mysql_query($abfrage);
 
  while($row = mysql_fetch_object($query))
    {
   
    if(!isset($_SESSION['wk'][$row->id])) {
      // "Zum Warenkorb hinzufügen"
      $wk = '<form class="iconform" action="" method="post">'.
          '<input type="hidden" name="add" value="'.$row->id.'" />' .
          '<input type="image" src="icons/wk_add.gif" name="ok" /></form>';
         
         
     
    }
    else {
      // "Aus dem Warenkorb nehmen"
      $wk = '<form class="iconform" action="" method="post">'.
          '<input type="hidden" name="del" value="'.$row->id.'" />' .
          '<input type="image" src="icons/wk_del.gif" name="ok" /></form>';
     
    }

  echo 'Artikel: ' . $row->bezeichnung;
  echo 'Preis: ' . $row->preis;
  echo $wk;


Artikel im Warenkorb registrieren


So aber was passiert nun, wenn ein Kunde auf "In den Warenkorb legen" klickt? Dann fangen wir das an oberster Stelle ab (Das action-Attribut im form-Tag leitet uns an die aktuelle Seite weiter):

PHP Quellcode:
if(isset($_POST['add']))
  $add_id = $_POST['add'];


Anhand der ID holen wir uns jetzt noch die restlichen relevanten Daten zu diesem Artikel. In diesem Beispiel nehme ich die Bezeichnung und den Preis. Ich speichere auch das in Session-Variablen ab.

PHP Quellcode:
session_start();
if(isset($_POST['add'])) {
      $add_id = $_POST['add'];
     
      $abfrage = 'SELECT bezeichnung, preis FROM tabelle WHERE id = "' . $add_id . '"';
      $query = mysql_query($abfrage);
      if(mysql_num_rows($query) > 0) {
        $data = mysql_fetch_array($query);
        $artikel    = $data['bezeichnung'];
        $preis    = $data['preis'];
       
        $neu = array ('bezeichnung' => $artikel, 'preis' => $preis);
        //Hier wird der Artikel mitsamt Daten gespeichert
        $_SESSION['wk'][$add_id] = $neu;
       
      }
      else {
        echo 'Diese ID gibt es nicht!';
      }
     
    }


Natürlich muss es keine MySQL-Abfrage sein, um sich die restlichen Daten zu holen, man könnte vom Form-Tag aus theoretisch auch ein mehrdimensionales Array übergeben, aber das wäre an dieser Stelle zu kompliziert.

Zugriff auf Artikel im Warenkorb


Von nun an kann man auf jeden Artikel im Warenkorb komfortabel zugreifen:

PHP Quellcode:
// Preis von Artikel-ID 14 im Warenkorb
echo 'Preis: ' . $_SESSION['wk'][14]['preis'];

// Beschreibung von Artikel 29 im Warenkorb
echo 'Artikel: ' . $_SESSION['wk'][29]['bezeichnung'];


Die Ausgabe lässt sich über eine einfache foreach-Anweisung bewerkstelligen:

PHP Quellcode:
echo '<h2>Ihr Warenkorb</h2>';

    if (isset($_SESSION['wk'])) { // Prüfen, ob Session-Variable für den Warenkorb existiert
      foreach($_SESSION['wk'] as $id => $artikel) {
        echo '<br>ID: ' . $id . ' | ' . $artikel['bezeichnung'] . ' | &euro; ' . $artikel['preis'];
      }
    }


Warenkorb-Eintrag entfernen


Mittels unset() entfernen wir einen Eintrag aus dem Warenkorb:

PHP Quellcode:
if(isset($_POST['del'])) {
      $del_id = $_POST['del'];
     
      unset($_SESSION['wk'][$del_id]);
     
  }


Zusammenfassung


Jetzt sind alle Elemente unseres Warenkorbs fertig. Datei artikel_anzeigen.php sieht dann so aus:

PHP Quellcode:
// Wenn 'Zum Warenkorb hinzufügen' angeklickt wurde
if(isset($_POST['add'])) {
      $add_id = $_POST['add'];
     
      $abfrage = 'SELECT bezeichnung, preis FROM tabelle WHERE id = "' . $add_id . '"';
      $query = mysql_query($abfrage);
      if(mysql_num_rows($query) > 0) {
        $data = mysql_fetch_array($query);
        $artikel    = $data['bezeichnung'];
        $preis    = $data['preis'];
       
        $neu = array ('bezeichnung' => $artikel, 'preis' => $preis);
        //Hier wird der Artikel mitsamt Daten gespeichert
        $_SESSION['wk'][$add_id] = $neu;
       
      }
      else {
        echo 'Diese ID gibt es nicht!';
      }
     
    }
// Wenn 'Aus Warenkorb nehmen' angeklickt wurde
if(isset($_POST['del'])) {
      $del_id = $_POST['del'];
     
      unset($_SESSION['wk'][$del_id]);
     
  }

// Ausgabe des Warenkorbs
echo '<h2>Ihr Warenkorb</h2>';
session_start();
    if (isset($_SESSION['wk'])) { // Prüfen, ob Session-Variable für den Warenkorb existiert
      foreach($_SESSION['wk'] as $id => $artikel) {
        echo '<br>ID: ' . $id . ' | ' . $artikel['bezeichnung'] . ' | &euro; ' . $artikel['preis'];
      }
    }
// Ausgabe aller verfügbaren Artikel
$abfrage = 'SELECT * FROM tabelle ORDER BY id';
  $query = mysql_query($abfrage);
 
  while($row = mysql_fetch_object($query))
    {
   
    if(!isset($_SESSION['wk'][$row->id])) {
      $wk = '<form class="iconform" action="" method="post">'.
          '<input type="hidden" name="add" value="'.$row->id.'" />' .
          '<input type="image" src="icons/wk_add.gif" name="ok" /></form>';
         
         
     
    }
    else {
      $wk = '<form class="iconform" action="" method="post">'.
          '<input type="hidden" name="del" value="'.$row->id.'" />' .
          '<input type="image" src="icons/wk_del.gif" name="ok" /></form>';
     
    }

  echo 'Artikel: ' . $row->bezeichnung;
  echo 'Preis: ' . $row->preis;
  echo $wk;
  echo '<hr noshade="noshade" />';
}


Mitwirkende: dsentker
Erstellt von dsentker, 12.12.2008 am 14:49
Zuletzt bearbeitet von dsentker, 27.02.2009 am 10:08
8 Kommentare , 18114 Betrachtungen

Dieser Text steht unter der GNU-Lizenz für freie Dokumentation


 

Lesezeichen

Stichworte
session, warenkorb

Artikel-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Login-Maske mittels Sessions realisieren GRme83 PHP 2 09.11.2007 22:33
Frage zu Sessions und Warenkorb Marco_Bauer PHP 13 07.10.2004 18:20
Warenkorb mit sessions adam PHP 3 29.12.2003 10:58
Problem mit Warenkorb (Sessions) Siniver PHP 3 20.08.2003 17:38
Online-Shop mit Warenkorb realisieren Siniver PHP 3 02.08.2003 14:50


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:38 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by NuWiki v1.3 RC1 Copyright ©2006-2007, NuHit, LLC