Problem mit "Warenkorb"

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

  • Problem mit "Warenkorb"

    Hallo zusammen!

    Ich bin gerade dabei nen webshop zu "basteln".

    Datei: webshop.php
    - Die Artikel (Beschreibung usw.) lese ich aus einer Datenbank
    - und gebe sie, geordnet nach Kategorien aus, z.B. man klickt Kategorie 1 an und dann erscheinen die entsprechenden Artikel.
    - Nach jeder Position gibt es den "in den Warenkorb".
    - Durch die URL - Parameter kann ich dann den Artikel eindeutig indentifizieren.

    Datei: warenkorb.php
    - hier zeige ich den Artikel nochmals an
    - im Textfeld "Menge" kann der Kunde die gewünschte Menge eintragen
    - das Feld Gesamtpreis ermittelt nun den Endpreis für die Position

    Dies funktioniert bereits alles und sollte nun erst mal zum Verständnis dienen.

    Nun zu meinem Problem:

    - wenn ich die Parameter (um den Artikel zu identifizieren) und die Menge in die Session eintrage werden diese beim nächsten Artikel überschrieben.

    Wie kann man dies verhindern, bzw. wie kann man mehrere Einträge in die Session hinzufügen.

    Hier der Code dazu:

    PHP-Code:
    $j 0;
    if (
    $_POST) {
         if (
    $_POST['hinzufuegen']) {
        for (
    $i 0$i <= count($_SESSION['warenkorb']); $i++) {
             if ((
    $_SESSION['warenkorb'][0] == $kat) &&   ($_SESSION['warenkorb'][0] == $art)){
        echo 
    "Artikel bereits vorhanden";
    } else {
        
    $_SESSION['warenkorb'][$j] = array (
        
    "kat" => $kat,
        
    "art" => $art,
        
    "menge" => $_POST["menge"]
                        );
                    }
    $j++; //erhöhen für nächsten Artikel, der gekauft wird
    echo "Menge wurde hinzugef&uuml;gt";
    }


  • #2
    Re: Problem mit &quot;Warenkorb&quot;

    Original geschrieben von DorfbewohnerBD
    wenn ich die Parameter (um den Artikel zu identifizieren) und die Menge in die Session eintrage werden diese beim nächsten Artikel überschrieben.
    Nun, das hast du ja auch explizit so programmiert - du verwendest jedes mal den Index 0.
    Du setzt $j explizit jedes Mal zu Anfang auf 0 - dann erwartest du doch nicht wirklich, dass dieser Wert sich von alleine erhöht?

    Ja, du erhöhst ihn nach dem Ablegen der Daten in der Session - aber auch das nützt nichts, a) weil du den Wert ja beim nächsten Aufruf doch wieder zuerst auf 0 setzt, und b) weil der Wert von $j aus dieser Scriptinstanz natürlich in der nächsten nicht mehr bekannt ist.


    Du könntest natürlich den Zählerstand ebenfalls in der Session ablegen - ist aber eigentlich unnötig, denn mit der Notation $array[] = $xyz kannst du dem Array $array ebenfalls einen neuen Eintrag hinzufügen, der nummerische Index wird dabei automatisch hochgezählt.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      da habe ich wohl den Wald vor lauter Bäumen nicht mehr gesehen, also das mit dem $j war ein tolles Eigentor.

      Hatte übrigens nicht den ursprünglichen Code vorhin eingefügt, da ich hier und da noch rumgebastelt habe.

      Normalerweise steht anstatt 0 $i (in der 5. Zeile).

      PHP-Code:
      $j 0;
      if (
      $_POST) {
          if (
      $_POST['hinzufuegen']) {
              for (
      $i 0$i <= count($_SESSION['warenkorb']); $i++) {
                   if ((
      $_SESSION['warenkorb'][$i] == $kat)         &&       ($_SESSION['warenkorb'][$i] == $art)){
              echo 
      "Artikel bereits vorhanden";
                  } else {
                  
      $_SESSION['warenkorb'][$j] = array (
                      
      "kat" => $kat,
                      
      "art" => $art,
                      
      "menge" => $_POST["menge"]
                          );
                      }
      $j++; //erhöhen für nächsten Artikel, der gekauft wird
          
      echo "Menge wurde hinzugef&uuml;gt";
          }

      Wenn der numerische Index automatisch hochgezählt wird, müsste es ja bei der SESSION funktionieren.
      Nur wurden hierbei meine Einträge beim nächsten Mal überschrieben.

      Hier meine ursprüngliche Fassung:

      PHP-Code:
      ...
      $_SESSION["warenkorb"][] = $kat;
      $_SESSION["warenkorb"][] = $art;
      $_SESSION["warenkorb"][] = $_POST["menge"];
      ... 
      Habe die Schleife usw. mal weggelassen, so wird die Nachricht hier noch unnötig länger.

      Als ich bei der nächsten Position wieder die Einträge in die SESSION schreibe wollte waren die ersten Einträge überschrieben.

      So bekam ich bei der Ausgabe mittels "foreach"

      PHP-Code:
          foreach ($_SESSION['warenkorb'] as $value) {
              echo 
      $value " ";
          } 
      nur die aktuellen Einträge ausgegeben.

      Kommentar


      • #4
        Original geschrieben von DorfbewohnerBD
        Hier meine ursprüngliche Fassung:
        PHP-Code:
        ...
        $_SESSION["warenkorb"][] = $kat;
        $_SESSION["warenkorb"][] = $art;
        $_SESSION["warenkorb"][] = $_POST["menge"];
        ... 
        Auch ziemlich unsinnig.
        Da legst du für jeden Wert eines neues Array-Element an - obwohl dass doch eigentlich zusammengehörige Werte sind, oder nicht?
        Wie willst du denn da beim wieder-auslesen entscheiden, welches Array-Element jetzt für was steht?
        Als ich bei der nächsten Position wieder die Einträge in die SESSION schreibe wollte waren die ersten Einträge überschrieben.
        Du nimmst die Session aber schon wieder auf, oder?

        error_reporting auch auf E_ALL?
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          nein, ich wusste nicht wie ich die SESSION wieder aufnehmen kann.
          Ja, error_reporting ist auf E_ALL.

          Kommentar


          • #6
            Original geschrieben von DorfbewohnerBD
            nein, ich wusste nicht wie ich die SESSION wieder aufnehmen kann.
            In dem du auf jeder Seite erneut session_start aufrufst - sag bloss, das hast du nicht gemacht?
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              doch, habe es sogar eleganter Weise mit nem include gemacht

              PHP-Code:
              include 'session.php'
              Auch wenn ich schon bei Tutorien gelesen habe, dass man "session_register" nicht mehr verwendet, hatte ich ohne diese Einstellung immer ne Fehlermeldung erhalte. Erst als ich es verwendet hatte ging es.

              PHP-Code:
              ...
              //session starten
              session_start();

              //session benennen
              session_register('warenkorb');
              ... 

              Kommentar


              • #8
                Original geschrieben von DorfbewohnerBD
                Auch wenn ich schon bei Tutorien gelesen habe, dass man "session_register" nicht mehr verwendet,
                Tut man auch nicht, sofern man keine wirklich uralte PHP-Version verwendet.
                hatte ich ohne diese Einstellung immer ne Fehlermeldung erhalte.
                Welche?
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Das mit dem
                  PHP-Code:
                   session_register_ 
                  konnte ich zwischenzeitlich lösen. Dafür habe ich jetzt ein neues Problem.

                  Habe zwei verschiedene Warenkörbe erstellt. Den 1. um die Menge jedes Artikels zu erfassen und den 2. um alle bisher ausgewählten Artikel nochmals anzeigen zu lassen und ggf. zu löschen. Am Ende kann man noch die Kartonagen angeben.

                  Datei 2. warenkorb:

                  - hat drei Spalten:

                  1. Spalte: checkbox kann angeklickt werden, wenn Artikel aus SESSION gelöscht werden soll.

                  2. Spalte:
                  Hier werden die ausgewählten Artikel, die sich in der SESSION befinden nochmals ausgegeben

                  3. Spalte Preis je Position (Menge x Preis)

                  - darunter kann man dann die Kartonagen auswählen
                  - dann gibt es zwei Buttons "löschen" und "Kasse"

                  Sorry, leider ziemlich langer Code.

                  Hier der Code:

                  PHP-Code:
                          <?
                  //Formularbeginn
                  ?>


                                          <form name="form1" action="<?php echo $PHP_SELF;?>" method="post">
                                          <table border="1" width="756">                 
                                                                                              
                  <?php
                      
                  echo '<tr>';
                      echo 
                  '<td width="576" height="64">';
                      echo 
                  '<p align="center""><b><u>Artikel die gel&ouml;scht werden sollen</b></u></p></td>';
                      echo 
                  '<td width="576" height="64"><p align="center"><b><u>Weinsorte</u></b></p></td>';
                      echo 
                  '<td width="164" height="64"><p align="center"><b><u>Preis je Position</u></b></p></td></tr>';

                  foreach (
                  $_SESSION['warenkorb'] as $value) {
                      
                  //Kategorie bestimmen
                      
                  switch ($value['kat']) {
                          case 
                  :
                              
                  $i 'w';
                              break;
                          case 
                  :
                              
                  $i 'r';
                              break;
                          case 
                  :
                              
                  $i 's';
                              break;
                          case 
                  :
                              
                  $i 'p';
                              break;
                      }

                      
                  $sql "Select Abbildung, Nr, Jahrgang, Rebsorte, Flaschenart, Preis from weinshop where wnr= $value[art]";
                      
                  //fügt / hinzu um SQL-Injection abzufangen
                      
                  mysql_real_escape_string($sql);
                      
                  $result mysql_query($sql) OR die(mysql_error());
                      
                  $row mysql_fetch_array($resultMYSQL_ASSOC);
                      
                  $row['bestellmenge'] = $value['menge'];
                      
                  $art $value['art'];
                      
                  //Tabellen-Spalten erzeugen
                      
                  echo '<tr>';
                      echo 
                  '<td width="576" height="64">';
                      echo 
                  '<p><input type="checkbox" name="cb[' $art ']"></p>';
                      
                      echo 
                  '</td>';
                      echo 
                  '<td width="576" height="64">';
                      
                  //Warenkorb ausgeben
                      
                  echo " <p> Nr. " $row["Nr"] . " </p> ";
                      echo 
                  " <p> " $row["Jahrgang"] . " </p> ";
                      echo 
                  " <p> " $row["Rebsorte"] . " </p> ";
                      echo 
                  " <p>Preis &nbsp;" $row["Preis"] . "&nbsp;&euro;</p><br>";
                      echo 
                  ' </td>';
                      echo 
                  '<td width="164" height="64">';
                      
                  //Komma in Punkt umwandeln
                      
                  $preis floatval(str_replace(',''.'$row["Preis"]));
                      
                  $erg = ($preis $row['bestellmenge']);
                      
                  number_format($erg2);
                  //. in , umwandeln
                      
                  $erg_neu str_replace("."","$erg);
                      
                  //Ausgabe mit Komma
                      
                  echo '<p align="center">' $erg_neu '&nbsp;&euro;</p>';
                      echo 
                  '  </td>';
                      echo 
                  '</tr>';
                  }
                  ?>
                                          </table>
                                          <table border="1" width="755">
                                              <tr>
                                                  <td width="181" valign="top">                               
                                                   
                                                          <p>Bitte Kartonart w&auml;hlen<br></p>  
                                                          <p>&nbsp;<input type="checkbox" name="cb1">3er Karton</p>
                                                          <p>&nbsp;<input type="checkbox" name="cb2">6er Karton</p>
                                                          <p>&nbsp;<input type="checkbox" name="cb3">12er Karton</p>
                                                          <p>&nbsp;<input type="checkbox" name="cb4">15er Karton</p>
                                                          <p>&nbsp;<input type="checkbox" name="cb5">18er Karton</p>
                                                      
                                                      <p>&nbsp;</p>
                                                  </td>
                                                  <td width="200" valign="top">
                                                      <p>Bitte Kartonanzahl wählen<br></p>
                                                     
                                                          <p><input type="text" name="t1" maxlength="2" size="4"></p>
                                                          <p><input type="text" name="t2" maxlength="2" size="4"></p>
                                                          <p><input type="text" name="t3" maxlength="2" size="4"></p>
                                                          <p><input type="text" name="t4" maxlength="2" size="4"></p>
                                                          <p><input type="text" name="t5" maxlength="2" size="4"></p>
                                                     
                                                      <p>&nbsp;</p>
                                                  </td>
                                                  <td width="352">
                                                      <p align="center"><b>Sonstige Bemerkungen oder Wünsche? Bitte hier eintragen...</b></p>
                                                      <p align="center"><textarea name="formtextarea1" rows="14" cols="29"></textarea></p>
                                                  </td>
                                              </tr>
                                          </table>
                                          <table border="1">
                                              <tr>
                                                  <td width="748">
                                                      <p align="right"><b>Summe:</b></p>
                                                  </td>
                                                  <td width="748">&nbsp;</td>
                                              </tr>
                                          </table>

                                          <div align="right">
                                              <table border="1" width="30%">
                                                  <tr>
                                                      <td width="371">                                        
                                                          <p align="center"><input type="submit" name="loeschen" value="löschen"></p>
                                                         </td>
                                                         </form>
                  <? //Formular auswerten
                  //include 'form_auswerten.php';
                  if($_POST){
                      
                  echo "test";    
                  }
                  if (isset($_POST['loeschen'])) {
                      
                      echo "test";
                      
                      foreach ($_SESSION['warenkorb'] as $value) {
                      
                      $sql = "Select Abbildung, Nr, Jahrgang, Rebsorte, Flaschenart, Preis from weinshop where wnr= $value[art]";
                      //fügt / hinzu um SQL-Injection abzufangen
                      mysql_real_escape_string($sql);
                      $result = mysql_query($sql) OR die(mysql_error());
                      $row = mysql_fetch_array($result, MYSQL_ASSOC);
                      
                      
                      if(isset($_POST[cb][$art])){
                          $pos = $row[$art];
                          echo $art;
                      $_SESSION['warenkorb'][$art] ="";
                          
                      }
                      }
                  }

                  ?>                                   <form action="kasse.php" method="post">    
                                                      <td width="371">                                        
                                                          <p align="center"><input type="submit" value="zur Kasse" name="kasse"></p>
                                                          
                                                      </td></form>
                  Hier die Fehlermeldung:

                  Zugriff verweigert!
                  Der Zugriff auf das angeforderte Objekt ist nicht möglich. Entweder kann es vom Server nicht gelesen werden oder es ist zugriffsgeschützt.
                  Zuletzt geändert von DorfbewohnerBD; 30.03.2007, 19:38.

                  Kommentar


                  • #10
                    ich werde hierzu mal ein neues Thema aufmachen, sonst wird es zu unübersichtlich.

                    Kommentar


                    • #11
                      Problem mit &quot;Warenkorb&quot;

                      Hi zusammen!

                      Habe zwei verschiedene Warenkörbe erstellt. Den 1. um die Menge jedes Artikels zu erfassen und den 2. um alle bisher ausgewählten Artikel nochmals anzeigen zu lassen und ggf. zu löschen. Am Ende kann man noch die Kartonagen angeben.

                      Datei 2. warenkorb:

                      - hat drei Spalten:

                      1. Spalte: checkbox kann angeklickt werden, wenn Artikel aus SESSION gelöscht werden soll.

                      2. Spalte:
                      Hier werden die ausgewählten Artikel, die sich in der SESSION befinden nochmals ausgegeben

                      3. Spalte Preis je Position (Menge x Preis)

                      - darunter kann man dann die Kartonagen auswählen
                      - dann gibt es zwei Buttons "löschen" und "Kasse"

                      Sorry, leider ziemlich langer Code.

                      Hier der Code:


                      PHP-Code:

                              <?
                      //Formularbeginn
                      ?>


                                              <form name="form1" action="<?php echo $PHP_SELF;?>" method="post">
                                              <table border="1" width="756">                 
                                                                                                  
                      <?php
                          
                      echo '<tr>';
                          echo 
                      '<td width="576" height="64">';
                          echo 
                      '<p align="center""><b><u>Artikel die gel&ouml;scht werden sollen</b></u></p></td>';
                          echo 
                      '<td width="576" height="64"><p align="center"><b><u>Weinsorte</u></b></p></td>';
                          echo 
                      '<td width="164" height="64"><p align="center"><b><u>Preis je Position</u></b></p></td></tr>';

                      foreach (
                      $_SESSION['warenkorb'] as $value) {
                          
                      //Kategorie bestimmen
                          
                      switch ($value['kat']) {
                              case 
                      :
                                  
                      $i 'w';
                                  break;
                              case 
                      :
                                  
                      $i 'r';
                                  break;
                              case 
                      :
                                  
                      $i 's';
                                  break;
                              case 
                      :
                                  
                      $i 'p';
                                  break;
                          }

                          
                      $sql "Select Abbildung, Nr, Jahrgang, Rebsorte, Flaschenart, Preis from weinshop where wnr= $value[art]";
                          
                      //fügt / hinzu um SQL-Injection abzufangen
                          
                      mysql_real_escape_string($sql);
                          
                      $result mysql_query($sql) OR die(mysql_error());
                          
                      $row mysql_fetch_array($resultMYSQL_ASSOC);
                          
                      $row['bestellmenge'] = $value['menge'];
                          
                      $art $value['art'];
                          
                      //Tabellen-Spalten erzeugen
                          
                      echo '<tr>';
                          echo 
                      '<td width="576" height="64">';
                          echo 
                      '<p><input type="checkbox" name="cb[' $art ']"></p>';
                          
                          echo 
                      '</td>';
                          echo 
                      '<td width="576" height="64">';
                          
                      //Warenkorb ausgeben
                          
                      echo " <p> Nr. " $row["Nr"] . " </p> ";
                          echo 
                      " <p> " $row["Jahrgang"] . " </p> ";
                          echo 
                      " <p> " $row["Rebsorte"] . " </p> ";
                          echo 
                      " <p>Preis &nbsp;" $row["Preis"] . "&nbsp;&euro;</p><br>";
                          echo 
                      ' </td>';
                          echo 
                      '<td width="164" height="64">';
                          
                      //Komma in Punkt umwandeln
                          
                      $preis floatval(str_replace(',''.'$row["Preis"]));
                          
                      $erg = ($preis $row['bestellmenge']);
                          
                      number_format($erg2);
                      //. in , umwandeln
                          
                      $erg_neu str_replace("."","$erg);
                          
                      //Ausgabe mit Komma
                          
                      echo '<p align="center">' $erg_neu '&nbsp;&euro;</p>';
                          echo 
                      '  </td>';
                          echo 
                      '</tr>';
                      }
                      ?>
                                              </table>
                                              <table border="1" width="755">
                                                  <tr>
                                                      <td width="181" valign="top">                               
                                                       
                                                              <p>Bitte Kartonart w&auml;hlen<br></p>  
                                                              <p>&nbsp;<input type="checkbox" name="cb1">3er Karton</p>
                                                              <p>&nbsp;<input type="checkbox" name="cb2">6er Karton</p>
                                                              <p>&nbsp;<input type="checkbox" name="cb3">12er Karton</p>
                                                              <p>&nbsp;<input type="checkbox" name="cb4">15er Karton</p>
                                                              <p>&nbsp;<input type="checkbox" name="cb5">18er Karton</p>
                                                          
                                                          <p>&nbsp;</p>
                                                      </td>
                                                      <td width="200" valign="top">
                                                          <p>Bitte Kartonanzahl wählen<br></p>
                                                         
                                                              <p><input type="text" name="t1" maxlength="2" size="4"></p>
                                                              <p><input type="text" name="t2" maxlength="2" size="4"></p>
                                                              <p><input type="text" name="t3" maxlength="2" size="4"></p>
                                                              <p><input type="text" name="t4" maxlength="2" size="4"></p>
                                                              <p><input type="text" name="t5" maxlength="2" size="4"></p>
                                                         
                                                          <p>&nbsp;</p>
                                                      </td>
                                                      <td width="352">
                                                          <p align="center"><b>Sonstige Bemerkungen oder Wünsche? Bitte hier eintragen...</b></p>
                                                          <p align="center"><textarea name="formtextarea1" rows="14" cols="29"></textarea></p>
                                                      </td>
                                                  </tr>
                                              </table>
                                              <table border="1">
                                                  <tr>
                                                      <td width="748">
                                                          <p align="right"><b>Summe:</b></p>
                                                      </td>
                                                      <td width="748">&nbsp;</td>
                                                  </tr>
                                              </table>

                                              <div align="right">
                                                  <table border="1" width="30%">
                                                      <tr>
                                                          <td width="371">                                        
                                                              <p align="center"><input type="submit" name="loeschen" value="löschen"></p>
                                                             </td>
                                                             </form>
                      <? //Formular auswerten
                      //include 'form_auswerten.php';
                      if($_POST){
                          
                      echo "test";    
                      }
                      if (isset($_POST['loeschen'])) {
                          
                          echo "test";
                          
                          foreach ($_SESSION['warenkorb'] as $value) {
                          
                          $sql = "Select Abbildung, Nr, Jahrgang, Rebsorte, Flaschenart, Preis from weinshop where wnr= $value[art]";
                          //fügt / hinzu um SQL-Injection abzufangen
                          mysql_real_escape_string($sql);
                          $result = mysql_query($sql) OR die(mysql_error());
                          $row = mysql_fetch_array($result, MYSQL_ASSOC);
                          
                          
                          if(isset($_POST[cb][$art])){
                              $pos = $row[$art];
                              echo $art;
                          $_SESSION['warenkorb'][$art] ="";
                              
                          }
                          }
                      }

                      ?>                                   <form action="kasse.php" method="post">    
                                                          <td width="371">                                        
                                                              <p align="center"><input type="submit" value="zur Kasse" name="kasse"></p>
                                                              
                                                          </td></form>

                      Hier die Fehlermeldung:

                      Zugriff verweigert!
                      Der Zugriff auf das angeforderte Objekt ist nicht möglich. Entweder kann es vom Server nicht gelesen werden oder es ist zugriffsgeschützt.

                      Kommentar


                      • #12
                        Original geschrieben von DorfbewohnerBD
                        ich werde hierzu mal ein neues Thema aufmachen, sonst wird es zu unübersichtlich.
                        Nein

                        *zusammenführen*
                        Zuletzt geändert von asp2php; 30.03.2007, 20:10.

                        Kommentar


                        • #13
                          Original geschrieben von DorfbewohnerBD

                          Hier die Fehlermeldung:

                          Zugriff verweigert!
                          Der Zugriff auf das angeforderte Objekt ist nicht möglich. Entweder kann es vom Server nicht gelesen werden oder es ist zugriffsgeschützt.
                          würdest du bitte aufhören, kompletten Code zu posten , wenn dann nur relevanten Code.

                          Was hast du denn schon in Richtung Debugging unternommen?

                          Kommentar


                          • #14
                            der Code ist ja zusammenhängend, da wollte ich jetzt nichts weglassen.

                            habe es damit probiert:

                            PHP-Code:

                            <? //Formular auswerten
                            //include 'form_auswerten.php';
                            if($_POST){
                                
                            echo "test";    
                            }
                            if (isset($_POST['loeschen']) && isset($_POST[cb][$art]))  
                            {  
                              $_SESSION['warenkorb'][$art] =""; 
                            }  
                            ?>

                            Kommentar


                            • #15
                              wo kommt denn

                              $art = $value['art'];

                              her? Ausserdem durch die Art wie du mit Array umgehst, sind schon Fehler zu erwarten.

                              Kommentar

                              Lädt...
                              X