Ankündigung

Einklappen
Keine Ankündigung bisher.

Warenkorb Alternative

Einklappen

Neue Werbung 2019

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

  • Warenkorb Alternative

    Hallo an Alle,

    ich sitze jetzt schon ne ganze Weile und dreh mich immer wieder im Kreis. So ein richtiges Tut zu meiner Vorstellung zur Aktualiesierung des Warenkorbs über 'nur einen Button' habe ich nicht gefunden. Und ich hab Google Löcher in die Festplatte gefragt.

    Vielleicht kann mir von Euch jemand auf die Sprünge helfen. Vorab schon mal vielen Dank für Eure Zeit und Geduld.

    Also:
    Ich habe einen Warenkorb in dem die Artikel Einträge innerhalb SESSION nach Inserts, Select Abfrage mit Hilfe einer While Schleife und mysql_fetch_object ausgewählt und angezeigt werden. Die Menge steht in einem input textfeld jeweils neben dem aufgelisteten Artikel im Warenkorb. Ganz unten gibt es den Button Aktualiesieren.

    Ich suche nun eine Möglichkeit die Menge in dem Textfeld zu ändern, wenn ich eine neue Menge eingebe und auf Aktualiesieren klicke.

    Bisher habe ich versucht die Warenkorb id mittels GET weiterzugeben aber wie ich annehme auf grund der Schleife jeht dat net, weil wegen der schleife kann nicht erkannt werden, welchen Warenkorb eintrag ich genau meine. Genauso mysql_num_rows zählt die Anzahl der Einträge. Nun hab ich gedacht mit einer Variablen im hiddenfeld ist aber wegen der Schleife auch blödsinn. Wenn ich mit POST die neue Menge hole ist das das selbe Spiel wie mit der Warenkorb id.

    mysql_fetch_row liefert nur einen Datensatz.Das wäre ja schon was für das GET url weitergabe. Jeht aber irgendwie auch nicht, weil eben nur ein Datensatz.

    Ich komm irgendwie nicht weiter. Ich bin für jeden Tipp, Denkrichtung dankbar.

    Diverse Tutorials zeigen sehr schön wie man durch Klicken eines Buttons jeweils die dazugehörige menge aktualisiert. Da sind dann also viele Button. Ist natürlich auch ne Möglichkeit aber ich fänds schöner wenn ihr mir helfen könntet wie ich das mit nur einem button für alle realiesiere.

    Bitte meldet Euch.

  • #2
    Hallo und willkommen im Forum hier

    Ich verstehe nicht so ganz: Steht dein Warenkorb ausschließlich in der Session oder in der Datenbank?

    Ich hoffe die Warenkorb-IDs sind keine fortlaufenden Zahlen ohne Authorisierungs-Überprüfung, sonst könnten ja alle Warenkörbe auf 0 gesetzt werden, wenn man nur die ID per GET übergeben muss.

    Vielleicht zeigst du uns ein bißchen Code, so sehe ich das Problem nicht, die Artikelanzahl zu verändern...

    Kommentar


    • #3
      Hey,
      Klar gern.
      Der Warenkorb steht ausschliesslich in der Session. Die Warenkorb
      hat eine fortlaufende ID. die Session Id wird in einer extra Spalte im
      Warenkorb gespeichert um sicherzustellen das die Warenkorb id zu
      dem User gehört der die Session erstellt hat.

      Ich will Euch nicht mit Html langweilen, hab das rausgenommen
      statt dessen Kommentar bitte nicht wundern.

      Hier der Code :
      PHP-Code:
      /*
      * der Warenkorb des Users der die Session vorher (in einer anderen Funktion)
      * durch einfügen eines Artikels erzeugt hat wird mit nur diesem Artikel(n)angezeigt
      */

      function WK_view_Big(){
      // Variablenarrays für BilderPfade, Datenbankdaten, Variablendeklarationen, etc
      global $conf,$bilderpfade,$templates_arry,$varibalen,$bildverzeichnis,$post_vars,$get_vars;
      $sid $_SESSION["sid"];
      $get_vars['nr']=$sid
      //wähle alle Artikel aus dem Warenkorb die nur in diese Session gehören
      $result4 mysql_query("SELECT * FROM ".$conf['PREFIX']."_warenkorb WHERE ses_id='".$get_vars['nr']."'  ");
      // zähle und speicher die Anzahl der Artikel in dieser Session
      $num mysql_num_rows($result4); 
      if (
      $num=="0"){
      $eimer.=mitteOben();// FKT nur Html 
      $eimer.=wkNAVLEISTE();// FKT nur Html 
      $eimer.='
        

       
                <div class="wk_leer">Im Warenkorb befinden sich keine Artikel im Warenkorb.</div> 
              </div> 
          </div> '
      ;
      }else{
      //alle Artikel im Warenkorb dieser Sitzung auswählen zum anzeigen und bearbeiten
      $resultalle mysql_query("SELECT * FROM ".$conf['PREFIX']."_warenkorb WHERE ses_id='".$get_vars['nr']."' order by name");
      $eimer.=mitteOben();// FKT nur Html 
      $eimer.=wkNAVLEISTE();// FKT nur Html 
      $eimer.=wkText1(); // FKT nur Html 
      $eimer.= wkKopfTbl();// FKT nur Html 
          // zeige mir die Session die nur ein Einkäufer sehen darf.
           
      while ($rowWk mysql_fetch_object($resultalle)){   //Warenkorb
                       
      $wk_art_id     $rowWk->wk_id
                      
      $wk_art_nr     $rowWk->artikelnummer;
                      
      $wk_art_name   $rowWk->name;
                      
      $wk_art_stkpreis  $rowWk->preis;
                      
      $wk_menge       $rowWk->menge;
                      
      $wk_gesamtpreis   $wk_menge $wk_art_stkpreis;
                      
      $bestellpreis   $bestellpreis $wk_gesamtpreis;

                      
      #zeige_variable($rowWk);
                      # <input type="Hidden" name="wkID" value="'.$wk_art_id.'">

      $eimer.='

       <form action="'
      .$varibalen['PFAD_1_1_2'].'&wkid='.$wk_art_id.'"    method="post" ><tr>

       
         
          <input type="text" name="menge_neu" maxlength="2" size="2" class="wk_fld_menge" value="'
      .$wk_menge.'"/> ID'.$wk_art_id.';



          '
      ;
       }
      //Ende Auslesen Warenkorb Artikel des zugeordneten Users
         
      $eimer.='
         <tr>
        
       
       
       
       
        
       <div id="wk_ges">
       <div class="wk_ges_new">[img]'
      .$bilderpfade[[/img]
       <
      input type="submit" class="wk_btn_aktualisieren" value="Aktualisieren"/>
      </
      div>

      <
      div id="wk_btn_weiter">[img]'.$bilderpfade[[/img] 
         <input type="submit" class="wk_btn_kasse" value="weiter zur Bestellung"/>   </div> </div>
       </form>
        </div>
      </div></div> '
      ;
        
      }
      // Ende Anzeigen Aktueller Warenkorb
      return $eimer;
      $ergebnis =mysql_query($sql) or die("Konnte keine Daten in die Datenbank schreiben!FKT rhInsert_DB_WithFeedback
      "
      );
      }

      /*
      * durch klicken auf Aktualisieren in der Funktion [u]oben[/u] soll nun nur
      * die gewählte Warenkorb Id Eintrag ausgewählt  werden und um in der
      *folgenden funktion bearbeitet werden zu können.
      *
      */

      function WK_Edit(){
      global 
      $conf,$bilderpfade,$templates_arry,$varibalen,$bildverzeichnis,$post_vars,$get_vars;
      $sid $_SESSION["sid"]; 
      $get_vars['nr']=$sid;// schon erstellte Session Id des User holen
      if ($_GET["modus"] == "wk_edit"){
          
      $warenkorb_id $_GET["wkID"]; // GET Array liefert die Var über die Url 
          //neue Menge im Post array speichern
          #$warenkorb_id = $_POST["wkID"]; // POST im Falle per Hiddenfeld 
          
      $menge_neu $_POST["menge_neu"]; // PostArray liefert die Var in dem Formular
          // hier neu Mange aus dem Hiddenfeld des Wk Formulars PostArray
          
      zeige_variable($warenkorb_id);
          
      #zeige_variable($menge_neu);
              
                  //ausgewälte Warenkorb ID ausschliesslich in dieser Session einlesen zum Bearbeiten 
                  //geht aber erst wenn Warenkorb Id auch da (°?°)
                  
                  #$result = mysql_query("SELECT wk_id FROM ".$conf['PREFIX']."_warenkorb WHERE ses_id='".$get_vars['nr']."' AND wk_id= '".$warenkorb_id."'  ");    
                  
                  //Anfang....Ende Schleife gewählten Eintrag bearbeiten
                  
                  #if ($menge_neu==0) { 
                  #    $sql="Delete diesen Warenkorb Eintrag nur in dieser Session";
                  #}else{
                  #    $sql="Ubdate die Menge in diesen Warenkorb nur in dieser Session";
                  #}
              
      }//Ende Modus edit
      }//Ende Function 

      Kommentar


      • #4
        bitte poste code mit dem php-tag. es ist sonst äusserst schwer lesbar...

        Grüße,
        Dr.E.

        Kommentar


        • #5
          Du willst den Warenkorb über einen Button aktualisieren?
          Hier eine Anregung:


          Artikel XYZ, Anzahl: <select name="artikel[$artikel_id]">...</select>


          Code:
          if( empty($_POST['artikel']) || !is_array($_POST['artikel']) )
          {
          	$aArtikelListe = array();
          }
          else
          {
          	$aArtikelListe = $_POST['artikel'];
          }
          
          
          while( list($key, $val) = each($aWarenkorb) )
          {
          	if( array_key_exists($val['artikel_id'], $aArtikelListe)
              	&& is_numeric($aArtikelListe[$val['artikel_id']])
                  && $aArtikelListe[$val['artikel_id']] > 0 )
              {
              	$szSQL = "UPDATE warenkorb SET anzahl = ".$aArtikelListe[$val['artikel_id']]." ".
                  		 "WHERE artikel_id = ".$val['artikel_id']." AND sessid = '".session_id()."'";
              }
              else
              {
              	$szSQL = "DELETE FROM warenkorb WHERE artikel_id = ".$val['artikel_id']." AND sessid = '".session_id()."'";
              }
          }

          Kommentar


          • #6
            Wie schon Ryson bemerkt hat kannst du in Formularen auch Arrays weitergeben! Und dann musst du eben das Array mit der Anzahl so machen das die Indixes zu den jeweiligen Waren gehören.

            In der DB bei den Produkten hat die Kappe die ID 1 und die Hose die ID 3.

            Code:
            Kappe:    <input name="anzahl[1]">
            Hose:     <input name="anzahl[3]">
            Und später kannst du dann drauf zugreifen! $anzahl[1] ist dann eben die Anzahl der Kappen.

            Kommentar


            • #7
              Mmmh.... klasse vielen Dank für die schnellen spontanen Antworten.
              OK.

              Vielen Dank für den Denksport Ryson und deinen Hinweis RaZoR.Ich muss mir das was du vorgestellt hast Ryson verinnerlichen also die Schleife. Kool. Jetzt gehts wieder voran.

              Hey dr.e.,
              vielen Dank für den Hinweis. Wird geändert.



              Noch andere Ideen?
              Bin immer noch dank bar für Hinweise. Gibt ja immer mehrere Wege die nach Rom führen.

              Kommentar


              • #8
                Hi.

                Du speicherst den Warenkorb also doch in der Datenbank, nicht nur in der Session. Das macht in der Regel nur dann Sinn, wenn der Benutzer bereits angemeldet ist.

                Einen Warenkorb in der Datenbank einer Session zuzuordnen macht kenen Sinn, denn die Zuordnung ginge verloren, wenn die Session beendet wird. Der Warenkorb ist also nur solange brauchbar, solange die Session noch läuft (falls keine weitere Zuordnung zum Kunden besteht). Ist die Session abgelaufen, gleicht der vormals zugehörige Warenkorb-Datensatz einem vollen Einkaufswagen, der im Supermarkt rumsteht, wärhend der Kunde bereits gegangen ist. Die Lebensdauer eines sinnvollen Warenkorbs ist bei dir also gleich der Lebensdauer der Session. Folglich macht es keinen Sinn, den Warenkorb zusätzlich in die Datenbank zu schreiben. Es reicht, den Warenkorb in die Session zu legen.

                Etwas anderes wäre es, wenn du die Warenkörbe Benutzern zuordnen kannst. Dann können diese den Einkauf irgendwann fortsetzen, sobald sie sich wieder einloggen. Das ist dann aber unabhängig von der Session.

                Weiter wäre es möglich, den Warenkorb an ein Cookie zu binden, falls die Benutzer noch nicht identifiziert sind. Das hat den Vorteil, dass ein Benutzer vom selben Rechner aus auch später mal weitersurfen kann und aber auch den Nachteil, dass die (nicht abgeschlossenen) Einkäufe des Benutzers auf dem Rechner gespeichert werden. Ist also wohl in den meisten Fällen unerwünscht.

                Mach erstmal klar, wie deine Anforderungen hier sind, dann kann man weitersehen.

                Basti

                Kommentar


                • #9
                  Als jemand, der auch den Warenkorb über die Session in der DB speichert
                  möchte ich folgendes anmerken...

                  Ich will die Datenmenge in der Session möglichst klein halten -
                  so wurde mir auch einmal empfohlen.

                  Über die Session identifiziere ich auch Benutzer,
                  die nicht angemeldet sind.
                  So muss ein Gast sich nicht gleich einloggen oder registrieren,
                  kann aber trotzdem schon die Bestellung vorbereiten.

                  Das der Warenkorb irgendwann verfällt ist ebenfalls gewollt,
                  der Verfall der Session ist also eingeplant.

                  Wer nach einer Woche wieder kommt,
                  wird selten die gleiche Bestellung abschließen wollen.
                  Außerdem können sich Preise und Produkte ändern.

                  Kommentar


                  • #10
                    Zitat von Ryson
                    Ich will die Datenmenge in der Session möglichst klein halten -
                    so wurde mir auch einmal empfohlen.
                    Ob die Daten in den DB-Files oder den Session-Files auf der Platte liegen ist doch Schnurz. Außerdem ist do ein Warenkorb-Objekt nicht der Rede wert, zumindest nicht, wenn du darin nur die IDs der Produkte und nicht alle Details der Produkte ablegst. Aber selbst dann sind das in aller Regel sehr kleine Datenmengen. Ausnahmen wären hier Artikelbilder etc. Aber, letztlich reicht ein Array: Artikel-ID => Anzahl und da müsste einer schon ein Extreme-Shopping machen, um da ein paar KiloBytes zusammenzubekommen!

                    Andersrum geschaut:
                    Wenn du die Daten in die Datenbank legst, musst du die Daten a) jedes mal aus der DB auslesen (die Session leist du ohnehin ein) und b) musst du einen Garbage Collector bauen und der Nutzen für diesen Mehraufwand ist gleich Null.

                    Vielleicht hier nochmal erwähnenswert, dass das Session-Verzeichnis auf Shared-Hosts in jedem Fall nicht im allgemein les- und schreibbaren /tmp-Verzeichnis liegen dürfen. Aber da das ja letztlich für alle Sessions gilt, ist das hier ja nichts besonderes. Allerdings wird bei Session-basierten Anwendungen allzu oft nicht auf Sicherheit geachtet und gerade bei E-Commerce-Anwendungen sollte man nicht gerade vergessen haben, sich weitestgehend vor Session-Fixation-, CSRF-, Hijacking- und anderen Attacken zu schützen.

                    Basti

                    Kommentar


                    • #11
                      Es klappt.!!!!!!! Danke Danke nochmal.

                      Also jedenfalls so fast. Sobald ich eine Menge im 2 stelligen Bereich
                      eingebe und aktualisieren klicke, wird die 2te Stelle gekürzt also statt 23
                      steht dann nur 2 in der DB obwohl im Inputfeld 23. Den Datenfeldtyp hab
                      ich mit int(11) in der DB gewählt. Ich denke das liegt auch nicht an dem
                      Datenfeldtyp, weil eine 23 in der Datenbank und int(11) ist ja auch richtig und mit insert gehts auch.

                      Kommentar


                      • #12
                        Lass dir den Inhalt von $sql mal anzeigen und prüfe, ob hier überhaupt der erwartete Wert enthalten ist.

                        Kommentar


                        • #13
                          Der erwartet Werte ist nicht in der Variablen. Warum?

                          Kommentar


                          • #14
                            Welche der beiden Abfragen meinst du?

                            Kommentar


                            • #15
                              Ein paar Worte zu der' Session im Warenkorb'. Klingt natürlich verwunderlich, wenn man das so liest, da hast du recht Basti. Was den Sinn der Zusammenstellung angeht vielleicht auch eine Vergewaltigung im Sinne ihrer Natur.

                              Ich bin da aber auch der Meinung wie Ryson.

                              Die Datenmenge in der Warenkorb Tabelle ist sehr klein. Abgeschlossene Bestellungen werden natürlich aus dem Warenkorb komplett wieder gelöscht. Die nicht abgeschlossenen verbleiben erstmal dort. Ist ja auch ganz spannend zu sehen wie viele den kauf abgebrochen haben, wenn auch nicht sonderlich gewinn bringend Meine Vorstellung war daraus später vielleicht Informationen so zum Kaufverhalten zu ziehen und um dementsprechende Massnahmen treffen zu können.

                              Die abgeschlossense Bestellung wird in einer anderen Tabelle gepeichert und kann im Administrationsbereich eingesehen werden.

                              Ein Login ist auch geplant in Verbindung abgeschlossense Bestellung(en) .Aber wichtig sind mir erstmal die Grundvorraussetzungen die ein Internetshop hat.

                              Kommentar

                              Lädt...
                              X