Ankündigung

Einklappen
Keine Ankündigung bisher.

Warenkorb - neuer Session Datensatz!

Einklappen

Neue Werbung 2019

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

  • Warenkorb - neuer Session Datensatz!

    Hi Leute,

    also folgendes, ich will einen Warenkorb programmieren mit Sessions und habe folgendes Problem:

    Situation:
    Ich habe 2 oder mehrere Artikel, wenn der User die Seite betritt bekommt er automatisch eine SessionID zugewiesen. Wenn er nun auf Artikel 1 klickt wird dieser in den Warenkorb gelegt.

    Problem:
    Wenn der User dann auf Artikel 2 klickt so wird der erste Artikel überschrieben. Es soll aber in der Session ein neuer Datensatz angelegt werden. Da es keine Datenbank ist muss ich das irgendwie simulieren, nur wie?

    Hier die Testseite:

    http://www.carax-production.de/warenkorb.php

    Hier mein Code:

    Code:
    <?php
    
     session_start();
    
     $SESSIONID=session_id();
    
     session_register("Warenkorb");
     
    echo "
    <html>
    
    <head>
    <title>Warenkorb</title>
    </head>
    
    <body>
    
    <div align=\"center\">
      <center>
      <table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" style=\"border-collapse: collapse\" bordercolor=\"#111111\" width=\"84%\" id=\"AutoNumber1\">
        <tr>
          <td width=\"62%\" valign=\"top\" style=\"border-right-style: solid; border-right-width: 1\">
          <div align=\"center\">
            <center>
    
           <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"border-collapse: collapse\" bordercolor=\"#111111\" width=\"100%\" id=\"AutoNumber4\">
              <tr>
                <td width=\"100%\" align=\"center\" colspan=\"4\">
                <p align=\"left\"><font face=\"Verdana\" size=\"2\" color=\"#626231\">
                Warenkorb  </font><font face=\"Verdana\" size=\"1\" color=\"#626231\">
                ($SESSIONID)</font></td>
              </tr>
              <tr>
                <td width=\"10%\" align=\"center\" height=\"25\">
                <font face=\"Verdana\" size=\"1\" color=\"#666633\">AID</font></td>
                <td width=\"54%\" align=\"center\" height=\"25\">
                <font face=\"Verdana\" size=\"1\" color=\"#666633\">Artikelname</font></td>
                <td width=\"14%\" align=\"center\" height=\"25\">
                <font face=\"Verdana\" size=\"1\" color=\"#666633\">Menge</font></td>
                <td width=\"22%\" align=\"center\" height=\"25\">
                <font face=\"Verdana\" size=\"1\" color=\"#666633\">Preis</font></td>
              </tr>";
    
     if($Artikelname=="")
     {
        echo " <tr>
                <td width=\"100%\" align=\"center\" colspan=\"4\" height=\"62\">
                <font face=\"Verdana\" size=\"2\">- Keine Artikel im Warenkorb - </font></td>
              </tr>";
        $GESAMTPREIS=0;
     }
     else
     {
       $Warenkorb="$AID@$Artikelname@$Menge@$Preis";
       $GESAMTPREIS=0;
       
       $Ausgabe = explode("@", $Warenkorb);
       $W_AID=$Ausgabe[0];
       $W_Artikelname=$Ausgabe[1];
       $W_Menge=$Ausgabe[2];
       $W_Preis=$Ausgabe[3]*$W_Menge;
    
       $GESAMTPREIS=$GESAMTPREIS+$W_Preis;
       $ZAEHLER=0;
       
         echo "<tr>
                 <td width=\"10%\" align=\"center\">
                   <font face=\"Verdana\" size=\"2\" color=\"#666633\">$W_AID</font>
                 </td>
                 <td width=\"54%\" align=\"center\">
                   <font face=\"Verdana\" size=\"2\" color=\"#666633\">$W_Artikelname</font>
                 </td>
                 <td width=\"14%\" align=\"center\">
                   <input type=\"text\" name=\"Menge\" size=\"2\" value=\"$W_Menge\">
                 </td>
                 <td width=\"22%\" align=\"center\">
                   <font face=\"Verdana\" size=\"2\" color=\"#FF0000\">$W_Preis €</font>
                 </td>
               </tr>";
    
     }
    
    echo "
            </table>
            </center>
    
          </div>
          </td>
          <td width=\"38%\" style=\"border-bottom-style: none; border-bottom-width: medium; border-left-style:solid; border-left-width:1\" align=\"left\" valign=\"top\">
          <div align=\"center\">
            <center>
    
             <form method=post action=\"warenkorb.php\">
            <table border=\"0\" cellpadding=\"2\" cellspacing=\"0\" style=\"border-collapse: collapse\" bordercolor=\"#111111\" width=\"100%\" id=\"AutoNumber2\">
              <tr>
                <td width=\"100%\"><font face=\"Verdana\" size=\"2\" color=\"#626231\">ATI Radeon 9600 Pro</font></td>
              </tr>
              <tr>
                <td width=\"100%\">
                <font face=\"Verdana\" style=\"font-style: italic\" color=\"#666633\" size=\"1\">
                (Leistungsfähige Grafik zum super Preis)</font></td>
              </tr>
              <tr>
                <td width=\"100%\"><font face=\"Verdana\" size=\"2\" color=\"#666633\">Text und Bild</font></td>
              </tr>
              <tr>
                <td width=\"100%\"><font face=\"Verdana\" size=\"2\">
                <font color=\"#666633\">Stückpreis:</font><font color=\"#FF0000\">
                </font><font color=\"#FF0000\">169 €</font></font></td>
              </tr>
              <tr>
                <td width=\"100%\"><input type=\"hidden\" name=\"Artikelname\" value=\"ATI Radeon 9600 Pro\"><input type=\"hidden\" name=\"Preis\" value=\"169\"><input type=\"hidden\" name=\"AID\" value=\"1\">
                <input type=\"text\" name=\"Menge\" size=\"2\" value=\"1\">
                <input type=\"submit\" value=\"In Warenkorb legen\" name=\"Button1\" style=\"color: #333300; font-family: Arial; font-size: 8pt; border: 1px solid #666633; background-color: #D7D7C4\"></td>
              </tr>
            </table>
            </form> <form method=post action=\"warenkorb.php\">
            <table border=\"0\" cellpadding=\"2\" cellspacing=\"0\" style=\"border-collapse: collapse\" bordercolor=\"#111111\" width=\"100%\" id=\"AutoNumber3\">
              <tr>
                <td width=\"100%\"><font face=\"Verdana\" size=\"2\" color=\"#626231\">AMD Athlon 4Ghz</font></td>
              </tr>
              <tr>
                <td width=\"100%\">
                <font face=\"Verdana\" style=\"font-style: italic\" color=\"#666633\" size=\"1\">
                (Leistungsfähiger Prozessor zum super Preis)</font></td>
              </tr>
              <tr>
                <td width=\"100%\"><font face=\"Verdana\" size=\"2\" color=\"#666633\">Text und Bild</font></td>
              </tr>
              <tr>
                <td width=\"100%\"><font face=\"Verdana\" size=\"2\"><font color=\"#666633\">Stückpreis:</font>
                <font color=\"#FF0000\">350 €</font></font></td>
              </tr>
              <tr>
                <td width=\"100%\"><input type=\"hidden\" name=\"Artikelname\" value=\"AMD Athlon 4Ghz\"><input type=\"hidden\" name=\"Preis\" value=\"350\"><input type=\"hidden\" name=\"AID\" value=\"2\">
                <input type=\"text\" name=\"Menge\" size=\"2\" value=\"1\">
                <input type=\"submit\" value=\"In Warenkorb legen\" name=\"Button1\" style=\"color: #333300; font-family: Arial; font-size: 8pt; border: 1px solid #666633; background-color: #D7D7C4\"></td>
              </tr>
            </table>
            </form>
    
            </center>
          </div>
          </td>
        </tr>
        <tr>
          <td width=\"62%\" style=\"border-right-style: solid; border-right-width: 1\"><font face=\"Verdana\" size=\"2\"><font color=\"#666633\">
          Gesamtpreis:</font> <font color=\"#FF0000\">$GESAMTPREIS €</font></font></td>
          <td width=\"38%\" style=\"border-top-style: none; border-top-width: medium; border-left-style:solid; border-left-width:1\"></td>
        </tr>
      </table>
      </center>
    </div>
    
    </body>
    
    </html>";
    
    
    ?>
    Danke im voraus, gruss Broadcast!

  • #2
    Re: Warenkorb - neuer Session Datensatz!

    Zitat von Broadcast
    Problem:
    Wenn der User dann auf Artikel 2 klickt so wird der erste Artikel überschrieben. Es soll aber in der Session ein neuer Datensatz angelegt werden.
    Deshalb:
    Code:
    <?php
     session_start();
     $SESSIONID=session_id();
     session_register("Warenkorb"); # <----- !!!
    Damit überschreibst Du den alten Inhalt des Warenkorbs mit dem neuen Warenkorb.

    Lies im Handbuch nach, wozu $_SESSION da ist, was register_globals = Off bewirkt und warum man session_register() seit PHP 4.1.x nicht mehr benutzen soll.

    btw: poste das nächste mal den *relevanten* Code. 100 Zeilen HTML mit wilden Gänsefuß-Escape-Orgien gehören definitiv nicht dazu.

    Kommentar


    • #3
      grob gesagt .. du füngst einfach einem array, welches du per session weitergibst ein neues element hinzu ..

      und achtest natürlich auf meikels beitrag .. klar ..
      [b][url=http://www.benjamin-klaile.de]privater Blog[/url][/b]

      Kommentar


      • #4
        Hi Leute, also ich hab das Problem mit den Datensätzen alleine gelöst!
        Es gibt da noch ein neues Problem, aber zuerst mein Code.

        Code:
        <?php
        
         session_start();
        
         $SESSIONID=session_id();
        
         if(session_is_registered("Warenkorb"))
         {
          $COUNT++;
         }
         else
         {
          session_register("Warenkorb");
          session_register("COUNT");
          $COUNT=0;
         }
         
         if($Artikelname=="")
         {
            echo " <tr>
                    <td width=\"100%\" align=\"center\" colspan=\"4\" height=\"62\">
                    <font face=\"Verdana\" size=\"2\" color=\"#666633\">- keine Artikel im Warenkorb - </font></td>
                  </tr>";
            $GESAMTPREIS=0;
         }
         else
         {
        
           if($Warenkorb=="")
           {
             $Warenkorb="$AID@$Artikelname@$Menge@$Preis";
           }
           else
           {
             $Warenkorb="$Warenkorb%$AID@$Artikelname@$Menge@$Preis";
           }
        
           $GESAMTPREIS=0;
        
           $Datensatz = explode("%", $Warenkorb);
        
           for($ZAHL=0;$ZAHL<$COUNT;$ZAHL++)
           {
             $Ausgabe = explode("@", $Datensatz[$ZAHL]);
             $W_AID=$Ausgabe[0];
             $W_Artikelname=$Ausgabe[1];
             $W_Menge=$Ausgabe[2];
             $W_Preis=$Ausgabe[3]*$W_Menge;
        
             $GESAMTPREIS=$GESAMTPREIS+$W_Preis;
             $ZAEHLER=0;
        
             echo "<tr>
                     <td width=\"10%\" align=\"center\">
                       <font face=\"Verdana\" size=\"2\" color=\"#666633\">$W_AID</font>
                     </td>
                     <td width=\"54%\" align=\"center\">
                       <font face=\"Verdana\" size=\"2\" color=\"#666633\">$W_Artikelname</font>
                     </td>
                     <td width=\"14%\" align=\"center\">
                       <input type=\"text\" name=\"Menge\" size=\"2\" value=\"$W_Menge\">
                     </td>
                     <td width=\"22%\" align=\"center\">
                       <font face=\"Verdana\" size=\"2\" color=\"#FF0000\">$W_Preis €</font>
                     </td>
                   </tr>";
           }
         }
         
        ?>
        Neues Problem:
        Wenn ich nun die Seite betrete so bekommt der User eine SessionID, wenn er einen Artikel in den Warenkorb legt so bekommt er eine neue ID. Das will ich aber nicht! Nun ist es so das es Offline auf meinem Rechner geht, da behalte ich nur die eine SessionID. Wieso geht das auf dem Server nicht? Muss ich was im Code ändern?

        Testseite: http://www.carax-production.de/warenkorb.php

        Thx, im voraus!

        Kommentar


        • #5
          Zitat von Broadcast
          Hi Leute, also ich hab das Problem mit den Datensätzen alleine gelöst!
          Das ist schön, auch wenn es etwas falsch ist:
          Code:
          session_start();
          $warenkorb = array();
          if (! isset($_SESSION['warenkorb'])) # wenn neu, dann Array im Session Hash erzeugen
             $_SESSION['warenkorb'] = array();
          
          # Auswertung der Daten und speichern in $warenkorb
          
          # Abspeichern des Warenkorbs in der Session
          $_SESSION['warenkorb'][] = $warenkorb; # so landen alle Teilwarenkörbe in der Session
          Den Warenkorb liest Du am Schluß so:
          Code:
          if (isset($_SESSION['warenkorb']))
          {
            $k = count($_SESSION['warenkorb']);
            for ($i=0; $i<$k; $i++)
            {
          # Tu was mit $_SESSION['warenkorb'][$i]
            }
          # bearbeiteten Warenkorb löschen
            @unset ($_SESSION['warenkorb']);
          }
          else
          {
          # Warenkorb ist leer
          }
          Neues Problem:
          Wenn ich nun die Seite betrete so bekommt der User eine SessionID, wenn er einen Artikel in den Warenkorb legt so bekommt er eine neue ID. Das will ich aber nicht! Nun ist es so das es Offline auf meinem Rechner geht, da behalte ich nur die eine SessionID. Wieso geht das auf dem Server nicht? Muss ich was im Code ändern?
          Wahrscheinlich ist die PHP Config entweder falsch oder es gibt Unterschiede zu Deiner lokalen Kiste. Liefere bitte mal einen Link auf ein phpinfo, damit man sich das mal angucken kann.

          Kommentar


          • #6
            Thx, ich werd das mit dem Warenkorb glcih ma ausprobieren!


            Also hier ist der Link für die PHPInfo:
            http://www.carax-production.de/phpinfo.php

            Und woran könnte es liegen mit den Sessions?

            Kommentar


            • #7
              ähem .. du hast da was überlesen:
              Zitat von meikel
              Lies im Handbuch nach, wozu $_SESSION da ist, was register_globals = Off bewirkt und warum man session_register() seit PHP 4.1.x nicht mehr benutzen soll.
              solltest du es nicht überlesen haben .. dann solltest du das neu erlernte natürlich auch anwenden ...
              [b][url=http://www.benjamin-klaile.de]privater Blog[/url][/b]

              Kommentar


              • #8
                ... komische Config...
                Zitat von Broadcast
                Und woran könnte es liegen mit den Sessions?
                Entweder kann/darf PHP das Sessionfile nicht lesen/schreiben (könnte an open_basedir liegen) oder Du realisierst kein Fallback, wenn der Client keine Kekse will. Dann wird die Session_id nicht an die Folgeseiten weitergegeben und stirbt deshalb.

                Kommentar

                Lädt...
                X