Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Daten im Warenkorb nicht richtig übernommen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-consult PHP Entwicklung
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Daten im Warenkorb nicht richtig übernommen


 
Saemm
20-02-2008, 13:06 
 
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>

 
Kropff
20-02-2008, 13:14 
 
bitte php-tags (http://www.php-resource.de/forum/showthread.php?threadid=50454) benutzen (siehe unten)

danke
peter

 
krel
20-02-2008, 13:15 
 
benutz doch bitte die PHP Tags, dann kann man das einfacher lesen.
Hast du die die Session schonmal mittels print_r vor dem ändern jener ausgeben lassen?

 
Saemm
20-02-2008, 13:18 
 
Ja das habe ich - ich poste nachher gern noch die Ausgabe

 
Kropff
20-02-2008, 13:23 
 
nein hast du nicht. wir meinen [ PHP ] ... [ /PHP ] (nur ohne leerzeichen) da rein packst du deinen code.

gruß
peter
upsi, da hat das forum wieder was verschluckt, mein fehler

 
Saemm
20-02-2008, 13:37 
 
Ich meinte auch dass ich print_r schon benutzt habe die Antwort bezog sich nicht auf die PHP Tags

 
ghostgambler
20-02-2008, 14:12 
 
Solange du die php-Tags nicht verwendest, interessiert sich erst recht niemand für die Ausgabe von print_r.

 
Kropff
20-02-2008, 15:36 
 
@ts

du bist jetzt dreimal!!! darauf hingewiesen worden, die php-tags (über dem eingabefeld -> buton php) zu benutzen. dazu gibt es den schönen "ändern"-button unterhalb deines threads.

also letzte warnung :teach: sonst landet das hier im müll.

peter

 
Saemm
20-02-2008, 18:27 
 
Es tut mir ja auch leid dass ich erst mal nach Hause kommen muss und nicht alles von der Arbeit aus machen kann. Aber Deinen Tonfall finde ich auch etwas seltsam muss ich sagen.

Wenn Du es unter Hilfe verstehst in dem Ton zu antworten dann ist das hier vielleicht auch nicht das richtige, danke also

 
Kropff
20-02-2008, 18:32 
 
* close trash *

peter

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:39 Uhr.