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>
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>
Kommentar