Ankündigung

Einklappen
Keine Ankündigung bisher.

Array - Falls Artikel schon vorhanden... (Warenkorb mit Artikel-Varianten)

Einklappen

Neue Werbung 2019

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

  • Array - Falls Artikel schon vorhanden... (Warenkorb mit Artikel-Varianten)

    Hallo!
    Erstmal muss ich sagen... tolles Forum!

    Mein Ziel:
    Ich habe ein Shopsystem.
    die Artikel-ID und die gewünschte Menge werden zur Zeit (Später auch die Variante, falls vorhanden) per Formular an das Warenkorb-Script übergeben.

    Mein 1. Problem:
    Wenn der Kunde einen Artikel in den Warenkorb legt, der schon drin ist, soll der Artikel NICHT nochmal hinzugefügt werden, sondern die Menge um 1 erhöht werden.

    Mein 2. Problem:
    Ich biete auch Artikel mit Varianten (z.B. T-Shirts -> Größe) an.
    Wenn der Kunde den SELBEN Artikel mit VERSCHIEDENEN Varianten in den Warenkorn legt, soll der vorhandene Artikel natürlich NICHT erhöht werden, sondern als neu hinzugefügt werden.
    Ich muss sagen, ich habe mich nie sooo richtig Arrays befasst.
    Würe super nett von euch, wenn ihr mir helfen könnt

    PHP-Code:
    # Wenn Modus "edit" uebergeben wurde:
    if(isset($_GET['mode']) and ($_GET['mode'] == "add"))
    {   
     
    $temp = array();   
     
      
    # Wenn keine oder weniger als 0 Mengen uebergeben wurden -> Menge 1 als Standard
     
    if(empty($_POST['quantity']) || ($_POST['quantity']) < 0)
     {
      
    $temp['quantity'] = 1;
     }
      
    # Ansonsten die uebergebene Menge in das (Temp) Array speichern
      
    else
      {
        
    $temp['quantity'] = $_POST['quantity']; 
      }
     
    # Die uebergebene Artikel-ID (NICHT Artikelnummer) in das Array speichern
     
    $temp['item_id'] = $_POST['item_id']; 
     
     
    # Falls die Artikel-ID (NICHT Artikelnummer) schon im  Array existiert, die Menge um 1 erhöhen 
     
    if( *** HIER FÄNGT MEIN PROBLEM AN ***)
     {
       echo 
    "Dieser Artikel mit der gewünschten Variante existiert bereits im Warenkorb."; 
     }
      else
      {
         
    # Das (Temp) Array in die Session speichern   
         
    array_push($_SESSION['cart'], $temp);   
        }
    } 

  • #2
    kann mir keiner helfen?

    Kommentar


    • #3
      Man bist Du geduldig

      Kommentar


      • #4
        Sorry... auf den anderen Beiträgen wird ja auch öfters fix geantwortet.
        Dachte, ich hätte auch so ein Glück

        Kommentar


        • #5
          Du könntest das Array ($_SESSIONS['cart']) mit einer foreach Schleife durchlaufen und damit überprüfen, ob die gewünschte ArtikelID bereits vorhanden ist.

          btw:
          PHP-Code:
          if(empty($_POST['quantity']) || ($_POST['quantity']) < 0) 
          ist keine gute Überprüfung - "rwaboh" würde z.B. auch durchgehen, benutze lieber is_numeric anstatt empty

          Kommentar


          • #6
            stimmt... is_numeric ist in diesem Fall effektiver.

            Die Artikel-ID darf ja auch mehrmals vorhanden sein, aber nur WENN die Varianten unterschiedlich sind.
            Es könnte ja sein, dass ein Kunde von einem T-Shirt mehrere haben möchte und zwar mit verschiedenen Varianten.

            Kommentar


            • #7
              Dann musst du halt bei einer Übereinstimmung der ArtikelID die Variante überprüfen (ob die gleich ist) -> wenn ja dann um eins erhöhen wenn nicht neues hinzufügen

              Kommentar


              • #8
                ja, aber ich kenne den Syntax nicht.

                mein gedanke wäre in etwa:
                PHP-Code:
                if(in_array($_POST['item_id'], $_SESSION['cart']) && (in_array($_POST['variante'], $_SESSION['cart'])
                {
                # Selber Artikel mit der selben Variante schon vorhanden -> um 1 erhöhen
                } 
                Aber ich muss der funktion in_array doch sicherlich auch irgendwie sagen in welcher "Spalte" er nach der item_id und variante suchen soll, oder?

                Kommentar


                • #9
                  du könntest per
                  PHP-Code:
                  in_array($temp, $_SESSION['cart']) 
                  überprüfen, ob exakt(!) das selbe Produkt (also alle Werte des Array stimmen überein) im Array $_SESSION['cart'] vorhanden ist. Du kannst es aber auch wie von mir irgendwo oben beschrieben mit foreach durchlaufen lassen.
                  Bsp:
                  PHP-Code:
                  foreach ($_SESSION['cart'] as $produkt){
                      if (
                  $produkt['item_id'] == $temp['item_id'] && $produkt['variante']==$temp['variante']){
                          
                  //um eins erhöhen
                      
                  }else{
                          
                  // Neues Produkt hinzufügen
                      
                  }
                  } 

                  Kommentar


                  • #10
                    Stop!
                    Bevor hier weiterspekuliert wird mußt Du erstmal Deine Anwendung spezifizieren:

                    - In was für einer Struktur wird das Array in der Siion hinterlegt?
                    - Was unterscheidet Artikel verschiedener Varianten voneinander. Offensichtlich ja nicht die ID (und warum eigentlich nicht die ID)?

                    Kommentar


                    • #11
                      Hallo!

                      Ich würde auch sagen nach der ID zu unterscheiden wäre das sicherste,so kannst du am sichersten feststellen ob der Artikel schon im Warenkorb liegt,denn 2 Artikel können zum Beispiel nicht die ID 3 haben!

                      Es nach anderen Kriterien zu machen wäre zu undurchlässig und eigentlich Sinnlos!

                      mfg der litter

                      Kommentar


                      • #12
                        Zitat von nikosch Beitrag anzeigen
                        Stop!
                        Bevor hier weiterspekuliert wird mußt Du erstmal Deine Anwendung spezifizieren:

                        - In was für einer Struktur wird das Array in der Siion hinterlegt?
                        - Was unterscheidet Artikel verschiedener Varianten voneinander. Offensichtlich ja nicht die ID (und warum eigentlich nicht die ID)?
                        PHP-Code:
                        # Falls noch kein Array fuer den Warenkorb in der Session gespeichert ist -> leeres Array anlegen
                        if (!isset($_SESSION['cart']))
                        {    
                         
                        $_SESSION['cart'] = array();
                        }
                         
                        ############################
                        # Hinzufuegen eines Artikels
                        ############################
                        # Wenn Modus "edit" uebergeben wurde:
                        if(isset($_GET['mode']) and ($_GET['mode'] == "add"))
                        {   
                         
                        $temp = array();   
                         
                          
                        # Wenn keine oder weniger als 0 Mengen uebergeben wurden -> Menge 1 als Standard
                         
                        if(empty($_POST['quantity']) || ($_POST['quantity']) < 0 || !is_numeric($_POST['quantity']))
                         {
                          
                        $temp['quantity'] = 1;
                         }
                          
                        # Ansonsten die uebergebene Menge in das (Temp) Array speichern
                          
                        else
                          {
                            
                        $temp['quantity'] = $_POST['quantity']; 
                          }
                         
                        # Die uebergebene Artikel-ID (NICHT Artikelnummer) in das Array speichern
                         
                        $temp['item_id'] = $_POST['item_id']; 
                         
                         
                        # Artikel-Variante uebergeben
                         
                        $temp['variant'] = $_POST['variant'];
                         
                         
                        # Falls die Artikel-ID (NICHT Artikelnummer) schon im  Array existiert, die Menge um 1 erhöhen 
                         
                        if(in_array($temp, $_SESSION['cart']))
                         {
                           echo 
                        "Dieser Artikel mit der gewünschten Variante existiert bereits im Warenkorb."; 
                         }
                          else
                          {   
                             
                        # Das (Temp) Array in die Session speichern   
                             
                        array_push($_SESSION['cart'], $temp);   
                            }
                        } 
                        Ich habe oben im Script mal print_r($_SESSION['cart']);
                        eingefügt. Dort kam folgendes:

                        PHP-Code:
                        Array ( [0] => Array ( [quantity] => 1 [item_id] => 2602 ) [1] => Array ( [quantity] => 1 [item_id] => 2613 ) ) 
                        Die Artikel haben ja alle verschiedene IDs, nur die Varianten halt nicht.
                        Also z.b. Artikel "T-Shirt Volkswagen" hat die ID 120. Diese ID ist natürlich nur einmal in der Datenbank vergeben. Die Größe (Variante) kann man in der Datailansicht per DropDown auswählen und diese wird dann uebergeben, wenn man auf den Button "In den Warenkorb" klickt.

                        Kommentar


                        • #13
                          Du könntest bspw. aus allen relevanten IDs und Eigenschaften nen md5 Hash erzeugen und diesen als eindeutigen Schlüssel verwenden.

                          Kommentar


                          • #14
                            das mit dem md5 ist vielleicht eine überlegung wert
                            Aber wie definiere ich den array key?
                            Im moment zählt sich der key ab 0 hoch. Ist das Standard?
                            Weil ich habe es nirgendswo definiert im Script.

                            Ob der Artikel dann mit den Eigenschaften schon im Warenkorb liegt,
                            kann ich ja mit array_key_exists rausfinden.

                            Kommentar


                            • #15
                              md5 als Key > assoziatives Array
                              isset ($array[md5 ()]) > Schlüsselprüfung

                              Kommentar

                              Lädt...
                              X