# PHP-Tutorial für einfachen Onlineshop



## Decomposition (2. Februar 2007)

Hallo!

Ich möchte mir einen einfachen Onlineshop erstellen, mit Kategorien, Artikeln, Warenkorb, Bestellfunktion - also nicht viel Schnickschnack. Da ich das System meinen Wünschen anpassen möchte, will ich nicht auf ein fertiges Script zurückgreifen. Ein Tutorial zum Erstellen eines solchen Shops würde mir sehr helfen, da man dort immer alles gut nachvollziehen und dementsprechend ändern kann, wie es einem gefällt.

Kennt ihr ein für mich geeignetes Tutorial?

Liebe Grüße
Markus


----------



## -GS-Master (2. Februar 2007)

Naja du findest eher Tutorials die einzelne Scripte für so einen Onlineshop darstellen, doch einen ganzen Onlineshop denke ich weniger ...

Ich würde mich wenn dann eher nach fertigen Scripten umschauen 
http://www.gfx-world.net/index.php?page=scriptarchiv/scripts&setpos=Scriptarchiv&kat=22

Solltest du dir dennoch die Mühe machen wollen dann schreibe ich hier doch anderes herein ...


----------



## andy72 (3. Februar 2007)

Hi,

...rein vom Aufbau ist jedes ShopSystem fast gleich:
eine DB-Table mit Katalogen,auf dem ein index liegt, eine table mit Warengruppen,
die mit dem index der kataloge verknüpft ist und eine table mit artikeln, wo der index
mit den Warengruppen verknüpft ist. (Wobei ich mit index den "Pirimary Key" meine).

Das ganze lässt sich mit dieser Struktur auf jede Server-Script-Sprache anwenden, egal,
ob nun PHP,CGI oder ASP - einzig interessant ist also zunächst die Basis-Implementierung
in der jeweiligen Script-Sprache:

Was gebracht wird sind also etliche DB-Queries zum auflisten in sämtlichen Variablen
bzw GUI-Komponenten (z.b. comboboxen etc) sowie das anlegen verschiedener Request-
String zwischen Server und Client(Browser), um Abfragen zu generieren.

Das DB-Layout für MySQL kann z.B. so aussehen:
Kataloge - Felder: INT(3) kid PRIMARY KEY NOT NULL AUTO_INCREMENT, VARCHAR(255) title
(INT(3) erlaubt hier 999 Kataloge und hat den Primär-Schlüssel, VARCHAR(255) erlaubt 255 Zeichen als Bezeichnung des einzelnen Kataloges)

Warengruppen - INT[3] wid PRIMARY KEY NOT NULL AUTO_INCREMENT, INT(3) kid, VARCHAR(255) title
(wid = ID der Warengruppe, kid = Verknüpfung zum Katalog...)

Artikelgruppen - INT(3) agid PRIMARY KEY NOT NULL AUTO_INCREMENT, INT(3) wid, INT(3) kid, VARCHAR(255) title

