php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2004

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.10.2004, 00:40  
Erfahrener Benutzer
 
Registriert seit: 16.12.2003
Beiträge: 125
Broadcast
Standard 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!
Broadcast ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 29.10.2004, 05:15  
Gast
 
Beiträge: n/a
Standard Re: Warenkorb - neuer Session Datensatz!

Zitat:
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.
 
Alt 29.10.2004, 12:44  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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 ..
imported_Ben ist offline  
Alt 29.10.2004, 15:23  
Erfahrener Benutzer
 
Registriert seit: 16.12.2003
Beiträge: 125
Broadcast
Standard

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!
Broadcast ist offline  
Alt 29.10.2004, 16:37  
Gast
 
Beiträge: n/a
Standard

Zitat:
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
}
Zitat:
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.
 
Alt 29.10.2004, 17:30  
Erfahrener Benutzer
 
Registriert seit: 16.12.2003
Beiträge: 125
Broadcast
Standard

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?
Broadcast ist offline  
Alt 29.10.2004, 18:01  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ähem .. du hast da was überlesen:
Zitat:
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 ...
imported_Ben ist offline  
Alt 29.10.2004, 18:05  
Gast
 
Beiträge: n/a
Standard

... komische Config...
Zitat:
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.
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Session Problem karina_02 PHP Tipps 2008 6 18.05.2008 22:37
Problem bei session Lifetime Cyberbob_at_tot PHP Tipps 2007 5 05.06.2007 17:47
Arrays, Session, Warenkorb Problem Shaft2002 PHP Tipps 2006 6 29.11.2006 12:28
session nach seitenwechsel leer... GELight PHP Tipps 2006 8 17.09.2006 15:17
Query was empty bei Warenkorb Shalina PHP Tipps 2006 12 10.06.2006 00:45
[Erledigt] Warenkorb Alternative PHP-Fortgeschrittene 28 18.04.2006 14:19
warenkorb & mysql Mach!N3 PHP Tipps 2006 16 27.03.2006 21:18
Problem mit unset() und SESSION PHP Tipps 2007 3 17.11.2005 16:48
einen variablen datensatz löschen PHP Tipps 2007 3 04.11.2005 12:41
[Erledigt] php session problem :( PHP Tipps 2005-2 5 21.10.2005 16:37
Session wird nicht angelegt PHP Tipps 2005-2 7 24.07.2005 13:35
Kreieren einer Session PHP Tipps 2005 11 28.05.2005 15:16
neuen Warenkorb erstellen PHP Tipps 2005 2 15.05.2005 14:10
[Erledigt] Formulardaten in einer Session speichern, per Link übergeben PHP Tipps 2004-2 2 29.12.2004 15:47
[Erledigt] Hilfe...PhpBB Session Problem!! PHP Tipps 2004-2 2 15.12.2004 18:28

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
warenkorb programmieren, warenkorb programmieren cookie session, warenkorb programmieren php, \warenkorb alternative\ programmieren, neer warenkorb, php warenkorb session, anzahl/je produkt session php warenkorb, php warenkorb programmieren, warekorb mit session programmieren, warenkorb mit sessions beispiel, if(session_register(\warenkorb\)), einen warenkorb programmieren, warenkorb selber programmieren php fortgeschritten, warenkorb mit session anleitung, if(count($_session[\'warenkorb\']) == 0), php warenkorb session id = $, session warenkorb ?, mit collapse folgeseite falsch, warenkorb sessions programmieren, mehrere artikel in einer session

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:00 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.