Daten im Warenkorb nicht richtig übernommen

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Daten im Warenkorb nicht richtig übernommen

    Hallo,

    ich soll als Hausarbeit einen kleinen Webshop erstellen (und zwar ohne MySQL). Es funktioniert auch lokas alles ganz prima. Online gibt es allerdings ein Problem: ruft man die Seite http://34322010.haf-projekt.de das allererste Mal neu auf und erstellt eine Bestellung mehrerer Artikel, so überschreibt man mit dem zweiten bestellten Artikel den ersten. Beim 3. 4. ocder 5. Artikel klappt alles wie es soll und auch wenn man eine zweite Bestellung tätight. Der Fehler tritt also in nur einem ganz bestimmten Fall auf.

    Offensichtlich wird also der allererste Artikel nicht ins Session Array übernommen. Frage ist jetzt : warum und vor Allem warum nur online, wenn lokal alles funktioniert.

    Waren.inc und artikel.inc werden in einer index.php includiert in die dann die warenkorb.php usw. ebenfalls includiert werden.

    Schon mal danke im Voraus

    Hier der Code:

    Artikel.php


    <?php
    include("artikelliste.php");
    $artikelparser = new Artikelparser($datei);
    ?>
    <html>
    <head>
    </head>
    <body
    <br>
    <table class="contenter" border="1" style="margin-left:20" width="70%">
    <?php
    print "<tr bgcolor='#f0f4f1'><td>Art.nr.</td><td>Titel</td><td>Autor</td><td>Einzelpreis</td><td></td></tr>";
    foreach ($artikelparser->art as $nummer=>$artikel) {
    print "<tr>" ;
    print "<form name='artikel' method='post' action='index.php?
    goto=warenkorb&artikel=$nummer&titel=$artikel->name&preis=$artikel->preis >";
    print "<td>" . $nummer . "</td>";
    print "<td class='contenter'><b>";
    print $artikel->name;
    print "</b><br>" . $artikel->desc . "</td>";
    print "<td align='right'>" . $artikel->autor . "</td>";
    print "<td align='right'>" . $artikel->preis . " Euro</td>";
    print "<td><input type='image' src='images/warenkorb_header.gif' ></td>";
    print "</tr>";
    print "</form>";
    }
    ?>
    </table>

    artikeldaten.xml
    <?xml version="1.0" encoding="windows-1250"?>
    <artikeldaten>
    <artikel nummer="2548">
    <name>Der Dativ ist dem Genitiv sein Tod</name>
    <desc>... </desc>
    <preis>12.90</preis>
    <autor>Bastian Sick</autor>
    .
    .
    </artikeldaten>

    artikel.inc.php
    <?php
    class Artikel {
    var $name;
    var $anzahl;
    var $preis;
    var $autor;
    var $desc;
    function Artikel($name, $preis, $autor, $desc) {
    $this->name= $name;
    $this->anzahl=1;
    $this->preis=$preis;
    $this->autor=$autor;
    $this->desc=$desc;
    }
    }
    ?>

    artikelliste.php

    br>
    <p class="contenter" style="text-align:right;margin-right:150"><a href="index.php?goto=warenkorb"><img src="images/warenkorb_header.gif" width="30" height="18" border="0"></a></p>
    <?php
    class Artikelparser{
    var $nummer;
    var $art;
    var $aktuell;
    var $titel;
    var $preis;
    var $autor;
    var $desc;
    function Artikelparser($datei){
    $this->art = Array();
    $xmlFile = implode("", file("artikeldaten.xml"));
    $parser = xml_parser_create();
    xml_set_object($parser, $this);
    xml_set_element_handler($parser,"startElement","endElement");
    xml_set_character_data_handler($parser, "cdata");
    xml_parse($parser, $xmlFile);
    xml_parser_free($parser);
    }
    /*************************************
    Funktionsdeklarationen
    *************************************/
    function startElement($parser, $name, $atts) {
    $this->aktuell = $name;
    if($name == "ARTIKEL") $this->nummer = $atts["NUMMER"];
    }
    function endElement($parser, $name){
    if($name == "ARTIKEL") $this->art[$this->nummer] = new Artikel($this->titel, $this->preis, $this->autor, $this->desc);
    $this->aktuell = "";
    }
    function cdata($parser, $text) {
    if($this->aktuell == "PREIS") $this->preis = $text;
    if($this->aktuell == "NAME") $this->titel = $text;
    if($this->aktuell == "AUTOR") $this->autor = $text;
    if($this->aktuell == "DESC") $this->desc = $text;
    }
    function getArikelArray(){
    return $this->art;
    }
    }
    ?>

    waren.inc.php
    <?php
    class Warenkorb
    {
    var $inhalt =Array();
    function hinzufuegen($artikel, $titel, $preis) {
    $this->inhalt[$artikel]['anzahl'] ++;
    $this->inhalt[$artikel]['titel'] = $titel;
    $this->inhalt[$artikel]['preis'] = $preis;
    }
    function entfernen($artikel)
    {
    unset ($this->inhalt[$artikel]);
    }
    function leeren()
    {
    $this->inhalt = Array ();
    }
    }
    ?>

    warenkorb.php
    <?php
    session_start();
    // aus der SESSION
    $korb= $_SESSION['korb'];
    if (!is_object($korb)) {
    $korb=New Warenkorb();
    $_SESSION['korb'] =$korb;
    }

    if (isset ($artikel)) $korb->hinzufuegen($artikel, $titel, $preis);

    if (isset ($entf)) $korb->entfernen($entf);
    if (isset ($loeschen)) $korb->leeren();
    $gespreis = 0;
    if (!empty($korb)) {
    print "<br><br><br>";
    print "<table style='margin-left:10;margin-right:40' align='right'>";
    print "<tr><td><a href='index.php?goto=warenkorb&loeschen=1'><span style='margin-right:60'>
    <img src='images/leeren.gif' height='18' border='0'></span></a></td>";
    print "<td class='button'><span style='margin-right:60'><a href='index.php?goto=artikel'>Weiter einkaufen </a></span>";
    print "<td><a href='index.php?goto=kundendat'><img src='images/weiter.gif' width='131' height='18' border='0'></a></td></tr></table>";
    print "<br><br><br>";
    print "<table border= '1' style='margin-left:10'>";
    print "<tr class='contenter' bgcolor='#f0f4f1'><td> Art.nummer</td><td>Titel </td><td>Einzelpreis</td><td>Anzahl</td><td>Preis</td><td>Aktion</td></tr>";
    foreach ($korb->inhalt as $artikel => $anzahl) {
    $anz = $korb->inhalt[$artikel]['anzahl'];
    $tit = $korb->inhalt[$artikel]['titel'];
    $kostet=$korb->inhalt[$artikel]['preis'];

    print "<form name='warenkorb' method='post' action='index.php?goto=warenkorb&entf=$artikel'>";
    print "<tr>";
    print "<td class='contenter'>" . $artikel . "</td>";
    print "<td class='contenter'>" . $tit . "</td>";

    print "<td class='contenter'>" . $kostet . " Euro</td>";

    print "<td class='contenter'>" . $anz. "</td>";
    print "<td class='contenter'>" . number_format($anz * $kostet,2) . " Euro</td>";
    print "<td class='contenter'><input type='image' src='images/cross.gif' ></td>";
    $gespreis += $anz * $kostet;

    print "</form>";
    print "</tr>";
    }
    }
    print "<tr><td class='contenter' colspan='2' rowspan='2' style='text-align:right;font-size:14' ><b>Gesamt</b></td>";
    print "<td class='contenter' colspan='4' rowspan='2' style='text-align:right;font-size:14' ><b>" . number_format($gespreis,2) . " Euro</b></td></tr>";
    print "</table>";
    ?>
    <br><br><br><br><br><br>

    </body>
    </html>
    Zuletzt geändert von jahlives; 20.02.2008, 13:45.

  • #2
    bitte php-tags benutzen (siehe unten)

    danke
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      benutz doch bitte die PHP Tags, dann kann man das einfacher lesen.
      Hast du die die Session schonmal mittels print_r vor dem ändern jener ausgeben lassen?

      Kommentar


      • #4
        Ja das habe ich - ich poste nachher gern noch die Ausgabe

        Kommentar


        • #5
          nein hast du nicht. wir meinen [ PHP ] ... [ /PHP ] (nur ohne leerzeichen) da rein packst du deinen code.

          gruß
          peter
          EDIT:
          upsi, da hat das forum wieder was verschluckt, mein fehler
          Zuletzt geändert von Kropff; 20.02.2008, 13:38.
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            Ich meinte auch dass ich print_r schon benutzt habe die Antwort bezog sich nicht auf die PHP Tags

            Kommentar


            • #7
              Solange du die php-Tags nicht verwendest, interessiert sich erst recht niemand für die Ausgabe von print_r.

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                @ts

                du bist jetzt dreimal!!! darauf hingewiesen worden, die php-tags (über dem eingabefeld -> buton php) zu benutzen. dazu gibt es den schönen "ändern"-button unterhalb deines threads.

                also letzte warnung sonst landet das hier im müll.

                peter
                Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                Meine Seite

                Kommentar


                • #9
                  Es tut mir ja auch leid dass ich erst mal nach Hause kommen muss und nicht alles von der Arbeit aus machen kann. Aber Deinen Tonfall finde ich auch etwas seltsam muss ich sagen.

                  Wenn Du es unter Hilfe verstehst in dem Ton zu antworten dann ist das hier vielleicht auch nicht das richtige, danke also

                  Kommentar


                  • #10
                    * close trash *

                    peter
                    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                    Meine Seite

                    Kommentar

                    Lädt...
                    X