# Warenkorb mit Sessions?



## qpek (29. März 2012)

*Einfaches SHOP-CMS selbst schreiben | Fehler im SQL Syntax oder in der Ausgabe?*

Hallo liebe Community,

ich soll für meine Firma einen kleinen Webshop errichten in dem man Objekte zum Warenkorb hinzufügen oder löschen kann. Wir haben die Seite "Produkte", wenn man auf diese klickt
wird einem der Warenkorb im Hauptfenster ausgegeben und in den Sub-Kategorien unter der Navigation kann man die Produktkategorien auswählen.

Im Warenkorb möchte ich das Produktname, Kategorie und Preis angezeigt wird und am
Ende ein komplett zusammengerechneter Preis entsteht.

Wenn man fertig mit "einkaufen" ist, kann man den Warenkorb einkaufen.
Im nächsten Fenster gibt man dann Namen, Adresse, Telefonnummer und E-Mailadresse ein. Daraufhin wird uns eine Mail mit der Produktliste und den Kundendaten übergeben und der Kunde muss dann auf den Bestätigungsanruf warten (Sicherheit vor Fakebestellungen).

Gibt es irgendwo eine grobe Anleitung (nur für den Warenkorb, den Rest bekomme ich selbst hin) ?
Achja und ich bin Auszubildender in meinem Betrieb und habe zurzeit keinen Ausbilder daher frage ich hier nach.
Danke,

Dominik.


----------



## Yugeen (29. März 2012)

Hier habe ich mal was gefunden vlt. kannst du damit was anfangen ^^
http://www.php-resource.de/tutorials/tutorial,76,Eines-Warenkorbsystem-fuer-Anfaenger,1.htm


----------



## qpek (30. März 2012)

Danke , ich gucks mir mal durch. 

Hab mich gestern auch hauptsächlig mal mit OOP beschäftigt und denke mal das man da ne Menge zusammen bekommen kann.

Edit:

Ich hab mir jetzt was aus Methoden in einer Klasse zusammengebaut, funktioniert soweit eigentlich auch. Zumindest werden alle Produkte der Kategorie "PKW" ausgegeben sobald die pageid = 0 (pkw) ist.

Das Problem ist jedoch, das sich meine while($zeile = mysql_fetch_array($result)) - Schleife immer und immerwieder abspielt wodurch die Seite in Sekunden zugebombt mit Artikeln ist und es nichtmehr aufhört.

Meine Quellcodes sehen wie folgt aus:


```
<?php
	
	class simpleShop {
		// Shop-Titel wird Festgelegt
		// Shop-Besitzer wird Festgelegt
		// Seiten-Directory wird festgelegt
		// Template-Directory wird festgelegt
		// Kategorien werden in Arrays gespeichert
		// PageID wird initialisiert und auf 0 gesetzt
		
		public $title = "";
		public $inh = "";		
		public $sitedir = "sites/";			
		public $tmpdir = "templates/";		
		public $sitename = array("PKW","LKW","Kunststoff","Keramik","Industrie","Marine","Zubehoer");	
		public $pageid = 0;					
		
		protected $host = "";		// MYSQL-HOST
		protected $user = "";			// MYSQL-USER
		protected $pass = "";			// MYSQL-PASS
		protected $db = "shop";				// MYSQL-DB
		
		// Funktion zum Abrufen der Kopfdaten
			// Kopfdatei wird eingebunden
		public function getHead()											
		{
			include $this->tmpdir."head.tmp";								
		}
		
		// Funktion zum Abrufen der Footer-Daten
			// Footer wird eingebunden
		public function getFooter()											
		{
			include $this->tmpdir."footer.tmp";								
		}
		
		// Funktion zum Abrufen des Contentbereiches
			// Überprüft ob die GET-Variable "p" gesetzt ist und setzt dann die pageid auf die GET-Variable
			
			// Sollte die PageID höher als 6 oder kleiner als 0 Sein wird die 404.php ausgegeben
			
			// Ansonsten wird die Datei eingebunden die an der Array-Stelle der Siteid steht
			
			
		public function getContent()										
		{
			if(isset($_GET['p']))
			{
				$this->pageid=$_GET['p'];									
			}
			if($this->pageid >= 7 OR $this->pageid <= -1)
			{
				include $this->sitedir.'404.php';							
			}
			else
			{
			include $this->sitedir.$this->sitename[$this->pageid].".php";	
			}
		}
		
		// MYSQL - Verbindung wird aufgebaut
		function getConnection()											
		{
			mysql_connect($this->host,$this->user,$this->pass) or die ("Keine Verbindung zum Shop-Server möglich.");
			mysql_select_db($this->db) or die ("Keine Verbindung zur Produkt-Datenbank möglich.");
		}
		
		// Funktion um Produkte aus der Tabelle shop_products zu holen ($category)
			// Alle Produkte aus Tabelle holen bei denen die Kategorie = $category ist.
			// In $Result gespeichert und
			// Ausgegeben
		public function getProducts($category)								
		{
			$sql = " SELECT * FROM shop_products WHERE category = ".$category;	
			$result = mysql_query($sql);										
			return $result;														
		}
		
		// Funktion zum Anzeigen der Produkte
			// wenn kein Fehler auftritt wird die Tabelle ausgelesen, wenn doch - wird der mysql_error ausgegeben
		public function showProducts()										
		{
			if($this->getProducts($this->sitename[$this->pageid]))			// wenn kein Fehler auftritt wird die Tabelle ausgelesen, wenn doch - wird der mysql_error ausgegeben
			{
				while($zeile = mysql_fetch_array($this->getProducts($this->sitename[$this->pageid])))
				{
					
				}
			} else {
				echo mysql_error();
			}
		}
	}
?>
```


Wie gesagt, meine Abfrage an die Datenbank und die Ausgabe wiederholen sich Periodisch.
Sieht jemand einen Fehler in der Abfrage bzw. Ausgabe?




Danke erstmal!


----------



## Yugeen (30. März 2012)

Finde jetzt so auf die schnelle keinen Fehler :/ 

Wir wird das ganze den aufgerufen?


----------



## qpek (30. März 2012)

Ich hatte auf der Seite pkw.php einfach wieder das hier:


```
<?php
 $cms = new simpleShop();

$cms->getProducts('pkw');
$cms->showProducts();

?>
```


----------



## Maniac (30. März 2012)

Funktioniert es so?

```
public function showProducts()                                        
        {
            if($query = $this->getProducts($this->sitename[$this->pageid]))            // wenn kein Fehler auftritt wird die Tabelle ausgelesen, wenn doch - wird der mysql_error ausgegeben
            {
                while($zeile = mysql_fetch_array($query))
                {
                    
                }
            } else {
                echo mysql_error();
            }
        }
```

Edit: ja dein Aufruf wäre am Anfang wichtig gewesen, trotzdem würde ich der Übersichthalber es so schreiben wie in meinem Beispiel.


----------



## qpek (30. März 2012)

Ich probiers am Montag gleich mal.
Hab den Code leider gerade nicht daheim.

Vielen Dank.


----------

