Sie werden mit den folgenden Aufgaben den Webshop mit Warenkorb- Funktionalität 
                weiter verbessern. Ihre Lösung sollten Sie - wie beim ersten PHP- Heft - auf den Webspace 
                des Online- Lernsystems hochladen. Ergänzend zu den PHP- Dateien sollten Sie eine 
                Beschreibung Ihrer Lösung und die Angabe Ihrer Webspace- Adresse einschicken.
                Teilaufgabe 1:
                Schaffen Sie eine Administrations- Seite, die passwortgeschützt ist. Diese Seite soll 
                zunächst nur die Funktion anbieten, eine Artikeldatei in XML- Format hochladen zu können, 
                die dann die alte Artikeldatei ersetzt.
                Teilaufgabe 2:
 
                Schreiben Sie ein neues Skript "bestellung.php", das über einen Link auf der Warenkorbseite 
                aufgerufen werden soll. Das Skript soll die Bestelldaten in einer Datei "bestellung.xml" im folgenden 
                XML- Format abspeichern: 
                
<bestellung>
    <artikelnummer="1001" anzahl="3">
    <artikelnummer="3003" anzahl="1">   
</bestellung>        
                Außerdem soll der Warenkorb nach einer Bestellung geleert werden.
                Teilaufgabe 3:
                Verbessern Sie die Datei "artikelliste.php", die bisher die XML- Datei "artikeldaten.xml" parst. 
                Das Parsen soll über eine Klasse "Artikelparser" gehandhabt werden.
                ---
                
Meine Lösung:
 
                Sie können den verbesserten Webshop austesten.
                Zusammenstellung der Dateien von Shop- Applikation:
 
                
                    * 
aritkel.inc - Die Artikel-Klasse
                    
                        
<?php
    class Artikel
    {
        var $name;
        var $anzahl;
        var $preis;
        var $nummer;
        
        function Artikel ($name, $preis, $nummer)
        {
            $this->name =$name;
            $this->anzahl =1;
            $this->preis = $preis;
            $this->nummer = $nummer;
        }
    }  
?>
                        Quelltext schließen
                     
                    
                     * 
artikeldaten.xml - Nummer, Name und Preis der angebotenen Artikel
                    
                    
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<artikeldaten>
    <artikel nummer="1001">
        <name>Im Schatten der Drachen</name>
        <preis>14.90</preis>
    </artikel>
    <artikel nummer="1002">
        <name>Eragon - Das Erbe der Macht</name>
        <preis>24.99</preis>
    </artikel>
    <artikel nummer="1003">
        <name>shadowdwellers: Trace</name>
        <preis>9.99</preis>
    </artikel>
    ...
</artikeldaten>
                    Quelltext schließen
                     
                    
                     * 
artikelliste.php - Liest die Artikeldaten in ein globales Array
                    
                        
<?php
    include_once("artikel.inc");
    
    class Artikelparser
    {
        var $art;
        var $nummer;
        var $aktuell;
        var $titel;
        var $preis;
        
        function Artikelparser($datei)
        {
            //Initialisieren des Artikelarrays
            $this->art = Array(); 
            
            // Einlesen der Artikeldatei und kreiren der Parservariablen
            $xmlFile = implode("",file($datei));
            $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->nummer);
            }
            $this->aktuell = "";
        }
        
        function cdata($parser, $text)
        {
            if ($this->aktuell == "PREIS") $this->preis = $text;
            if ($this->aktuell == "NAME") $this->titel = $text;
        }
        
        function getArtikelArray() 
        {
            return $this->art;
        }         
    }
?>                       
                        Quelltext schließen
                     
                    
                     * 
