PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehlerhafte Anzeige bei artikel.php


McFrosty1
02.02.2007, 18:39:26
Hallo,
ich bin relativ neu im Thema PHP und habe folgendes Problem:

Ich sollte zum Test einen kleinen Webshop erstellen. Dieser besteht aus 6 Dateien.
artikel.php, artikelliste.php, Artikel.inc, artikeldaten.xml, warenkorb.php und Warenkorb.inc

Wenn man die Datei "artikel.php" im Browser aufruft, sollte die Bestellseite angezeigt werden. Es werden aber nur die Preise, nicht die Titel der Bücher angezeigt.

Folgend die Dateien:

Hier "artikel.php"

<?php include("artikelliste.php")?>
<html>
<body>
<h1>Folgende Bücher können Sie bestellen</h1>
<?php
$artikelparser = new Artikelparser($datei);

foreach ($artikelparser->art as $nummer=>$art_objekt) {
print "<a href='warenkorb.php?artikel=$nummer'>";
print $art_objekt->$name;
print "</a> ".$art_objekt->preis." Euro<p>\n";
}
?>
</body>
</html>


Und die Datei "artikelliste.php":

<?php
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;
}
}
?>

und noch die Datei "artikeldaten.xml"

<?xml version="1.0"?>
<artikeldaten>
<artikel nummer="1001">
<name>Der Herr der Ringe</name>
<preis>39.9</preis>
</artikel>
<artikel nummer="2002">
<name>Der kleine Hobbit</name>
<preis>19.9</preis>
</artikel>
<artikel nummer="3003">
<name>Grimms Märchen</name>
<preis>25.9</preis>
</artikel>
<artikel nummer="4004">
<name>Elric von Melnibonee</name>
<preis>29.9</preis>
</artikel>
</artikeldaten>


Vielleicht kann mir jemand helfen, was ich falsch gemacht habe.

Vielen Dank schon mal im Voraus.

Gruß
Sven

rarios
02.02.2007, 19:17:39
hi

print $art_objekt->$name;
print "</a> ".$art_objekt->preis." Euro<p>\n";
merkst du zufällig einen unterschied?

$art_objekt->$name
$art_objekt->preis

was fällt dir da auf?
entweder du musst bei preis vorher noch ein $ dazutun oder bei name das $ weg!

// wobei ich dir rate das $ bei name wegzunehmen! ;-) //

meikel (†)
02.02.2007, 22:07:40
Hier mal ein Beispiel für PHP5
http://test.php-help.info/test/40/ (Quelltext wird angezeigt)

McFrosty1
03.02.2007, 17:33:28
Hallo rarios,
danke für deine Hilfe, funktioniert jedoch leider immer noch nicht. Es wird trotzdem nur der Preis angezeigt. Hast du noch ne Ahnung was falsch sein könnte?

Gruß
Sven

rarios
04.02.2007, 20:20:15
könntest du mal die struktur und den inhalt von artikel.inc reinschreiben?!

aber persöhnlich würde ich das von meikel reingeschreibene versuchen:
QUELLE http://test.php-help.info/test/40/ ||||| Autor: meikel

<?php

$fname = './artikel.xml';

if (! is_readable($fname))
{
printf('<p>Darf %s nicht lesen.</p>',
$fname);
}
else
{
$xml = simplexml_load_file($fname);

foreach($xml->artikel as $node)
{
printf('<p>nummer: %s<br />name: %s<br >preis: %s</p><hr>',
htmlentities(utf8_decode($node->attributes())),
htmlentities(utf8_decode($node->name)),
htmlentities(utf8_decode($node->preis)));
}
}

?>

McFrosty1
05.02.2007, 15:48:51
Hallo rarios,

hier noch die Datei "Artikel.inc":

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

Vielleicht kannst du da was mit anfangen.

Gruß
Sven