Erstellung eines kleinen Pizza-Bringdienst-Shops

  • Hallo.

    Ich brauche Hilfe bei einer Aufgabe die wir im Rahmen von "Praktikum Internetprogrammierung" bekommen haben.

    http://www.abload.de/img/aufgabe5pwq2.jpg

    Ich hänge hier am Anfang fest. Über phpMyAdmin sollen wir das Datenbank-Gerüst erstellen. Wie muss das aussehen? Wie viele Tabellen brauche ich und mit welchen Feldern? Eine Tabelle mit den Infos vom Besteller (Name, Adresse...), eine für die Bestellung und eine für die Zusammenstellung einer Pizza mit den verschiedenen Belägen?? Wie mache ich die Kommunikation unter den verschiedenen Tabellen? Wieviele php-Dateien brauche ich?
    Also ich hänge wirklich am Anfang und bin über jeden Hinweis dankbar.

  • Ay, das Gerüst musst du dir schon selber überlegen. Kommt halt alles rein was du brauchst. Z.B. Tabelle "pizza" mit "name" "preis" usw.

    Wie viele php Dateien du brauchst, musst du auch selbst schauen, dass hängt davon ab wie du das ganze strukturierst (theoretisch kannst mit 1 File arbeiten, ohne Struktur und ohne Struktur ist scheisse).

    Zum Lernen gehört Ausprobieren und Gedankenmachen dazu ;P

    /P.S. Tabellen kommunizieren nicht miteinander... Du kannst in ner Datenbank im Prinzip nur Auslesen und Schreiben.

  • Darin besteht das Problem. Bisher ist es nur wildes rumprobieren. Habe jetzt eine Datenbank namens Pizzen. Darin eine Tabelle "Besteller" mit Name, Ort, ... und einer ID. Darin sollen auf der ersten php, die über Quickform eingegeben Daten gepackt werden. Außerdem soll eine User-ID erstellt werden. Dann habe ich eine Tabelle "Bestellung", darin soll dann die User-ID gespeichert werden, der Gesamtpreis und die bestellten Pizzen (bzw. eine Pizza-ID die zu einer weiteren Tabelle in der dann eine Pizza erstellt wird, mit z.B. Käse, Schinken, Ananas führt) und die Anzahl der Pizzen. Geht das so? Bin da echt ratlos.

  • Und ich bin verwirrt :D

    Tabelle Pizzen - was soll da ein Besteller? Ich würd da nur die vorgefertigten Pizzen reinnehmen. ID + Name + Preis fertisch
    Tabelle Zutaten: ID + Name + Preis
    Eine Tabelle für Bestellungen mit allen nötigen Sachen -fertisch. Is doch easy?

    User-ID kannst ohne Anmeldung vergessen, wenn das sein soll - tja dann mach noch ne User Tabelle?

  • also ich hab sowas mal in java programmiert.. scheint iwie der klassiker zu sein :)

    ich kann ja ma checken ob ich des noch daheim hab- versprechen kann ich nix!

    aber grundlegend haste ja ne aufgabe und in der steht ja drin was du für daten in der db brauchst und was jede einzelne seite können soll und wieviel seiten du bauen musst..

  • Die beste Empfehlung beim Entwerfen so einer Datenbank ist imho immer noch Stift+Papier und lustig Pfeile und Tabellen zeichnen ;)

    Du könntest zum Beispiel in der Tabelle Pizzen eine Spalte Standardpizza und eine Spalte Custompizza machen. Diese haben den Defaultwert 0 und schließen sich gegenseitig aus (Stichwort Radiobutton im Frontend). Wenn in einer der beiden eine Zahl steht, heißt es, es ist eine Fremdid auf eine der beiden unten genannten Tabellen.

    Desweiteren hast du eine Tabelle Custompizzen (die man sich selber zusammenstellen kann) und Standardpizzen (Margherita, Salami, etc). Die Custompizzen bekommen ihren Belag von dem User per Checkboxen mitgeteilt und der wird dort gespeichert (in welcher Form auch immer).

    So würde ich es machen, aber ich bin kein Experte im Datenbankmanagement. Was sagen die anderen dazu?

    Information will frei verfügbar sein.

    Don't eat unpeeled hedgehogs.

  • Zeig uns wenn es fertigs ist dein Ergebniss bin gespannt... Denke auch an den letzen Satz


    Afrael

    Wie man es genau macht ist Geschmackssache wichtig ist das man auf Wiederverarbeitbarkeit achtet (Normalformen), Geschwindikeiten


    Ich persönlich würde ein Spalte nehmen :
    Bei 0 ist es Costum Pizza bei 1 ist es eben die vordefinierte Pizza mit der ID 1 etc

    mfg

  • @Pion Und woher weißt du, welchen Belag die Custom-Pizza hat? Man könnte theoretisch damit arbeiten: negative Zahlen=Custom (guckt man in der Customtabelle nach dem Absolutbetrag der negativen Zahl), positive=Standard. Wobei ich das für irgendwie umständlich halte :/

    Information will frei verfügbar sein.

    Don't eat unpeeled hedgehogs.

  • @Pion Und woher weißt du, welchen Belag die Custom-Pizza hat? Man könnte theoretisch damit arbeiten: negative Zahlen=Custom (guckt man in der Customtabelle nach dem Absolutbetrag der negativen Zahl), positive=Standard. Wobei ich das für irgendwie umständlich halte :/

    Normalformen von Datenbanken scheinen für viele umständlicher bzw sind es oft auch

    ja, man kann es jenachdem wie Variable man das ganze haben will eine Zutaten Tabelle + Zubreitungs/Costomtabelle machen oder eben nur eine Costomtabelle


    mfg

  • Hallo.

    Ich bin jetzt ein ganzes Stück weiter, bräuchte aber nochmal eure Hilfe:

    Die Datenbank besteht jetzt aus 4 Tabellen:

    Tabelle 1: Besteller: Hier werden die Kundendaten (Name,Adresse...) reingeschrieben, klappt auch soweit
    Tabelle 2: Bestellungen: Hier werden die bestellten Pizzen reingeschrieben (4*Salami...)
    Tabelle 3: Gesamtorder: Hier will ich eine ID (mit der ich später die Bestellungen löschen kann), eine zugehörige Kundennummer (die auf einen Eintrag in Tabelle 1 verweist, eine Bestellnummer (verweist auf einen Eintrag in Tabelle 2) und eine Spalte für den Gesamtpreis, der wird aus der Anzahl der Pizzen und den Preisen berechnet.
    Die vierte Tabelle ist dann für die Erstellung von speziellen Pizzen, das steht aber erst später auf meinem Plan.
    Mein Problem ist, dass wenn ich die Daten in die Tabelle schreibe:

    mysql_query("INSERT INTO Besteller (Name,Strasse,Hausnummer,PLZ,Stadt,Telefon)
    VALUES ('$namebesteller','$strassebesteller','$hausnummerbesteller','$plzbesteller','$ortbesteller',$telefonbesteller)");
    $kundennummer = mysql_insert_id();

    erhalte ich als $kundennummer immer nur eine 0. Ich weiß, dass ich bei phpmyadmin was bei der Tabelle einstellen muss. Stichwort: AUTO_INCREMENT?? Ich weiß nicht was ich wo genau einstellen muss. Google konnte mir da auch nicht helfen. Seht ihr grundsätzlich Probleme bei der Struktur? Danke für jede Hilfe

  • mysql_query(....) or die ("MySQL-Fehler: " . mysql_error());

    Anforderung war doch: Die Programmierung ist objektorientiert zu erstellen

    Da sieht man aber herzlich wenig von.

  • Naja ich hab den Verbindungsaufbau, Verbindungsende mit der Datenbank in einer extra Klasse "definiert". Das soll soweit in Ordnung sein, meinte unser Prof.

  • Das soll soweit in Ordnung sein, meinte unser Prof.


    Toller Prof. :(

    Ist zwar auch nicht das Gelbe vom Ei, aber immerhin:

  • Zur ursprünglichen Frage: Du erstellst (sofern nicht schon geschehen) in der Tabelle Besteller eine Spalte mit dem Namen Id, iId oder ähnliches (am besten vor allen anderen Spalten) und definierst die als "Primärschlüssel" (Primary Key je nach Version). Ich hab das phpMyAdmin-Layout nicht im Kopf, evtl musst du eine checkbox anklicken, wo ein Schlüssel drüber ist. Das bewirkt, dass die Datenbank weiß, dass sie die Einträge eindeutig nach dieser ID identifizieren kann.

    Zusätzlich setzt du den Zusatz auto_increment (müsste in einem Dropdown sein). Dieser bewirkt, dass sich die Spalte automatisch um 1 erhöht, wenn ein neuer Eintrag erfolgt.

    Solltest du bereits eine Id-Spalte erstellt haben, kannst du entweder die bestehende löschen und eine neue anlegen oder unter Tabelle bearbeiten ihre Eigenschaften so verändern, wie ich es gerade erklärt habe.

    Information will frei verfügbar sein.

    Don't eat unpeeled hedgehogs.

  • Eine Klasse die nix anderes macht als die Standart Funktionen aufrufen ist sinnfrei.

    Vorallem wenn sich nix ändert wird wie zb Datenbanksystem


    mfg

    2 Mal editiert, zuletzt von Pion (13. April 2010 um 19:02)

  • Vielen Dank bisher. Jetzt brauch ich noch einmal kurz Hilfe:

    Habe jetzt eine Tabelle "Gesamtorder" mit ID, Kundennummer (Verweist auf eine ID in der Tabelle mit den Kundendaten bzw. einer Zeile mit den Daten), Bestellnummer (Verweist auf eine Bestellung) und Preis. Jetzt bastel ich gerade an dem Admin-Bereich. Ich möchte die Bestellungen auflistet, also
    Kunde: Vorname Nachname
    Bestellung: 2* Thunfisch, 1*Salami ...
    dahinter einen Button "Pizza ausgeliefert", und die Bestellung wird aus der Tabelle "Gesamtorder" gelöscht. Wie mache ich das? Ich kriege nur die Daten aus der Gesamtorder ausgelesen, nicht aber die Bestellung, die sich hinter der Bestellnummer verbirgt..

  • Vielen Dank bisher. Jetzt brauch ich noch einmal kurz Hilfe:

    Habe jetzt eine Tabelle "Gesamtorder" mit ID, Kundennummer (Verweist auf eine ID in der Tabelle mit den Kundendaten bzw. einer Zeile mit den Daten), Bestellnummer (Verweist auf eine Bestellung) und Preis. Jetzt bastel ich gerade an dem Admin-Bereich. Ich möchte die Bestellungen auflistet, also
    Kunde: Vorname Nachname
    Bestellung: 2* Thunfisch, 1*Salami ...
    dahinter einen Button "Pizza ausgeliefert", und die Bestellung wird aus der Tabelle "Gesamtorder" gelöscht. Wie mache ich das? Ich kriege nur die Daten aus der Gesamtorder ausgelesen, nicht aber die Bestellung, die sich hinter der Bestellnummer verbirgt..

    Join:

    http://www.tizag.com/mysqlTutorial/mysqlleftjoin.php

  • Eine Klasse die nix anderes macht als die Standart Funktionen aufrufen ist sinnfrei.


    Leider falsch! Es kann durchaus Sinn machen, wenn man Scripte auf unterschiedlichen Plattformen mit unterschiedlichen Datenbankservern laufen lassen will. Was dabei natürlich keinen Sinn macht, die Klasse Cmysql zu nennen. Wenn man z.B. die Klasse Cdb nennt, tausche ich die include-Datei aus und schon kann es ein anderer Server als MySQL sein.

  • Kann Sinn machen aber hier nicht da MYSQL nur verlangt wird, also hat der PROF schon recht das dies ausreicht


    mfg