artikel.php - Stellt die Artikelauswahl dar
                    
                        
<?php
    include("artikelliste.php")
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <titleOnlineshop - Bücher</title>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    <meta name="author" content="Margarita Miagkova" />
</head>
<body>
    <h1>Willkommen im Onlineshop</h1>
    <p>Derzeit können Sie folgende Bücher bestellen</p>
    <?php
        $art_parser = new Artikelparser("artikeldaten.xml");
        $art = $art_parser->getArtikelArray();
        print "<table cellpadding='5' cellspacing='5' border='1'>";
            print "<tr
                        <th align="left">Nummer</th>
                        <th align="left">Artikel</th>
                        <th align="left">Preis</th>
                        <th align="left">Warenkorb</th>
                   </tr>";
                   
                   foreach($art as $nummer=>$art_objekt)
                   {
                       print "<tr>";
                            print "<td>".$art_objekt->nummer."</td>";
                            print "<td>".$art_objekt->name."</td>";
                            print "<td align='right'>".$art_objekt->preis." EUR</td>";
                            print "<td align='right'>
                            <a href='warenkorb.php?artikel=$nummer'>ablegen</a></td>"; 
                       print "</tr>";
                   }
        print "</table>";
    ?>
    <hr />
    <a href="warenkorb.php">Warenkorb anzeigen</a>
    <hr />
    <a href="admin.php">zur Admin-Seite</a>
</body>
</html>                        
                        Quelltext schließen
                     
                    
                     * 
warenkorb.inc - Die Warenkorb-Klasse
                    
                        
<?php
    class warenkorb
    {
        var $inhalt = Array();
        
        function hinzufuegen($artikel)
        {
             $this->inhalt[$artikel]++;
        }
        
        function entfernen($artikel)
        {
             unset ($this->inhalt[$artikel]);
        }
        
        function leeren ()
        {
            $this->inhalt = Array();
        }
    }
?>
                        Quelltext schließen
                     
                    
                     * 
warenkorb.php - Stellt den Inhalt des Warenkorbs dar
                    
                        
<?php
    include ("warenkorb.inc");
    
    // starte Session
    session_start(); 
    
    // Warenkorbobjekt aus Session auslesen
    $korb = $_SESSION['korb'];
    
    // Neuen Warenkorb anlengen, wenn noch nicht vorhanden
    if (!is_object($_SESSION['korb']))
    {
        $korb = new Warenkorb();
        $_SESSION['korb'] = $korb;
    }
    
    // Artikel zum Warenkorb hinzufügen
    if (isset($_GET['artikel']))
        $korb->hinzufuegen($_GET['artikel']); 
        
    // Artikel aus dem Warenkob entfernen 
    if (isset($_GET['entf'])) 
        $korb->entfernen($_GET['entf']);
    
    // Warenkorb löschen
    if (isset($_GET['loeschen']))
        $korb->leeren();    
?>
<html>
<head>
    <title>Onlineshop - Warenkorb</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="author" content="Margarita Miagkova" />
</head>
<body>
    <h1>Ihr Warenkorb</h1>
    <p><a href="warenkorb.php?loeschen=1">Warenkorb löschen</a></p>
    <?php 
        if (empty($korb))
        {
            print "Es befinden sich zurzeit keine Artikel im Warenkorb";
        }
        else
        {
            print "<p><b>Sie haben folgende Artikel in den Warenkorb abgelegt.</b></p>";
            print "<table cellpadding='5' cellspacing='5' border='1'>";
            print "<tr>";
            print "<th align='left'>Nummer</th>";
            print "<th align='left'>Artikel</th>";
            print "<th align='left'>Preis</th>";
            print "<th align='left'>Anzahl</th>";
            print "</tr>";
            
            foreach ($korb->inhalt as $_GET['artikel']=>$anzahl)
            {
                print "<tr><td align='right'>".$_GET['artikel']."</td>";
                print "<td>";
                    if ($_GET['artikel'] == 1001)
                        print "Im Schatten der Drachen"; 
                    if ($_GET['artikel'] == 1002)
                        print "Eragon - Das Erbe der Macht";
                    if ($_GET['artikel'] == 1003)
                        print "shadowdwellers: Trace"; 
                    ...
                print "</td>";
                print "<td align='right'>";
                     if ($_GET['artikel'] == 1001)
                        print "14.90 EUR";
                    if ($_GET['artikel'] == 1002)
                        print "24.99 EUR";
                    if ($_GET['artikel'] == 1003)
                        print "9.99 EUR";
                    ...
                print "</td>";
                print "<td align='right'>".$anzahl."</td>"; 
                print "<td><a href='warenkorb.php?entf=".$_GET['artikel']."'>
                        Artikel entfernen</a></td>";
                print "</tr>"; 
            }
            print "</table>";
        }
    ?>
    <hr />
    <a href="bestellung.php">zur Bestellung</a>
    <hr />
    <a href="artikel.php">zurück zu den Artikeln</a>
    <hr />
    <a href="admin.php">zur Admin-Seite</a>
