kostenloser Webspace werbefrei: lima-city


Shopsystem

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Mit der IP Adresse ist das ganze noch sinnloser. Überleg mal: Jemand stellt einen riesigen Warenkorb zusammen, und grad als er fertig ist, ändert sich seine IP. Alles weg. Er kann nicht bestellen. Außerdem kann jeder, der am selben I-Net Anschluss hängt schnell mal was in den Warenkorb schmeißen, das kann oft in Internetcafés passieren.

    Wieso machst du es nicht einfach mit Tabellenverknüpfungen? Weist du überhaupt was das ist?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Autor dieses Themas

    cam

    cam hat kostenlosen Webspace.

    Dann denk dir die IP-Adresse doch einfach weg, mein Gott. Es geht hier um die ID nicht um die IP.

    Warum kann man eine einfache Frage nicht mit einer einfachen Antwort beantworten? Ich meine, ich bin schon am verzweifeln, weil ich das Script nicht finde, das es 100%ig gibt (auch wenn ich mich hier nur immer wieder wiederhole), weiß nur leider nicht mehr, wo ich es herhatte.

    Und nein, ich weiß nicht, wie eine Tabellenverknüpfung geht, das ist für das, was ich gerade plane, auch nicht notwendig. Ich weiß schon, was ich mache! Ich brauche einfach nur diese blöde ID als Tabellenname - MEHR NICHT! Den Rest überlast mal ruhig meinem zerstörten Hirn, das wird dann schon passen, denke ich. Ich hätte das auch schon vor ewiger Zeit machen können, hatte aber da noch ein Steinchen im Weg, das sich heute aus der Welt geräumt hat und ich mit dem Ansatz, den ich da hatte, weitermachen hätte können, hätte ich es schon vorher gewusst. Nun weiß ich es, aber der Ansatz ist weg. Die Datei verschwunden, gelöscht, weiß der Geier, das Script dafür nicht auffindbar.
  4. Ich erklär dir mal wie man das halbwegs ordentlich macht, mit der IP. (Auch wenn ichs niemals machen würde)

    Erstmal hast du eine Tabelle IP (beispielsweise). In dieser werden jetzt alle Daten gespeichert, die zu einem temporären User gehören. Zum Beispiel Adresse, usw. um ihm die Ware zu zu schicken. Also Tabelle sieht so aus:
    ip name adresse ... bla bla bla

    Dann hast du eine weitere Tabelle im_Wahrenkorb. In dieser wird der IP zugeordnet, was sie kaufen möchte:
    ip art_nr

    Dabei ist art_nr ebenfalls eine ID. Diese taucht in der Tabelle mit den angebotenen Waren auf:
    art_nr name beschreibung ... bla bla bla

    Wenn jetzt jemand etwas in den Warenkorb legen will, dann guckst du erstmal ob eine solche IP existiert:
    1 .... : SELECT * FROM ip_adresses WHERE ip = '127.0.0.1' (Beispiel IP)
    Wenn mysql_num_rows() = 1, kannst du weiter machen.
    Wenn nicht fügst du diese IP hinzu:
    2 .... : INSERT INTO ip_adresses (ip) VALUES ('127.0.0.1')

    Wenn die IP nun sicher besteht, kannst du die Ware eintragen:
    INSERT INTO im_warenkorb (ip, art_nr) VALUES ('127.0.0.1', 138190471290)

    Wenn du jetzt auslesen möchtest, welche Waren nun gekauft wurden, machst du:
    SELECT *
    FROM im_Warenkorb w JOIN artikel a ON w.art_nr = a.art_nr
    WHERE w.ip = '127.0.0.1'

    Hoffe es hilft.
  5. Autor dieses Themas

    cam

    cam hat kostenlosen Webspace.

    Nein, das hilft leider überhaupt nicht. Vielleicht sollte ich doch mal ALLES erklären, wie ich es mache (auch wenn das gar nicht relevant ist und einige bestimmt wieder sagen: oh, mein Gott, so doch nicht!).

    Ich erstelle pro Kunden eine Tabelle (daher soll die ID auch der Tabellenname sein). In diese Tabelle kommen dann die ersten Daten, sobald der Kunde den Shop betritt. Sobald ein Kunde etwas in den Warenkorb legt (ganz egal, ob er es später kauft oder nicht), wird eine neue Spalte hinzugefügt mit der Bezeichnung der Artikel-Nummer und als "value" die jeweilige Menge des Artikels. Wird ein Artikel aus dem Warenkorb gelöscht, wird die komplette Spalte gelöscht. Die komplette Tabelle bleibt so lange erhalten, bis ich die Bestellung entgegengenommen habe und ich sie (derzeit noch) manuell lösche (später dann sofort nach Absendung der Bestellung, wenn ich das Mailen hinbekommen habe, ohne die mail()-Funktion zu benutzen, die ja hier nicht geht).

    So! Ich hoffe, das leuchtet nun jedem ein, dass ich die ID als Tabellennamen brauche. Nichts mehr! Keine für mich unsinnigen Erklärungen, die mich nur noch mehr verwirren. Eine klare Antwort. Es ist doch sicherlich nur ein bis drei Zeilen, oder? Warum können diese nicht einfach gepostet werden mit dem Text: Hier, da ist das winzige Script, das dir verloren ging. Mehr verlange ich doch gar nicht. Ich will von niemandem einen kompletten Shop programmiert bekommen oder erfahren, wie andere es machen, was besser und was schlechter ist, sondern einfach nur diese winzigen Zeilen, die mir entfallen sind, sich in Luft aufgelöst haben oder sonst irgendwas. Es handelt sich hierbei ja auch nicht um ein Hirngespinst, das ich mir mal ausgedacht habe, in der Hoffnung, dass es geht. Ich weiß ja, dass man diese ID als Tabellennamen nehmen kann, daher verstehe ich die Antworten nicht, die um den heißen Brei reden, sich auf andere Dinge konzentrieren und keine konkrete Antwort liefern. Wenn man es nicht weiß: Einfach mal nichts posten, wäre effektiver und weniger nervenaufreibend, als wenn ich bei jedem post erneut die gleiche Frage stellen muss, oder?
  6. aldistammkunde

    Kostenloser Webspace von aldistammkunde, auf Homepage erstellen warten

    aldistammkunde hat kostenlosen Webspace.

    Hi,

    also ich möchte mal versuchen, das ganze hier ein wenig aufzudröseln, für mich klingt es nämlich im moment ein bisschen danach, als würdest du dich da in etwas verlaufen und vor allem ein recht ungeeignetes Datenbank-Konzept verfolgen.

    (1) Sessions:

    Grundsätzlich: mit Sessions kannst du einen bestimmten User auf deiner Seite identifizieren. Kommt ein Benutzer A und hat die Session-ID 12345abcd, dann kannst du per PHP immer wieder den Benutzer über diese Session ansprechen. Dies machst du aber nicht über die Session-ID 12345abcd (die kannst du zuerst fürs programmieren im Prinzip vollkommen vergessen, für die Grundfunktionen brauchst du sie nicht!).
    Stattdessen steht - wie bereits erwähnt - ja zuerst auf jeder deiner Seiten session_start(); als erster Befehl - sämtliches Indentifizierungsgetue und die Verwaltung dieser Session-IDs geschieht vollautomatisch!
    Um jetzt User auf deiner Seite zu unterscheiden könntest du es - und das empfiehlt sich, weil es recht unspektakulär ist - so wie drafed-map sagte, machen:

    drafed-map schrieb:
    Speichere bei dem Login den Username in eine Session:
    <?php
    session_start();
    $_SESSION['username'] = $_POST['username'];

    (alternativ könntest du auch die userid statt des username speichern)

    Dann kannst du in jedem deiner Skripte(also auf jeder deiner seiten) abfragen, was gerade der Inhalt von $_SESSION['username'] ist. Diese Variable $_SESSION['username'] gibt es nun aber eben nur einmal, sondern sie existiert in der Session-Verwaltung von PHP für jeden Benutzer, der sich eingeloggt hat und damit eine solche Variable in die Session geschrieben hat.
    Und das ist genau der Witz dabei:
    Kommt ein Benutzer auf deine Seite, erkennt PHP "aha, der hat also die Session-ID abcdef" (die wird im normalfall automatisch zB über cookies gespeichert) und guckt dann nach, was wurde zuvor in dieser Session mit dieser ID mal als $_SESSION['username'] gespeichert und stellt den zur ID passenden Inhalt dann zur Verfügung.

    (2) Datenbankkonzept
    So wie du es bisher schilderst, klingt es für mich, als wolltest du für jeden Benutzer eine eigene Tabelle anlegen, die Beispielsweise die Felder Vorname, Bestellung, Nachname, Adresse enthält. Das führt dann allerdings dazu, dass du letzten Endes genauso viele Tabellen wie Benutzer hast, die aber jeweils nur einen Datensatz erhalten. Damit machst du quasi viele Vorteile, den dir Datenbanktabellen bieten wieder wett ;)
    Es würde sich viel mehr anbieten zB eine Tabelle Benutzer und eine Tabelle Bestellungen anzulegen.
    In die Tabelle Benutzer werden dann bei Registrierung weitere Nutzer eingetragen; der Spalte id dieser Tabelle gibts du dann das MySql-Attribut auto_increment. Dies sorgt dafür, dass jeder neu eingetragene Benutzer automatisch eine eigene UserId bekommt.
    Die Tabelle Bestellungen könnte dann alle deine Bestellungen von allen Benutzern enthalten. Allerdings würde diese Tabelle dann eine zusätzliche Spalte bekommen, die beispielsweise bestellungVonUser hieße. Bei jeder neuen Bestellung könntest du dann die UserId desjenigen Users, der die Bestellung getätigt hat, im Feld bestellungVonUser speichern - damit wäre dann jede Bestellung eindeutig einem User zuzuordnen.
    Und vor allem: Du kommst bis hierhin mit zwei Tabellen aus, UNABHÄNGIG von der Anzahl registrierter User.

    (2b)Tabellenjoin
    Ich werd das Thema nur kurz anschneiden, damit du ungefähr weißt, was es mit diesen JOINs überhaupt auf sich hat. Grundsätzlich sind die Joins eine Technik, um irgendwie zusammengehörige Daten aus zwei verschiedenen Tabellen gleichzeitig abzufragen und quasi in Verbindung zu bringen.
    Beispiel.:
    Du Willst eine Bestellübersicht einer getätigten Bestellung anzeigen lassen. Auf so einer Übersicht ist eigentlich immer die Lieferadresse zu sehen. Du hast in der Tabelle Bestellungen aber nicht die Adresse des Bestellers gespeichert(gut so!).
    ABER du hast in deiner Bestell-Tabelle die Spalte bestellungVonUser, die die ID des Bestellers erhält. AUSSERDEM hast du in der Tabelle Benutzer irgendwo die ID des Bestellers und dazu sehr wohl die Adresse gespeichert.

    Der (einfachster Fall) Join besteht nun aus dem Koppeln der Daten, du erzeugst dir quasi eine virtuelle Zeile mit Daten aus beiden Tabellen.
    SELECT vorname, nachname,adresse, id, bestellungVonUser, bestelldatum, bestellteArtikel, ....
    FROM Benutzer, Bestellungen
    WHERE Benutzer.id=Bestellungen.bestellungVonUser AND ***andereBedingung***

    Der Punctus Knacktus ist hier die WHERE Bedingung: Du stellst dir damit die eigene Zeilen zusammen, und zwar so, dass sie sich aus den Datensätzen beider Tabellen zusammensetzen. Dabei wird - bildlich betrachtet - zuerst in der Tabelle Bestellungen geguckt, welche ID in bestellungVonUser steht, dann wird in der Tabelle Benutzer geguckt, in welcher Zeile diese in der Spalte id vorkommt und die daten dieser Zeile werden dann einfach an die Daten aus der zuvor "gefundenen" Zeile der Tabelle Bestellungen angehängt.
    Somit hast du dann alles beisammen: Adresse, Bestellung, Bestelldatum, usw.


    Fazit:
    1) Versuche die Session-Geschichte zu verstehen; wenn du es einmal begriffen hast, ist es wirklich kinderleicht in der (simplen) Anwendung.
    2) Überdenke den Aufbau deiner Datenbank
    3) Setz dich ein bisschen mit Tabellenjoins auseinander - die werden früher oder später notwendig, wenn du das doppelt und dreifachspeichern von Informationen und zu viele mysql-Queries vermeiden willst.
  7. So, da du offensichtlicherweise absolut keinen blassen Schimmer von der Funktionsweise von PHP, Sessions oder gar Datenbanken hast, mache ich es kurz:

    session_id() gibt die ID der aktuellen Session zurück. Eine Tabelle erstellst du also wie folgt:
    CREATE TABLE ".session_id()." ..........

    Also:
    <?php
    session_start();
    mysql_connect(...);
    mysql_select_db(...);
    
    mysql_query("CREATE TABLE ".session_id()." .....");
    ?>
  8. e********l

    Ich weiß nicht ob es Mitleid war, aber ich hab mal Google nach einem Tutorial bemüht.

    PHP MySQL Shopping Cart Tutorial: http://www.phpwebcommerce.com/
  9. t*****b

    Trotzdem sollte man seine Datenbank relational aufbauen. Anstatt:

    Tabelle xxx.xxx.xxx.xxx
    id | Spalte1 | Spalte2 | Spalte3
    
    Tabelle yyy.yyy.yyy.yyy
    id | Spalte1 | Spalte2 | Spalte3


    sollte man:

    Tabelle (name)
    id | ip | Spalte1 | Spalte2 | Spalte3
    
    Einträge:
    1 | xxx.xxx.xxx.xxx | wert | wert | wert
    2 | yyy.yyy.yyy.yyy | wert | wert | wert


    verwenden.

    Zuweisung dann über SELECT * FROM Tabelle WHERE ip = $ip

    statt

    SELECT * FROM $ip
  10. Weißt du eigentlich wieviel Datenmüll dann anfällt?
    Jeder der deine Website dann betritt erstellt eine eigene Tabelle und legt Sachen in den Korb und dann willst du das per Hand löschen?
    Vor allem wenn er nicht abschickt, also nur in den Warenkorb legt und du deshalb nicht weißt, ob dus löschen kansnt oder nicht.

    Außerdem hält eine Session nur für einen Besuch, dass heißt wenn jemand mehrmals auf deine Website kommt (je nachdem für wie lange du die Session gültig machst) wird immer ne neue Tabelle erstellt.

    Ich finde das würde mit den Normalformen besser gehn und per Timestamp könnten automatisch veraltete und nicht abgeschickte Datensätze gelöscht werden. Aber sowas muss man als Anfänger noch lernen und sich helfen lassen.(nicht böse gemeint)

    Beitrag zuletzt geändert: 14.10.2009 10:59:29 von reimann
  11. Autor dieses Themas

    cam

    cam hat kostenlosen Webspace.

    Soweit hab ich das jetzt, glaub ich, verstanden mit den zwei Tabellen etc., aber bei mir trägt sich einfach nichts in die erste Tabelle ein, wenn ich die Seite aufrufe. Hier mal der Code, den ich genommen habe:

    session_start();
      $_SESSION['kunde'] = $_POST['kunde'];
      //an dieser Stelle kommt der connect zur Datenbank
      $anfrage="INSERT INTO kunden VALUES ('0','";
      $anfrage.=$kunde;
      $anfrage.="','0','0','0','0','0','0','0','0'";
      mysql_query($anfrage);
      mysql_close($db);


    Ich weiß einfach nicht, wie ich eine Session starten und auswerten muss, damit diese auch weiterhin erkannt wird. Ich kann mir das nur so erklären, dass auch diese in der Tabelle "kunden" gespeichert werden muss, um später wiedererkannt zu werden, oder? Oder muss ich auf der Startseite noch gar nichts in die Tabelle eintragen, sondern das ergibt sich erst, wenn der Kunde etwas in den Warenkorb legt?

    Und was ich auch noch nicht verstanden habe, wenn ich wirklich mit nur zwei Tabellen arbeiten soll, ist:

    Ich habe ja eine Datei, die "kaufen.php" heißt. Mit deren Hilfe sollen die Waren in den Warenkorb gelegt werden. Dann muss ich doch aber wieder alle einzelnen Artikel abfragen, ob diese in den Warenkorb gelegt wurden, oder? Gibt es da etwas vereinfachteres, was nur das abruft, was ausgefüllt wurde?

    Beispiel: Ich habe bei Artikel xy die Menge 1 eingegeben, das heißt, ich möchte den Artikel xy einmal kaufen. Nun muss die PHP-Abfrage von kaufen.php aber doch immer noch alle einzelnen Artikel abfragen, also oben auswerten, unten hinzufügen (will jetzt nicht das script posten, ist mir zu lang - ich hoffe, man versteht es so - aber das bezweifle ich mal wieder).

    Ich kann ja auch schlecht für jeden Artikel noch eine extra Abfrage-Datei machen. Dann hätte ich ja schon drei Seiten für nur einen Artikel: die Seite, wo alle Artikel dieser Rubrik sind, die Details-Seite und die Seite, wo NUR dieser Artikel in den Warenkorb gelegt wird. Wäre das nicht auch zu aufwändig?
  12. e********l

    cam schrieb:
    Oder muss ich auf der Startseite noch gar nichts in die Tabelle eintragen,

    Yepp.
    cam schrieb:
    sondern das ergibt sich erst, wenn der Kunde etwas in den Warenkorb legt?

    Yepp

    cam schrieb:
    Ich habe ja eine Datei, die "kaufen.php" heißt. Mit deren Hilfe sollen die Waren in den Warenkorb gelegt werden. Dann muss ich doch aber wieder alle einzelnen Artikel abfragen, ob diese in den Warenkorb gelegt wurden, oder? Gibt es da etwas vereinfachteres, was nur das abruft, was ausgefüllt wurde?

    Du legst nur die IDs der Artikel in deinem Warenkorb ab und bei jedem Seitenaufruf musst du die Informationen die zu den IDs gehören ermitteln!

    cam schrieb:
    Beispiel: Ich habe bei Artikel xy die Menge 1 eingegeben, das heißt, ich möchte den Artikel xy einmal kaufen. Nun muss die PHP-Abfrage von kaufen.php aber doch immer noch alle einzelnen Artikel abfragen, also oben auswerten, unten hinzufügen (will jetzt nicht das script posten, ist mir zu lang - ich hoffe, man versteht es so - aber das bezweifle ich mal wieder).

    Wenn der Artikel (die ID des Artikels) schon in deinem Warenkorb vorhanden ist, dann erhöhst du einfach seine Anzahl Variable oder legst die ID ein zweites Mal ab.

    cam schrieb:
    Ich kann ja auch schlecht für jeden Artikel noch eine extra Abfrage-Datei machen. Dann hätte ich ja schon drei Seiten für nur einen Artikel: die Seite, wo alle Artikel dieser Rubrik sind, die Details-Seite und die Seite, wo NUR dieser Artikel in den Warenkorb gelegt wird. Wäre das nicht auch zu aufwändig?

    Wieso extra Abfrage Datei?


    statischerWarenkorb.php
    session_name('mein_shop');
    session_start();
    
    // statische Warenkorb Daten zwecks Demonstration.
    // ARTIKEL DATEN
    // ID / NAME / 
    // 1 / Apfel
    // 2 / Banane
    // 3 / Saft
    $artikelBestand = array('1' => 'Apfel', '2' => 'Banane', '3' => 'Saft');
    
    $_SESSION['WARENKORB']['ARTIKEL'] = array();
    $artikelListe = $_SESSION['WARENKORB']['ARTIKEL']; // shortcut auf die artikel session variable
    $artikelListe['1'] = 2; // 2 Äpfel
    $artikelListe['2'] = 5; // 5 Bananen
    
    // Warenkorb ausgeben
    foreach ($artikelListe as $key => $val) {
         // gibt es diesen Artikel?
        if (isset($artikelBestand[$key]]) {
            echo 'Name: ' . $artikelBestand[$key] . ' Menge: ' . $val . '<br />' . PHP_EOL;
        }
    }


    irgendeineDatei.php
    session_name('mein_shop');
    session_start();
    
    // Saft zum warenkorb hinzufügen
    $artikelListe = $_SESSION['WARENKORB']['ARTIKEL']; // shortcut auf die artikel session variable
    $artikelListe['3'] = 3; // 3 mal Saft


    zeigeWarenkorb.php
    $artikelListe = $_SESSION['WARENKORB']['ARTIKEL']; // shortcut auf die artikel session variable
    
    // Warenkorb ausgeben
    foreach ($artikelListe as $key => $val) {
         // gibt es diesen Artikel?
        if (isset($artikelBestand[$key]]) {
            echo 'Name: ' . $artikelBestand[$key] . ' Menge: ' . $val . '<br />' . PHP_EOL;
        }
    }



    Wichtig ist halt das du IMMER session_star() am Anfang der Datei aufrufst!
  13. Autor dieses Themas

    cam

    cam hat kostenlosen Webspace.

    Hab ich das jetzt richtig verstanden, dass ich quasi zwei Dateien für den Warenkorb habe: eine, in der alle Artikel eingetragen werden (sprich die leere Tabelle ausgelesen wird - oder muss ich das alles noch einmal manuell in die Datei eintragen) und eine, die zeigt, was tatsächlich drin ist. Aber die irgendeineDatei wäre doch dann wie meine kaufenDatei, denn da müsste die Anfrage doch wieder alle einzelnen Formularfelder abfragen, ob darin etwas steht oder nicht ... oder?

    Achso, Moment, die erste Datei zeigt quasi den Lagerbestand an, richtig? Und wenn ein Artikel nicht mehr verfügbar ist, wird dies entsprechend angezeigt, ja?

    Ohje, da sagt ihr, das alles sei einfach und ich komme immer mehr durcheinander. Vor allem, weil in den Beispielen Bezeichnungen vorkommen, mit denen ich nichts anfangen kann, die mir also nicht einmal sagen, was diese bezwecken :(.

    Ich weiß leider auch nicht, wie ich mir das nötige Wissen aneignen kann. Wegen Sessions habe ich mir inzwischen bereits vier Bücher gekauft, in denen etwas über Sessions steht, aber keines bringt mich wirklich weiter :(. Wie habt ihr das denn gemacht, um damit klarzukommen? Was ist quasi der beste Ansatz? In meinem Umfeld gibt es leider auch niemanden, den ich fragen könnte, deshalb stelle ich auch immer meine (für andere unverständliche oder selbstverständliche) Fragen ins Forum. Vielleicht liegt es auch daran, dass die meisten Webseiten zu den Themen auf Englisch sind und ich mit meinem Grundenglisch kaum ein Wort verstehe :(.
  14. e********l

    Naja, Englisch sollte man beim programmieren schon können.

    @anfangen: NIcht aufgegeben und sehr viel ausprobiert und vor allem klein angefangen.

    Die Dateistruktur von einem Webshop könnte im einfachsten Fall aus folgenden Dateien bestehen

    config.php (beinhält DB-Anbindung und grundlegendes Session Handling)

    warenkorb.php (zeigt einem den warenkorb im detail an)
    index.php (startseite des shops mit einer Auswahl an zufällig gewählten Produkten)
    shop.php (Darstellung der Kategorien und Artikel)
    artikel.php (Detail-Darstellung eines Artikels)
    kasse.php (bezahlen und derlei Dinge)

    Das wären so die 5 Dateien die der Benutzer aufrufen können sollte. Dazu gesellen sich dann entsprechend noch einige interne Dateien die dafür sorgen das die Logik gekapselt ist und man nicht alles doppelt und dreifach schreiben muss.
    Die Config Datei wird von jeder der 5 letzten Dateien eingebunden!

    nikic: Da das Thema (glücklicherweise :smile:) vom ursprünglichen Problem abweicht, habe ich den Thread in "Shopsystem" umbenannt, geht das klar?

    Beitrag zuletzt geändert: 14.10.2009 15:24:24 von nikic
  15. Autor dieses Themas

    cam

    cam hat kostenlosen Webspace.

    So, ich hab jetzt einfach mal klitzeklein mit zwei Artikeln angefangen. Aber ich verstehe noch immer nicht, wie ich dem PHP-Script klarmachen soll, welchen Datensatz er für einen bestimmten Kunden als Warenkorb anzeigen soll *soifz*.

    Ich hab bis jetzt drei Dateien (ich zeige jetzt mal nur die nötigen Script-Passagen, sonst wird das hier zu lang):

    shop.php:
    //ganz oben steht
    <?php
      session_start();
      $_SESSION['kunde'] = $_POST['kunde'];
    ?>
    //so sieht der Teil aus, wo die Menge eingegeben und mittels Button bestätigt wird
    Menge: <input type="text" name="9937" class="form" size="3" /> 
    <input type="submit" value="OK" size="2" class="form" />


    kaufen.php:
    //oben wieder
    <?php
      session_start();
      $_SESSION['kunde'] = $_POST['kunde'];
    ?>
    //weiter unten kommt
    <?php
    	    $nullnullnulleins=$_POST['0001'];
    		$nullnullnullzwei=$_POST['0002'];
            //hier der connect zur Datenbank
            $anfrage="INSERT INTO bestellung VALUES ('0',now(),'";
    		$anfrage.=$nullnullnulleins;
    		$anfrage.="','";
    		$anfrage.=$nullnullnullzwei;
    		$anfrage.="')";
            mysql_query($anfrage)
                or die("<b>System &uuml;berlastet! Bitte versuchen Sie es zu einem sp&auml;teren Zeitpunkt
    			erneut</b>");
            print("Der Artikel wurde erfolgreich in Ihren Warenkorb gelegt.");
            mysql_close($db);
    	  ?>


    Soweit funktioniert das super. Es wird eine ID für den Kunden angelegt, die jeweilige Menge erscheint in der Tabelle (aber das hatte ich ja so auch schon vorher bei meinem Shop, ohne mit Sessions zu arbeiten)

    Die dritte Datei soll nun warenkorb.php sein, aber da komme ich nicht weiter, sprich ich habe nur oben den Session-Start und weiter unten den connect zur Datenbank.
  16. e********l

    Was mir schon seit Eins unklar ist, warum du die KundenID via $_POST['kunde'] erzeugst. Wenn jemand auf die Seite gelangt gibt es keine URL Parameter und schon gar nicht in der $_POST Globale.

    @warenkorb problem: Du musst sofern du die Daten direkt in der Datenbank speicherst auch die jeweilige KundenID die du erzeugt hast in der Datenbank ablegen. Wenn dies geschehen ist kannst du einfach mit einer Select...Where auf die Daten des jeweiligen Kunden zugreifen.
  17. Autor dieses Themas

    cam

    cam hat kostenlosen Webspace.

    Öhm, dieses Post-Zeugs stammt nicht von mir ;) ... das hat hier jemand anderes gepostet, dass ich das so machen muss. Ich hätte das einfach mit $id = session_id() gemacht. Aber ging dann davon aus, dass das nicht geht.

    Ja, schon kann ich das mit Select machen. Aber woher weiß die Session-ID zu welcher Kunden-ID sie gehört? Das ist meine einzige Frage. Ich hab einfach Bammel, wenn ich das jetzt auslesen lasse, dass alle Datensätze angezeigt werden bzw. gar nichts. Weil noch begreife ich das mit den Sessions ja nicht wirklich, sprich wo das gespeichert wird, wie das funktionieren soll, wenn man nicht definiert, dass diese Session zu dieser Kunden-ID gehört :(.
  18. e********l

    Naja, zunächst solltest du das $_POST['kunde'] entfernen.

    Eine einfache KundenID könnte zb. über einen Zufallsgenerator erzeugt werden.
    session_start(); // session starten
    
    // erzeuge die ID des Kunden nur, wenn sie noch nicht existiert
    if (!isset($_SESSION['kunden_id'])) {
         $_SESSION['kunden_id'] = md5(uniqid(rand())); // md5 hash als id der über uniqid und rand erzeugt wurde
    }
    
    echo $_SESSION['kunden_id'];  // unsere kunden id =)


    Die KundenID die wir oben erzeugt haben schreibst du in deine Bestellungen Tabelle bei jedem Eintrag mit rein. Zb. in das Feld KundenID und dann beim auslesen mit

    $queryString = "select * from bestellungen where KundenID = '".mysql_real_escape_string($_SESSION['kunden_id'])."'";

    bekommst du nur die Bestellungen des jeweiligen Kunden zurückgeliefert.
  19. Wieso nimmst du nicht einfach die Kunden ID, die MySQL mit "auto increment" erzeugt? Dann könnte man damit auch wunderbar mit der Where-Bedingung in einem Selekt-Befehl verwenden.
  20. Autor dieses Themas

    cam

    cam hat kostenlosen Webspace.

    super, endlich mal etwas, das ich tatsächlich auf Anhieb begriffen habe :D.

    Diese Auto-ID hatte ich ja bis vorhin, ich wusste halt nur nicht, wie ich dies mit der Session in Einklang bringen kann. Aber das wird schon, das wird schon.

    Aber *oh soifz* ich hab schon wieder eine Frage :(. Ich nehme mal an, ich muss den Inhalt des Warenkorbs, damit jeder Artikel wunderbar einzeln in Tabellen angezeigt wird, als while-Schleife einbringen, oder? Sprich, wenn irgendwo ne Zahl (also eine Mengenangabe für einen Artikel) steht, muss er diesen Artikel als Tabellenzeile einfügen ... richtig? Ich hab sowas schon mal für komplette Datensätze gemacht und müsste mal in meinem schlauen Buch nachschauen, wie das ging (ja, ich weiß, auswendig wissen, wäre von Vorteil :D). Aber wie geht das bei einzelnen Spalten. Muss ich jede einzelne Spalte abfragen, genauso wie beim Eintragen? Sprich, wäre dann vielleicht je eine if-Schleife pro Artikel angebrachter?

    Die einzelnen Artikel müsste ich ja quasi auch in einer Extra-Tabelle anlegen, wo dann die Artikel-Nr., der Preis und die Bezeichnung (vielleicht auch der vorhandene Lagerbestand) enthalten sind, oder?
  21. e********l

    Mit der SQL Anweisung bekommst du ein ResultSet zurück das auf deine Where Bedingung passte. Das können zb. 200 Zeilen sein, wenn so viele passende Bestellungen zum Benutzer gefunden wurde. Und die Ausgabe selbst geschieht dann wie du schon sagtest im leichtesten Fall mit einer While Schleife.

    @autoincrement: Naja, das ist jetzt halt der Knackpunkt bei deinem Shop-Design. Normalerweise schreibt man die Bestellungen die abgeschlossen werden in die Datenbank. Der Warenkorb selbst wird bis zur Fertigstellung des Einkaufs in der Session gehalten und bei Bedarf in einer Statistik-Tabelle hinterlegt.
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!