Warenkorb - nur wie?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Warenkorb - nur wie?

    Hallo Forum

    Ich habe mir eine kleine Movie-Liste mit all meinen eigenen DVDs gemacht. Nun leihe ich Kollegen oft DVDs aus (und bei 300 DVDs verliert man da schon mal den Überblick ). Also dachte ich ich könnte das ganze mit einer Art "ausleih"-Shop besser in den Griff bekommen (kostenlos, versteht sich).

    Die User können sich einloggen. Ein User sollte höchstens 3 DVDs in den Warenkorb aufnehmen können. Jetzt wie soll dieser Warenkorb aussehen?

    Ich nehme mal an dass das Ganze mit einer $_SESSION-Variabel gespeichert wird. Aber wie genau... ich habe mir gedacht vllt mit einem String in dem die IDs abgetrennt sind, also z.B. "235||45||456" und dann könnte ich das ganze dann mit der explode()-Funktion auseinander nehmen und dann die Infos der entsprechenden IDs aus der Datenbank abfragen. Und wenn ein neuer Artikel hinzugefügt wird einfach

    PHP-Code:
    $_SESSION["warenkorb"] = "".$_SESSION["warenkorb"]."||id" 
    Bin ich da total auf dem Holzweg oder gibt es noch bessere Möglichkeiten?

  • #2
    Bin ich da total auf dem Holzweg oder gibt es noch bessere Möglichkeiten?
    Beides

    An sich ist deine Variante sicherlich möglich, aber Sinnvoll sieht sie nicht aus. Du kannst auch komplette Arrays in deine Session schreiben, damit wird das Session-Array Mehrdimensional. Du gibst dem Session-Array z.B. einen Datensatz mit dem Index "warenkorb" und in dem befindet sich wiederrum ein array, in dem die IDs der einzlenen DVDs stehen, und schon hast du alle im Warenkorb befindlichen IDs schön sauber aufbewahrt.
    Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

    Kommentar


    • #3
      Oke danke für deine Antwort. Ja das mit den arrays hab ich mir noch halb gedacht, dass es vorgeschlagen wird . Leider hab ich (mehr oder weniger) keine Ahnung von Arrays . Ausser wenn ich ein MySQL-Resultat in ein Array speichere, weiss ich wie ich welche Werte Abrufen kann... aber in dem Fall werde ich mich mit den Arrays mal beschäftigen (wird eh mal Zeit ).

      Kommentar


      • #4
        Richtig!

        Arrays können in vielen Situationen eine Menge helfen, wie z.B. auch in deinem Fall. Alles was man darüber wissen muss steht glücklicherweise auch hier.
        Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

        Kommentar


        • #5
          Oke habe mir das Thema kurz durchgelesen und mir folgenden Code geschrieben:

          Einmal die add_warenkorb.php:
          PHP-Code:
          <?php 
          // Session starten
          session_start ();

          // Datenbankverbindung aufbauen 
          include("includes/config.php");

          // Die Film-ID dem Array hinzufügen 
          $warenkorb[] = "".$_GET["id"]."";


          // Das neue Array in eine $_SESSION-Variable speichern
          $_SESSION["warenkorb"] = $warenkorb;

          // Wieder zu den Movie-Details des hinzugefügten Movies zurückkehren
          header ("Location: show_movie.php?id=".$_GET["id"].""); 

          ?>
          Und in der Datei show_movies.php folgende Line:
          PHP-Code:
          <a href="add_warenkorb.php?id='.$movie["filmid"].'">In den Warenkorb</a
          Ist das so wie du es gemeint hast? Also funktionieren tut es, wenn ich es Ausgebe mit:
          PHP-Code:
          '.$_SESSION["warenkorb"][0].' '.$_SESSION["warenkorb"][1].' 
          Klar muss ich dass dann noch mit einer for-Schleife ausgeben, aber ist ja nur mal zum testen. Gibt es da (ziemlich sicher ) noch Verbesserungen?
          Zuletzt geändert von pascal007; 26.05.2007, 12:51.

          Kommentar


          • #6
            nur kurz, was mir so aufgefallen ist.

            $warenkorb[] = "".$_GET["id"]."";

            die leerstrings vorne und hinten kannst du dir sparen - sinnfrei (ebenso bei header...).
            außerdem, wenn du warenkorb der session zuweist, überschreibst du alle alten werte.
            und alles was von außen kommt, ist potentiell böse, also vorher $_GET['id'] überprüfen.

            header ("Location: show_movie.php?id=".$_GET["id"]."");

            die id hast du bereits in der session, also ist es überflüssig, sie nochmals per url-parameter zu übertragen.

            Kommentar


            • #7
              PHP-Code:
              // Die Film-ID dem Array hinzufügen 
              $warenkorb[] = "".$_GET["id"]."";


              // Das neue Array in eine $_SESSION-Variable speichern
              $_SESSION["warenkorb"] = $warenkorb

              Kannst du simplerweise zusammenfassen zu

              PHP-Code:
              // Neue ID in den Warenkorb legen
              $_SESSION["warenkorb"][] = $_GET['id']; 
              Dann hast du auch nicht das Problem das der alte Warenkorb bei der Zuweisung überschrieben wird. Zu dem was 3DMax bereits sagte würde ich auch noch prüfen, ob die übergebene ID bereits im Warenkorb ist, um zu vermeiden, dass sie zwei mal reinkommt.
              Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

              Kommentar


              • #8
                Okey, aber sonst kann ich auf dem Code-"Schnipsel" den ich da geschrieben habe aufbauen? Also ist es so, wie du es dir vorgstellt hast?

                Dann habe ich noch eine Frage. Ich möchte ja jetzt die Infos zu den Filmen noch abfragen.

                Nur: ich weiss nicht wie viele Filme da drinn sind.

                Eine Abfrage würde ja so aussehen:
                PHP-Code:
                $selectmovies mysql_query("SELECT * FROM tabelle 
                WHERE id = '"
                .$_SESSION["warenkorb"][0]."' OR '".$_SESSION["warenkorb"][1]."'"); 
                Jetzt hab ich ja aber keine Ahnung wie viel Movies der User ausgewäählt hat und folglich kann ich ja keine richtige MySQL-Abfrage machen. Könnt ihr mir da nen kleinen Denkanstoss geben, wie ich das bewerkstelligen kann?

                EDIT Habe auch gerade noch gesehen dass es mit dem löschen eines Arrays-Elements (wenn ich 3 habe) z.B. mit 2 ein Problem gibt, da ja dieses dann nicht mehr existiert und bei einer for-Schleife ja dann ein Fehler auftritt... aber zuerst möchte ich mal die MySQL-Abfrage richtig hinbekommen.
                Zuletzt geändert von pascal007; 26.05.2007, 14:08.

                Kommentar


                • #9
                  Original geschrieben von pascal007
                  Jetzt hab ich ja aber keine Ahnung wie viel Movies der User ausgewäählt hat und folglich kann ich ja keine richtige MySQL-Abfrage machen.
                  ich denke, du möchtest die anzahl auf drei begrenzen?
                  also müsstest du schon in deiner add_warenkorb.php mit count($_SESSION['warenkorb']) die anzahl überprüfen. hier müsstest du ferner noch ein flag in der db setzen, dass der film schon ausgeliehen ist (parallelzugriff).
                  bei dieser gelegenheit würde ich gleich noch alle details des films in der session speichern.

                  Kommentar


                  • #10
                    Also ich habe bei der Tabelle in welcher die Filme drinn gespeichert sind ein Feld "lent". In das schreibt es sobald ich die Ausleihanfrage akzeptiert habe die ID des entsprechenden Users. Sollte dieses Feld nicht leer sein, ist der Film als ausgeliehen gekenntzeichnet und kann nicht in den Warenkorb aufgenommen werden. (Am besten blende ich dann gleich noch den Link aus.) Ich kann mir nicht ganz vorstellen wie ich alle Daten in ein Array speichern soll. Soll ich das auch in "warenkorb" speicher oder z.B. in "movieone". Also so:
                    PHP-Code:
                    // Anzahl Filme auslesen
                    $countmovies count($_SESSION['warenkorb'])

                    // Die Infos des ausgewählten Movies aus der DB holen
                    $selectmovie mysql_query("SELECT * FROM tabelle WHERE id = '".$_GET["id"]."'");

                    // Das ergebnis in ein Array speichern
                    $movie mysql_fetch_array($selectmovie); 
                    Dann möchte ich irgendwie den Variabelname "$movie" festlegen mit in der art "movie."($countmovies+1)"" oder so... kann mir das irgendwie nicht so ganz vorstellen.

                    Kommentar


                    • #11
                      Original geschrieben von pascal007
                      Dann möchte ich irgendwie den Variabelname "$movie" festlegen mit in der art "movie."($countmovies+1)"" oder so...
                      wozu? wenn du ein array benutzt, wird der key automatisch durchnummeriert, bei 0 beginnend.

                      mach mal:
                      PHP-Code:
                      $test=array();

                      $test[]='eintrag 1';
                      $test[]='eintrag 2';
                      $test[]='eintrag 3';

                      echo 
                      '<pre>'.print_r($testtrue).'</pre>'
                      einem array kannst du auch arrays zuweisen (z.b. dein mysql-result).
                      $test[]=mysql_fetch_array($selectmovie);

                      einfach mal ausgeben lassen.
                      und auch mal den von ArSeN geposteten link besuchen.

                      Kommentar


                      • #12
                        Aha! Dann hab ich eigentlich ein "Array-im-Array", richtig?

                        Dann müsste ich ja theoretisch, wenn im ersten Array-Element der Filmname an 2. Position ist

                        Code:
                            [2] => Array
                                (
                                    [0] => 135
                                    [id] => 135
                                    [1] => Zurück in die Zukunft
                                    [name] => Zurück in die Zukunft
                                    [2] => 1
                                    [dvds] => 1
                        , den Filmnamem mit $array[2][1] (oder mit $array[2][name]) ansprechen. Aber wieso habe ich alle Einträge 2 Mal? Einmal mit einer Nummer und einmal mit dem Spaltenamen als Key.

                        EDIT So jetzt klappt es eigentlich wie ich es will... ich muss nur noch ein paar Sicherheitsabfragen machen (schon ausgeliehen? liegen im Array schon mehr als 3 Einträge, etc.) und irgendwie diese Doppeleinträge beim "Einlesen" des Arrays verhindern. Und dann sollte das eigentlich laufen . Bei Problemen melde ich mich wieder. Vielen, vielen Dank für eure kompetente Hilfe .
                        Zuletzt geändert von pascal007; 26.05.2007, 16:16.

                        Kommentar


                        • #13
                          Original geschrieben von pascal007
                          Aha! Dann hab ich eigentlich ein "Array-im-Array", richtig?
                          genau.
                          du könntest auch "zwei-dimensionales-array", "array von arrays" oder "matrix" sagen.
                          übrigens lassen sich arrays auch beliebig tief schachteln.

                          Original geschrieben von pascal007
                          Aber wieso habe ich alle Einträge 2 Mal? Einmal mit einer Nummer und einmal mit dem Spaltenamen als Key.
                          "mysql_fetch_array() ist eine erweiterte Version von mysql_fetch_row(). Die Daten werden sowohl unter numerischen Indizes des Ergebnis-Arrays abgelegt, als auch unter assoziativen Indizes. Als Schlüssel für die assoziativen Indizes werden die Feldnamen benutzt"mysql_fetch_array()

                          Kommentar


                          • #14
                            Wäre es viel resourcenschonender, wenn ich einfach nur mysql_fetch_row() nehmen würde? (Wobei es mir lieber ist wenn ich die Spalten gleich mit dem Namen ansprechen kann.)

                            Jetzt würde ich zum nächsten Prob kommen: Arrays wieder sauber löschen. Vllt. tut jemand ja mal was in den Warenkorb, das er nicht möchte dann soll er es auch wieder löschen können. Wenn er schon 3 Mögliche Artikel im Warenkorb hat und er Nr. 2 löscht und dann wieder einen dazunimmt, dann gibt's ja nur noch [0][2][3]. Also [1] fehlt und bei einer for-Schleife gibt das ja dann den Fehler. Wie kann ich jetzt alle Einträge nach dem gelöschten Eintrag "eines nachrücken lassen"?

                            Kommentar


                            • #15
                              array_slice()!

                              http://de3.php.net/array

                              Kommentar

                              Lädt...
                              X