</body>
</html>
                        Quelltext schließen
                     
                    
                     * 
bestellung.php - Stellt die Bestellseite dar
                    
                        
<?php 
    include("warenkorb.inc"); 
    
    // starte Session
    session_start();
    
    // Warenkorb auslesen
    $korb = $_SESSION['korb'];
?>
<html>
<head>
    <title>Onlineshop - Bestellung</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="author" content="Margarita Miagkova" />
</head>
<body>
    <h1>Bestellung</h1>
    <?php 
        // Prüfen, ob ein Warenkorb existiert 
        if (!is_object($korb)) 
        {
            print "Bisher wurde leider kein Warenkorb angelegt!";    
        }
        else
        {
            // Prüfen ob Artikel im Warenkorb vorhanden sind 
            if (! empty($korb->inhalt))
            {
                // Speichern des Warenkorbes in die XML-Datei 
                $Datei = fopen("bestellung.xml","a"); 
                fwrite($Datei,"<bestellung>\n",255);
                    foreach ($korb->inhalt as $artikel=>$anzahl)
                    {
                        fwrite ($Datei, "   <artikel>\n");
                        fwrite ($Datei, "       <nummer>$artikel</nummer>\n");
                        fwrite ($Datei, "       <anzahl>$anzahl</anzahl>\n");
                        fwrite ($Datei, "   </artikel>\n");
                    }
                fwrite($Datei,"</bestellung€\n",255);
                fclose($Datei);
                
                // Warenkorb löschen und in Session speichern
                $korb->leeren();
                $_SESSION['korb'] = $korb; 
                
                print "<p><b>Ihre Bestellung wurde gespeichert.</b></p>"; 
                print "<p><b>Ihr Warenkorb ist jetzt leer.</b></p>";
            }
            else 
            {
                print "<p>Der Warenkorb ist leer.</p>";
            }   
        }  
    ?>
    <hr />
    <a href='artikel.php'>zum Onlineshop</a>
    <a href='admin.php'>zur Admin-Seite</a>
</body>
</html>
                        Quelltext schließen
                     
                     
                     * 
bestellung.xml - Nummer und Anzahl der bestellten Artikel
                    
                        
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<bestellung>
    <artikel>
        <nummer>1001</nummer>
        <anzahl>2</anzahl>
    </artikel>
</bestellung>
                        Quelltext schließen
                     
                    
                     * 
