HILFE! Finde Fehler nicht. XML-Parsen und Objekterzeugung

schuett

Grünschnabel
Hallo Zusammen!

Ich hänge fest und weiss nicht mehr weiter.

Der FEHLER-CODE:

Warning: Missing argument 1 for Artikelparser::Artikelparser(), called in C:\xampp\htdocs\PHP02\artikel.php on line 4 and defined in C:\xampp\htdocs\PHP02\artikelparser.php on line 11
Folgende Bücher können Sie bestellen
Euro
Euro
Euro
Euro
Euro


artikelparser.php


PHP:
<?php 	session_start(); 
		include_once ("Artikel.inc");			
		
class Artikelparser{  
    var $nummer;  
    var $art;  
    var $aktuell;  
    var $titel;  
    var $preis;  
      
    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);  

	 
}
        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->aktuell="";  
        }  
          
        function cdata($parser, $text){  
            if($this->aktuell== "PREIS") $this->preis = $text;  
            if($this->aktuell== "TITEL") $this->titel = $text;  
        }  

      
    function getArtikelArray(){  
        return $this->art;  
}  
}
?>

Artikel.inc

Code:
<?php
	class Artikel{
		var $name;
		var $anzahl;
		var $preis;
			
	function Artikel($name, $preis){
		$this->name = $name;
		$this->anzahl = 1;
		$this->preis = $preis;
	}
}
?>

artikel.php (Objekt erzeugen vom Typ "Artikelparser" Zugriff auf foreach-Schleife auf das Objekt Artikelparser.

PHP:
<?php session_start(); 

include("artikelparser.php");
$art = new Artikelparser();


?>


<?php

if ($_SESSION['login_okay'])
{
    ?>
<html><head>
<title>Artikel</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
	<h1>Folgende Bücher können Sie bestellen</h1>
    
	<body>
	
		<?php				
			
		foreach($art as $nummer=>$art_objekt){
		
		print
			"<a href='warenkorb.php?artikel=$nummer'>";
		print $art_objekt->name;
		print "</a> ".$art_objekt->preis."Euro<p>\n";
		}
		
		?>

    <br>
	<a href="index.php"><b>Zurück zur Login-Seite</b></a>
    <?php
	} 
	else {
    ?>
	</body>
	</html>
	
	<html>
    <head>
       <title>Kein Zugriff</title>
		<link rel="stylesheet" href="style.css">
	</head>
    <body>	 
    Leider haben Sie keinen Zugriff auf diese Seite<br>
    Bitte melden Sie sich auf der <a href="index.php"><b>Loginseite</b></a> an.
	</body></html>
    <?php
}
?>

Eigentlich soll das so aussehen:

Folgende Bücher können Sie bestellen
Der Herr der Ringe 39.9Euro
Der kleine Hobbit 19.9Euro
Grimms Märchen 25.9Euro
Elric von Melnibonee 29.9Euro

Zurück zur Login-Seite
 
Die Fehlermeldung sagt‘s doch: der Artikelparser()-Methode, die bei der Instanzierung einer gleichnamigen Klasse automatisch aufgerufen wird, wurde kein Argument übergeben. Da aber dem Quellcode zufolge sowieso keine Übergabe notwendig ist (die $datei-Variable tritt in der Artikelparser()-Methode kein mal auf), kann sie auch weggelassen werden.
 
An der Ausgabe hat sich irgendwie nicht viel verändert, außer das die Fehlermeldung weg ist.

Die jetzige Ausgabe ist:

Folgende Bücher können Sie bestellen
Euro
Euro
Euro
Euro
Euro



PHP:
      <?php session_start();  

include("artikelparser.php"); 
$art = new Artikelparser(); 


?> 


<?php 

if ($_SESSION['login_okay']) 
{ 
    ?> 
<html><head> 
<title>Artikel</title> 
<link rel="stylesheet" href="style.css"> 
</head> 
<body> 
    <h1>Folgende Bücher können Sie bestellen</h1> 
     
    <body> 
     
        <?php                 
             
        foreach($art as $nummer=>$art_objekt){ 
         
        print 
            "<a href='warenkorb.php?artikel=$nummer'>"; 
        print $art_objekt->name; 
        print "</a> ".$art_objekt->preis."Euro<p>\n"; 
        } 
         
        ?>


Geänderte Datei:

PHP:
<?php     session_start();  
        include_once ("Artikel.inc");             
         
class Artikelparser{   
    var $nummer;   
    var $art;   
    var $aktuell;   
    var $titel;   
    var $preis;   
       
    function Artikelparser(){   
        $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);   

      
} 
        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->aktuell="";   
        }   
           
        function cdata($parser, $text){   
            if($this->aktuell== "PREIS") $this->preis = $text;   
            if($this->aktuell== "TITEL") $this->titel = $text;   
        }   

       
    function getArtikelArray(){   
        return $this->art;   
}   
} 
?>

Folgende Bücher können Sie bestellen

Der Herr der Ringe 39.9Euro (bei Klick auf Link zum Warenkorb hinzufügen)
Der kleine Hobbit 19.9Euro
Grimms Maerchen 25.9Euro
Elric von Melnibonee 29.9Euro
 
Hallo Zusammen!

Ich komme wirklich nicht mehr weiter und würde mich sehr freuen, wenn mir jemand bei dem Skript helfen würde.

Vielen Dank.
 
Zurück