Warenkorb - Artikelanzahl eines produktes

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

  • Warenkorb - Artikelanzahl eines produktes

    hi...

    es geht um folgendes kleines stückchen code:

    PHP-Code:
    class warenkorb
    {
        var 
    $article = array();
                
        function 
    addArticle($id,$menge)
        {
                       
    $this -> article[$id]['menge'] += $menge;
           return 
    true;
        
                    }
    ...


    ich will die artikelmange ja speichern, aber bei jedem aufruf der klasse erhalte ich ja nur den aktuellen wert und der alte wird überschrieben. Wie kann ich nun alle werte zusammenzählen?

  • #2
    session oder db
    Kissolino.com

    Kommentar


    • #3
      hallo wurzel,

      also müsste die funktion dann ungefähr so aussehen: ?

      PHP-Code:
      function addArticle($id,$menge)
          {
              
      $_SESSION['warenkorb'][$id]['menge'] += $menge;
              return 
      true;
                             
          } 

      Kommentar


      • #4
        ja. allerdings solltest du den init-wert eines artikels noch auf 0 setzen, wenn er in der session noch nicht vorhanden ist/war. das finde ich sauberer. ;-)
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          gut mache ich... grosser meister :-)

          müsste ja dann so aussehen oder?

          PHP-Code:
          function addArticle($id,$menge)
              {
                  if (!isset(
          $_SESSION['basket'][$id]['menge'])) {
                      
                    
          $_SESSION['basket'][$id]['menge'] = 0;
                      
                  }
                    
                  
          $_SESSION['basket'][$id]['menge'] += $menge;
                  
                  return 
          true;
                                 
              } 

          Kommentar


          • #6
            jepp .... was ich mich jetzt aber noch frage ist ... warum hast du noch den index 'menge' im array. eigentlich reicht es doch, wenn du den index (artikel-id) als key und als value davon direkt die menge hast. ;-)

            also ....[$id] = $menge
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              stimmt du hast recht.

              ich hatte das noch drin, weil ich das grad etwas ausprobieren will, und da wollte ich ganz am anfang alle artikeldaten ins array übernehmen also die menge dann noch bezeichnung und preis u.s.w.... aber da ich ja die id schon habe, kann ich ja die restlichen daten über die datenbank ermitteln

              Kommentar


              • #8
                genau .... ausser du änderst dir preise, während ein user shoppen ist. dann hat er natürlich dann auch den neuen preis.
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  Original geschrieben von Abraxax
                  jepp .... was ich mich jetzt aber noch frage ist ... warum hast du noch den index 'menge' im array. eigentlich reicht es doch, wenn du den index (artikel-id) als key und als value davon direkt die menge hast. ;-)
                  also ....[$id] = $menge
                  ob das so performant ist? so hast du für jeden seitenaufruf eine db-abfrage, die den warenkrob darstellt, wogegen das ablegen relevanter daten in der session lediglich das auslesen des arrays bedeutet.
                  Kissolino.com

                  Kommentar


                  • #10
                    Original geschrieben von Wurzel
                    ob das so performant ist? so hast du für jeden seitenaufruf eine db-abfrage, die den warenkrob darstellt, wogegen das ablegen relevanter daten in der session lediglich das auslesen des arrays bedeutet.
                    naja. wie oft surft ein user im warenkorb rum?

                    wie oft, surft ein user den shop ab?

                    da kommt es auf die eine query mehr auch nicht an. denn der shop MUSS aus der db JEDESMAL ausgelesen werden.
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      Original geschrieben von Abraxax
                      naja. wie oft surft ein user im warenkorb rum?
                      nicht so oft


                      wie oft, surft ein user den shop ab?
                      schon öfter, besonders bei größeren


                      da kommt es auf die eine query mehr auch nicht an. denn der shop MUSS aus der db JEDESMAL ausgelesen werden.
                      das kann dann die eine zuviel sein, da er sich das bei anderen Elementen auch gedacht hat.


                      aber muss jeder selber wissen was er macht.
                      mfg
                      marc75

                      <Platz für anderes>

                      Kommentar


                      • #12
                        hmmm...

                        also eure 2 meinungen klingen mir beide plausibel.
                        wenn ich also nix in der session ablege ausser die id dann hätte ich noch ne DB- Abfrage mehr, andererseits hätte ich auch en riesen Session Array wenn mal mehr bestellt wird

                        aber es soll ja nur ne kleine shopanwendung werden.

                        was bremst da mehr ne erneute abfrage an die DB oder die session?

                        Kommentar


                        • #13
                          du hast die qual der wahl ...

                          denke nur noch einmal an meinen satz oben .... ausser du änderst dir preise, während ein user shoppen ist. dann hat er natürlich dann auch den neuen preis.

                          jetzt kannst du dir aufgrund dessen überlegen, was du u.u. machen willst. ;-)
                          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                          Kommentar


                          • #14
                            Original geschrieben von lx-club
                            was bremst da mehr ne erneute abfrage an die DB oder die session?
                            mach dir doch nen kleinen benchmarktest ... microtime()

                            => abfrage db
                            => while-schleife

                            vs.

                            => for/foreach mit $_SESSION

                            dann weisst du was (wieviel) schneller ist
                            Kissolino.com

                            Kommentar


                            • #15
                              Original geschrieben von Abraxax
                              du hast die qual der wahl ...

                              denke nur noch einmal an meinen satz oben .... ausser du änderst dir preise, während ein user shoppen ist. dann hat er natürlich dann auch den neuen preis.

                              jetzt kannst du dir aufgrund dessen überlegen, was du u.u. machen willst. ;-)
                              also theoretisch ist es ja möglich das ein user gerade was bestellt, während ich die preise änder, aber das ist meines erachtens eher unwahrscheinlich, weil es auch ne kleinere shopanwendung werden soll.

                              ich werd mir mal überlegen was ich machen werde. :-)

                              Kommentar

                              Lädt...
                              X