admin.php - Stellt die passwortgeschützte Admin- Seite dar
                    
                        
<?php
    //session starten, falls nicht schon passiert
    session_start();
    
    //Benutzername und Passwort 
    $user_name = "SuperUser";
    $user_pass = "987654";
    
    // Ausgabe der HEAD-Informationen für die HTML-Ausgabe
    print    '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
            <html>
            <head>
                <title>Onlineshop- Aktualisieren</title>
                <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
                <meta name="author" content="Margarita Miagkova" /">
            </head>
            <body>
            <h1>Artikel aktualisieren</h1>
            <p>Diese Funktion ist nur für berechtigte Nutzer zugägnlich.</p>
            <p>Bitte loggen Sie sich ein.</p>';
    
    //login Funktionen - Variablen werden gespeichert
    $user = $_POST['user']; 
    $pw = $_POST['pw'];
    
    // Überprüfung der Login- Daten
    if (isset($user, $pw))
    {
        if ($user != $user_name OR $pw != $user_pass)
        {
            print "<p><b>Benutzer und/oder Passwort sind falsch. 
            Bitte überprüfen Sie nochmals Ihre Eingaben.</b></p>";
            print '<form name="login" method="post" action="'.$_SERVER['PHP_SELF'].'">'
                        <table cellpadding="5" cellspacing="5">
                            <tr>
                                <td>User Name:</td>
                                <td><input type="text" name="user"></td>
                            </tr>
                            <tr>
                                <td>User Passwort:</td>
                                <td><input type="password" name="pw"></td>
                            </tr>
                        </table>
                        <input type="submit" name="Submit" value="einloggen">
                   </form>
                   <hr / >
                   <a href="artikel.php">zurück zu den Artikeln</a>';
        }
        elseif ($user == $user_name AND $pw == $user_pass)
        {
            $_SESSION['user'] = $user;
            $_SESSION['pw'] = $pw; 
            
            print "<p><b>Ihre Anmeldung war erfolgreich</b></p>";
            print "<p>Sie können jetzt die Artikel aktualisieren</p>";
            
            //Ausgeben von Upload- Formular
            print '<form enctype="multipart/form-data" method="post" 
                    action="upload.php">'
                        <table cellpadding="5" cellspacing="5">
                            <tr>
                                <td>Datei:</td>
                                <td><input type="file" name="datei"></td>
                            </tr>
                        </table>
                        <input type="submit" value="Upload">
                    </form>
                    <hr />
                    <a href="artikel.php>Zum Onlineshop</a>';
        }
    }
    
    // Anmelde- Formular
    if (!isset($user, $pw))
    {
        print '<form name="login" method="post" action="'.$_SERVER['PHP_SELF'].'">'
                    <table cellpadding="5" cellspacing="5">
                        <tr>
                            <td>User Name:</td>
                            <td><input type="text" name="user"></td>
                        </tr>
                        <tr>
                            <td>User Passwort:</td>
                            <td><input type="password" name="pw"></td>
                        </tr>
                    </table>
                    <input type="submit" name="Submit" value="einloggen">
                </form>
                <hr / >
                <a href="artikel.php">zurück zu den Artikeln</a>';   
    }
    
    print "</body></html>"; 
?>
                        Quelltext schließen
                     
                    
                     * 
upload.php - Ersetzt eine Artikeldatei durch eine andere
                    
                        
<html>
<head>
    <title>Onlineshop - Upload</title>
    <meta name="author"  content="Margarita Miagkova"/>
</head>
<body>
    <?php 
        print "<h1>Dateiupload</h1>";
        print "<p>Sie haben folgende Datei ausgewähl:</p>";
        print "<table cellspacing='5' cellpadding='5'>";
        print "<tr>";
        print "<td>Datei:</td>";
        print "<td><b>".$_FILES['datei']['name']."</b></td>";
        print "</tr>";
        print "<tr>";
        print "<td>Dateigröße:</td>";
        print "<td><b>".$_FILES['datei']['size']." Bytes</b></td>";
        print "</tr>";
        print "<tr>";
        print "<td>Dateityp:</td>";
        print "<td><b>".$_FILES['datei']['type']."</b></td>";
        print "</tr>";
        print "</table>";
        
        $erfolg = move_uploaded_file
        {
            $_FILES['datei']['tmp_name'],
            ''.$_FILES['datei']['name']
        };
        
        if ($erfolg)
        {
            print "<p><b>Die Artikel wurden erfolgreich aktualisiert</b></p>";
            rename($_FILES['datei']['name'],"artikeldaten.xml");
        }
        else
        {
            print "<p><b>Die Artikel konnten nicht aktualisiert werden.</b></p>";    
        }
    ?>
    <hr />
    <a href="artikel.php">zum Onlineshop</a>
</body>
</html>
                        Quelltext schließen