PHP & HTML - Warenkorb

Pasi123456789

Ensign
Registriert
Mai 2008
Beiträge
202
Hallo Forum!!

Ich und meine Gruppe arbeiten derweil an unserem Abiprojekt, wir programieren einen Online-Shop, und meine Aufgabe ist der Warenkorb.

So, nun bräucht ich eure Hilfe, ich hab nämlich nicht wirklich ne Ahnung :(

Folgendes:

Wir werden den Login-Bereich mit Sessions gestalten, also wenn sich der User einlogt kriegt er quasi Zugang zum "Bestellsystem". Nun ist es meine Aufgabe dass ich dafür sorge dass die Waren, die der User auwählt, auch im Warenkorb unter seinem Namen landen.

Nur wie mache ich das, dass er Anhand der Session "ausliest" welcher Benutzer gerade eingelogt ist? Das ganze soll dann quasi so aussehen:

Benutzer "x" kauft "y"-mal Produkt "z" - So soll das dann in der Warenkorb-Tabelle stehen.

:)
 
Hi,

öhm...was ist denn an Grundlagen schon vorhanden bzw. an Wissen? Wie viel ist schon umgesetzt?

Dein Thread klingt nämlich leider sehr nach "Hier ist mein Projekt, das ist meine Aufgabe, ich kann das nicht, macht ihr das mal".

Gib mal ein bisschen mehr Infos, sonst wird das nichts. Mit den Suchbegriffen "Session" und "Warenkorb" findet man bei Google elendig viele Beispiele... hier z.B. Hast du sowas schon durchgearbeitet?

VG,
Mad
 
Falls die Session schon mit session_start() gestartet wurde, sollten die Daten in $_SESSION stehen. Was da schon drin ist, kannst Du Dir als Starthilfe mit print_r($_SESSION); grob anzeigen lassen.
 
Ich würde den Warenkorb erstmal nur auf dem Client speichern - z.B. in einem Cookie - hat den Vorteil dass wenn er noch nicht bestellt hat, Browser geschlossen/abgestürzt und nochmals kommt, sein Warenkorb noch da ist. Ausserdem ist dann keine Server Interaktion notwendig.
Es reicht wenn Du die ArtikelID und die Menge im Cookie speicherst. Weiterer Vorteil: Der Besucher könnte auch sein Warenkorb ohne Login füllen.

Erst wenn er auf "Bestellen" klickt, übernimmst Du die Daten aus dem Cookie (wichtig: Validieren!). Anhand der ArtikelID holst Du dann für die Bestellliste die zusätzlichen Infos wie Bezeichnung, Preis, etc aus der Datenbank.
 
Zuletzt bearbeitet:
Ich glaub nicht, dass sich ein Anfänger in den Code solcher Projekte reinfuchsen kann.

Aber wurde doch eh alles wichtige gesagt:
- Artikel-ID + Anzahl in n Cookie
- beim Bestellvorgang (Betreten des Warenkorbs) Cookie auslesen und validieren -> Werte in die Session und damit weiter arbeiten
 
er kann die Daten auch gleich in die Session schreiben, macht deutlich weniger Aufwand. Da die Session in nem Cookie gespeichert, hat man das gleiche Verhalten, man muss nur noch die Lebenszeit der Session anpassen.
 
Da die Session in nem Cookie gespeichert, hat man das gleiche Verhalten, man muss nur noch die Lebenszeit der Session anpassen.
Vom Lebenszeit anpassen, halte ich wenig......

Für nicht angemeldete User, sind Cookies nicht die schlechteste Wahl.
Bei angemeldeten Usern dürfte die DB der richtige Ort sein.
Beide Möglichkeiten haben gemein, dass man Session übergreifend arbeiten kann.

Preise, Verfügbar, und ähnliche Daten haben im Warenkorb nichts zu suchen, da redundant und damit potentiell falsch.


Hier mal ein Beispeil für einen Warenkorb in Session:
Code:
<?php
error_reporting(E_ALL|E_STRICT); 
ini_set('display_errors', TRUE); 


$vorrat   = array();
$vorrat[] = 'hemd';
$vorrat[] = 'pulli';
$vorrat[] = 'nagel';


class Warenkorb implements Countable
{

  private $inhalt = Array();

  public function hinzufuegen($artikel)
  {
    if (isset($this->inhalt[$artikel]))
    {
      $this->inhalt[$artikel]++;
    }
    else
    {
      $this->inhalt[$artikel] = 1;
    }
  }
  public function count()
  {
    return  count($this->inhalt);
  }

