Antworten auf deine Fragen:
Neues Thema erstellen

PHP - Problem bei Session

sloshed

HTML/CSS Profi ;P

AW: PHP - Problem bei Session

Danke für die ganzen Beiträge. Leider verstehe ich immer mehr Bahnhof :)

Ich habe das ganze mal hoch geladen:

Hier Startet man. Anschließend bei klick auf den Artikel kommt man in den Warenkorb. Im Warenkorb kann man dann die Bestellung tätigen. Diese soll dann in eine XML-Datei geschrieben werden.

Ich mache das ganze nach einem Lernheft meiner FernUni und wie ich raus gefunden habe ist dieses Lernheft von 2004. Also PHP 4.x.

Hier auch mal die ganzen Dateien zum reinschauen:
 

Chickenshooter

Alter Mann

AW: PHP - Problem bei Session

So nun Antworten und Lösungen:
Du hast die Session immer wieder überschrieben

ich habe die warenkorb.php angepasst:
PHP:
<?php
    include("Warenkorb.inc");
    
    session_start();
    /* checken ob $_SESSION['korb'] vom Typ Warenkorb ist */
    if(is_a($_SESSION['korb'],"Warenkorb"))
        $korb = new Warenkorb($_SESSION['korb']);
    else 
        /* wenn nicht vom Typ Warenlorb dann neue Instanz */
        $korb = new Warenkorb();
        
    /* Testausgabe des Objektes $korb */
    echo "<div style=\"border: 1px solid red; margin:20px; padding:5px;\"><h3>Testausgabe des Objects:</h3>". print_r($korb,true)."</div>";

    // Artikel hinzufügen?
    //if (isset($artikel)) $korb->hinzufuegen($artikel);
    if (isset($_GET['artikel'])) $korb->hinzufuegen($_GET['artikel']);
    
    // Artikel entfernen?
    //if (isset($entf)) $korb->entfernen($entf);
    if (isset($_GET['entf'])) $korb->entfernen($_GET['entf']);
    
    // Gesamten Warnkorb löschen?
    //if (isset($loeschen)) $korb->leeren();
    if (isset($_GET['loeschen']) && intval($_GET['loeschen'])==1) 
        $korb->leeren();
    
    /* das ist neu siehe Warenkorb.inc */
    $korb->writeInSession();
?>
<html>
    <body>
        <h1>Warenkorb</h1>
        <a href="warenkorb.php?loeschen=1">Warenkorb löschen</a>
        <p>Sie haben bisher folgende Artikel ausgewählt: <p>
        <?php
            /* das ist neu siehe Warenkorb.inc */
            $korb->printCart(false);
        ?>
        <br /><a href="bestellung.php">Zur Bestellung</a>
        <br /><a href="artikel.php">Artikelliste</a>
    </body>
</html>
so und nu die Klassendefinition Warenkorb.inc

PHP:
<?php
class Warenkorb {
    
    var $inhalt = Array();
    
    /**
     * Hier mal ein Konstruktor
     *
     * @param Warenkorb $warenkorb
     * @return Warenkorb
     */
    function Warenkorb($warenkorb=null)
    {
        if (is_a($warenkorb,"Warenkorb"))
        {
            $this->inhalt = $warenkorb->inhalt;
        }
    }
    
    /**
     * schreib den Warenkorb als komplettes Object in die Session
     *
     */
    function writeInSession()
    {
        session_start();
        $_SESSION['korb'] = $this;        
    }
    
    /**
     * Liest die Session aus
     *
     */
    function readSession()
    {
        session_start();
        $_SESSION['korb'] = $this;        
    }
    