Artikel - INT(10) aid, INT(3) agid, INT(3) wid, INT(3) kid, VARCHAR(255) title, TEXT html, double preis
(aid = Artikel-ID, agid = ArtikelGruppe-ID, wid = Warengruppe-ID, kid = Katalog-ID, html = riesig grosses Textfeld zum speichern kompletten HTML-Inhaltes, double Preis: Achtung, double sollte mit str_replace() im PHP von 00.00 auf 00,00 umgebaut werden 

----------------------------------------------

Was den Rest im PHP betrifft:
Jede Menge Arbeit 


LG
Andy


----------



## splasch (3. Februar 2007)

Hehe ja ein tutorials käme da gleich eines Endlos Projekt.Jede menge Seiten und viel Arbeit bis so ein Online Shop fertig.

Ich selbst schreibe schon ewig lang an einen Online Shop und bin fast auch soweit das man in Online stellen kann.Mal abgesehen davon schleichen sich immer wieder ein parr Fehler ein und noch zahlreiche sonderfunktion werden immer wieder mal benötig bwz im Shop ergänz.So das es immer was zu tun gibt. Allein das Administrator Menü wächst ständig an.

Wenn du wirklich so ein große Projekt im angriff nehmen willst würde ich Dir empfehlen eine gutes Buch zu kaufen über PHP und Mysql.Denn ohne Datenbank ist sowas kaum noch vorstellbar.

Wenn du mal einen kleinen einblick haben wilst wie sowas dann auschaut hier mein Seite:
http://www.hs-arbeitsschutz.com/

Das Shop system ist noch nicht Offizell online nur auf einen speraten Testserver.
Der Shop hat mitterweillen ca 480 Artikeln und 80 verschiedene Kategorien.sowie verschieden größen angaben und Produkt bezogene Versandkosten.Einen Kundenbereich mit Bestellisten einsicht unsw.Auf anfrage kann ich dir auch mal einen einblick auf den Testserver gewähren.

Nur damit du mal eine Vorstellung bekommst wieviel Arbeit in so einen Projekt steckt.


----------



## -GS-Master (4. Februar 2007)

^^ Is halt die Frage ob er sich die Arbeit machen will ^^
Logischerweise würde es "ungefähr" so aussehen wie er es möchte andererseits könnte er shcon vorgefertigte Shop-Scripte benutzen


----------



## Gumbo (4. Februar 2007)

Decomposition hat gesagt.:


> Da ich das System meinen Wünschen anpassen möchte, will ich nicht auf ein fertiges Script zurückgreifen.


In welchem Sinne möchtest du es denn deinen Wünschen anpassen? Was gefällt dir denn nicht an den bereits gesehenen Systemen?


----------



## -GS-Master (4. Februar 2007)

Ups -.- dies hab ich wohl übersehen ^^
Mhm meine Frage dazu ist also ob es jetzt nur um spezielle Funktionen geht oder einfach nur um das Design des jeweiligen "Shop" Systemes


----------



## xCondoRx (4. Februar 2007)

An deiner Stelle würde ich die Finger davon lassen, zumindest, wenn du den Shop auch einsetzen willst. Um einen Shop zu programmieren braucht man nicht nur PHP Kenntnisse, sondern auch kaufmännisches und vor allem "rechtliches" Wissen. Ansonsten hagelt es Abmahnungen.


----------



## Gumbo (4. Februar 2007)

Da solch ein Verkaufssystem auch mit einer Menge vertrauenswürdiger Daten umgeht, muss auch der Datenschutz und die Sicherheit beim Umgang dieser Daten gewährleistet sein.


----------



## Decomposition (4. Februar 2007)

Nunja, es sollte sich ja lediglich um einen recht kleinen Shop handeln. Es geht lediglich darum, dass ich selbstgemachte Artikel über meine Website verkaufen möchte, es ist also wirklich nichts Großes.

Ich habe mal mein altes PHP-Buch herausgekramt und denke, mit dessen Hilfe sollte ich den "Shop" soweit hinbekommen. Allerdings weiß ich überhaupt nicht, wie ich die Verknüpfung zu einem Warenkorb hinbekommen sollte, wie also angeklickte Artikel in den Korb eingetragen werden usw. Das übersteigt dann meine Kentnisse.


----------



## Malaxo (5. Februar 2007)

http://www.phpwebcommerce.com/index.php

Sehr einfach und gut erklärt.

Datenbank Struktur wie auch alle PHP - Files sind erklärt!

Du hast alle arte von Möglichkeiten. Es ist Onilne verwaltbar und einfach nach zu basteln bzw. um zu Strukturieren. Nur das Umstrukturieren musst du dir halt überlegen.

Ich hab mein ersten selbst gemachten Shop auch so erstellt.

Kurz erklärt:
Category: Listet von der DB alle vorhandenen Kategorien auf
Product: Wenn man auf eine entsprechende Category klickt, listet es alle Producte dieser Kategorie auf die in der DB so verankert wurden
Cart: Hier werden die Produkte die man in den Warenkorb legt Mittels Session in die DB geschrieben und aufgelistet.
BestellFormular: Alle im Warenkorb liegenden Produkte können bestätigt wärden und Per e-Mail an die entsprechende Person weitergeleitet werden um die Bestellung zu vollenden. (keine Kreditkartenzahlung) eher Vorauszahlung oder Vertrauen.
Admin: Loginfunktion - Hinzufügen von neuen Kategorien (mit Bilder die sich auch gleich skalieren) Hinzufügen von Produkten in die Kategorien (jeweils auch mit Bilder die sich Skalieren) löschen, editieren etc. alles vorhanden.

Schau dir das online Demo doch an mehr brauchst du kaum. Da sind alle Funktionen und viele mehr beschrieben. Design kannst du dir dann selbst zusammenstellen.

Ich hab mein Shop so erstellt vor einem oder 2 Jahren und bin zufrieden er ist gut erweiterbar.

Viel spass


----------



## Decomposition (7. Februar 2007)

Besten dank, damit werd ich's mal ausprobieren!


----------



## Decomposition (11. Februar 2007)

Der Shop funktioniert an sich problemlos, stoße aber auf ein kleines Problem. Wenn ich im Admin neue Artikel eintrage und ein Bild hochladen möchte, bekomme ich folgende Fehlermeldung:


```
Warning: move_uploaded_file(/www/de/plaincart/images/product/6507869396db32ea2fe34dd3b567206a.gif) [function.move-uploaded-file]: failed to open stream: No such file or directory in /homepages/.../.../.../.../de/plaincart/admin/product/processProduct.php on line 80

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpQyw7Nl' to '/.../de/plaincart/images/product/6507869396db32ea2fe34dd3b567206a.gif' in /homepages/.../.../.../.../de/plaincart/admin/product/processProduct.php on line 80

Warning: Cannot modify header information - headers already sent by (output started at /homepages/.../.../.../.../de/plaincart/admin/product/processProduct.php:80) in /homepages/.../.../.../.../de/plaincart/admin/product/processProduct.php on line 145
```

Der Artikel wird zwar in die Datenbank eingetragen, aber ohne Bild. Der Code für das Hochladen der Bilder in der processProduct.php lautet:


```
/*
	Upload an image and return the uploaded image name 
*/
function uploadProductImage($inputName, $uploadDir)
{
	$image     = $_FILES[$inputName];
	$imagePath = '';
	$thumbnailPath = '';
	
	// if a file is given
	if (trim($image['tmp_name']) != '') {
		$ext = substr(strrchr($image['name'], "."), 1); //$extensions[$image['type']];

		// generate a random new file name to avoid name conflict
		$imagePath = md5(rand() * time()) . ".$ext";
		
		list($width, $height, $type, $attr) = getimagesize($image['tmp_name']); 

		// make sure the image width does not exceed the
		// maximum allowed width
		if (LIMIT_PRODUCT_WIDTH && $width > MAX_PRODUCT_IMAGE_WIDTH) {
			$result    = createThumbnail($image['tmp_name'], $uploadDir . $imagePath, MAX_PRODUCT_IMAGE_WIDTH);
			$imagePath = $result;
		} else {
			$result = move_uploaded_file($image['tmp_name'], $uploadDir . $imagePath);
		}	
		
		if ($result) {
			// create thumbnail
			$thumbnailPath =  md5(rand() * time()) . ".$ext";
			$result = createThumbnail($uploadDir . $imagePath, $uploadDir . $thumbnailPath, THUMBNAIL_WIDTH);
			
			// create thumbnail failed, delete the image
			if (!$result) {
				unlink($uploadDir . $imagePath);
				$imagePath = $thumbnailPath = '';
			} else {
				$thumbnailPath = $result;
			}	
		} else {
			// the product cannot be upload / resized
			$imagePath = $thumbnailPath = '';
		}
		
	}

	
	return array('image' => $imagePath, 'thumbnail' => $thumbnailPath);
}
```

Hat jemand eine Ahnung warum das nicht klappt? Der Autor des Tutorials meldet sich leider nicht ...


----------



## andy72 (11. Februar 2007)

Hast Du die Pfade für den Upload mal nachgesehen ? Die Fehlermeldung deutet auf ein anderes Root-Verzeichnis hin, als das Script,wo es ausgeführt wird. Es kann auch sein, dass bei Dir (Wie fast überall) SafeMode aktiv ist, und du gar nicht schreiben darfst.

das Script versucht ja erstmal, von HIER:
/www/de/plaincart/images/product/6507869396db32ea2fe34dd3b567206a.gif

zu kopieren, wo das Bild ja nicht ist, da es ja in "/tmp/" ist.
Und danach kopiert er offensichtlich richtig, aber das File ist nicht mehr da (in /tmp/), da es beim "Move" gelöscht wird.

LG
Andy


----------



## Decomposition (11. Februar 2007)

Die Pfade sind eigentlich alle richtig gesetzt, deshalb versteh ich das ja nicht ...

Und ich nutze das Script lokal über MAMP (Mac OS X), und laut phpinfo() ist safe_mode deaktiviert.


----------