  public function entfernen($artikel)
  {
    if (isset($this->inhalt[$artikel]))
    {
      if($this->inhalt[$artikel]<=1)
          unset($this->inhalt[$artikel]);
       else $this->inhalt[$artikel]--;
    }

  }

  public function leeren()
  {
    $this->inhalt = Array();
  }

  public function gibkorb()
  {
    return $this->inhalt;
  }
}

session_start();


if(!isset($_SESSION['korb']))
{
  $_SESSION['korb'] = new Warenkorb;
}
elseif(!($_SESSION['korb'] instanceof Warenkorb))
{
  throw new Exception('Warenkorb kaputt (schon mit was anderm belegt)');
}

if(isset($_GET['artikel']))
{
  $_SESSION['korb']->hinzufuegen($_GET['artikel']);
}

if (isset($_GET['entf']))
{
  $_SESSION['korb']->entfernen($_GET['entf']);
}

if (isset($_GET['loeschen']))
{
   $_SESSION['korb']->leeren();
}
?>
<html>
    <body>
        <h1>Warenkorb</h1>
        <a href="?loeschen=1">Warenkorb löschen</a> <br>
<?php
if(count($_SESSION['korb']))
{
  print "Sie haben folgende Artikel ausgewählt:<br> ";
  foreach ($_SESSION['korb']->gibkorb() as $artikel => $anzahl)
  {
    print "Artikel $artikel Anzahl: $anzahl  ";
    print "<a href='?entf=$artikel'>";
    print "Artikel entfernen</a><br>";
  }
}else
{
  print "Bisher nichts ausgewählt";
}

print "	<h1>Folgende Artikel können Sie bestellen</h1>";
foreach($vorrat as $ding)
 print "<a href='?artikel=$ding'>$ding in Warenkorb legen</a><br>";
?>

  </body>
</html>
*nicht für den unmittelbaren praktischen Einsatz geeignet*
 
Zuletzt bearbeitet:
Um Gedanken wie SQL-Inejction kannst du dir später machen, aber ich würde auch den Ansatz einer PHP-Session verfolgen, da man dann in einer DB alles zwischenspeichern kann, gerne noch in einen Cookie die Session-ID damit wenn man schließt auch gleich weiter machen kann ;)
(Oder an die IP und dann eine Zeit festlegen, bzw. schauen ob der User da ist, da müsste man dann schauen)

Letztlich solltest du erst mal die ganzen SQL-Befehle schreiben und durchtesten.
Dann kannst du Schritt für Schritt das ganze runter programmieren.
 
Warum schaust du dir nicht mal jcart an, das ist ganz ihne datenbank und so, einfach mal in den quellcode schauen www. conceptlogic.com/jcart/
 
MONSTER schrieb:
Hehe guter TIP!
Den ganzen Warenkorb dank manipulierten cookies für 1€ zu bekommen wäre schon dreist ;)

Aber weiter mit der Hilfe!

es gibt doch einige opensource onlineshop systeme...

schau dir im Quellcode einfach an wie die es machen.

http://www.shopware.de
http://www.xt-commerce.de
http://www.magentocommerce.com

Unabhängig davon ob die Lösung jetzt gut ist oder nicht, wie soll man wegen einem manipulierten Cookie den Warenkorb für einen Euro bekommen?
 
Beim chShop für Contao würde das gehen, wenn er keinen verschlüsselten Pricekey hätte. Da wird der Preis zusammen mit allen möglichen anderen Infos mit im Cookie übertragen.
Ist aber auch ein Sonderfall, da hier keine Artikelverwaltung im Hintergrund steckt. Ist super, wenn man nur Einzelobjekte oder, noch schlimmer, so n Kram wie Tickets oder Zimmerbuchungen, abhandeln will. Da kann man aus einem beliebigen Formular-Eintrag einen Shop-Artikel machen.
 
Wie gesagt, der chShop ist ein Sonderfall. http://chshop.delahaye.de/
Dadurch, dass keine Artikelliste im Hintergrund liegt, auf dei man per ID zugreifen kann, muss alles direkt im Artikel stehen. Sicher ist es trotzdem, die Verschlüsselung des Pricekey ist mehr als ausreichend. Dafür hat man halt ein wirklich sehr flexibles Grundsystem. Kannst ja mal n Blick auf so n Shop-Artikel werfen, bzw. auf sein Kauf-Formular.
 
Redest du eigentlich die ganze Zeit von Verschlüsselung (AES usw.) oder von einer Signierung der Daten im Cookie (HMAC) ?
Weil das macht schon große Unterschiede.
 
Wenn ich mich richtig an den Code erinner ist der Pricekey (gegen den geprüft wird, ob die Daten plausibel sind) ein Hash. Also so gesehen weder noch.
 
Zurück
Oben