    /**
     * Listet den Warenkorb auf wahlweise als return oder als Direktausgabe
     *
     * @param Boolean $return
     * @return Strring
     */
    function printCart($return=true)
    {
        $r="Nichts im Warenkorb!";
        if ( is_array($this->inhalt) && count($this->inhalt)>0 ) 
        {
            $r="";
            foreach ($this->inhalt as $artikel=>$anzahl)
            {
                 $r.="Artikelnummer: $artikel ";
                $r.="<a href='warenkorb.php?entf=$artikel'>Artikel entfernen</a><br/ >";
                $r.="Anzahl: $anzahl<br>";
                /* Das folgende Gebilde kannst Du dir weg sparen wenn Du dann mit Deiner Artikelklasse arbeitest
                    if ($artikel == 1001)
                           print "Der Herr der Ringe<p>";
                    if ($artikel == 2002)
                           print "Der kleine Hobbit<p>";
                    if ($artikel == 3003)
                           print "Grimms Märchen<p>";
                    if ($artikel == 4004)
                           print "Elric von Melnibonee <p>";
                */
            }
        }
        
        if ($return)
            return $r;
        else
            echo $r;
    }
    
    /**
     * Schreibt den Warenkorb in eine XML-Datei
     *
     * @param Srring $fileName
     * @return Integer or false
     */
    function writeOrder($fileName="bestellung.xml")
    {
        $inhalt = '<?xml version="1.0" encoding="iso-8859-1"?>';
        $inhalt .= "<bestellung>";
        foreach ($this->inhalt as $id => $anz)
        {
            $inhalt .= '<artikel nummer="'.$id.'" anzahl = "'.$anz.'" />';
        }
        
        $inhalt .= "</bestellung>";
        return file_put_contents($fileName,$inhalt);  
    }
    
    /**
     * Menge fuer eine bestimmte Position hochzählen
     *
     * @param Integer $artikel
     */
    function hinzufuegen($artikel) {
        $this->inhalt[$artikel]++;
    }
    
    /**
     * Menge fuer eine bestimmte Position runterzählen
     * wenn menge 0 dann Position aus Array entfernen
     *
     * @param Integer $artikel
     */
    function entfernen($artikel) {
        //unset($this->inhalt[$artikel]);
        $this->inhalt[$artikel]--;
        if ($this->inhalt[$artikel]<=0) {
            unset($this->inhalt[$artikel]);
        }
    }
    
    /**
     * Array $inhalt löschen
     *
     */
    function leeren() {
        $this->inhalt = Array();
    }
}
?>
bei mir funzt der Code richtig gut und auch das Listing in der bestellung.php
sieht gut aus hier der Code der bestellung.php

PHP:
<?php include("Warenkorb.inc");
    session_start();
    
    $korb = new Warenkorb();
    $korb->readSession();

    echo '<pre>'; print_r($korb);echo '</pre>';  
    
    $file = "bestellung.xml";
    /* das ist neu siehe Warenkorb.inc */
    if ($korb->writeOrder($file))
        echo '<div style="border:3px solid green; margin:30px; padding:20px;">Bestellung in die Datei '.$file.' geschrieben.</div>';    
    else 
        echo '<div style="border:3px solid red; margin:30px; padding:20px;">Bestellung <b>NICHT</b> in die Datei '.$file.' geschrieben.</div>';    
?>

MfG
 
Zuletzt bearbeitet:

sloshed

HTML/CSS Profi ;P

AW: PHP - Problem bei Session

Erstmal danke für die Mühe.
Ohne die Dateien zu ändern ist es nicht möglich die bestellung.php zu realisieren?
grüße
 

Chickenshooter

Alter Mann

AW: PHP - Problem bei Session

Erstmal danke für die Mühe.
Ohne die Dateien zu ändern ist es nicht möglich die bestellung.php zu realisieren?
grüße

Steh aufm Schlauch....

Was meinst Du denn damit?????

Wenn Du mit Klassen und Objekten arbeiten willst
ist der Weg den ich Dir vorschlage der Richtige.

Wiederverwendbarkeit von Code ist die Devise.

MfG
 

sloshed

HTML/CSS Profi ;P

AW: PHP - Problem bei Session

Sollte nicht böse gemeint sein.
Dein Code sieht gut aus und brachte mir auch wieder etwas bei.
Mein Problem ist die Änderung der anderen Dateien. Da müsste ich erst mal Rückfrage mit meinem Dozenten halten.
Trotzdem Danke für deine Mühe! Natürlich gilt das auch für die Anderen ;)
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben