Hallo Zusammen!
Ich weiss nicht genau was für ein Fehler hier vorliegt. Auf localhost geht es und auf dem Webserver wieder mal nicht.
Weiß nicht wie ich hier die Variablen $_POST und $_REQUEST in das Skript initialisiere.
Es kann sein dass es daran liegt.
Bitte um Hilfe.
FEHLERCODE:
Warning: fopen(bestellung.xml): failed to open stream: Permission denied in /www/htdocs/w0055a6e/PHP02/bestellung.php on line 27
Warning: fputs(): supplied argument is not a valid stream resource in /www/htdocs/w0055a6e/PHP02/bestellung.php on line 30
Warning: fputs(): supplied argument is not a valid stream resource in /www/htdocs/w0055a6e/PHP02/bestellung.php on line 34
Warning: fputs(): supplied argument is not a valid stream resource in /www/htdocs/w0055a6e/PHP02/bestellung.php on line 39
Warning: fclose(): supplied argument is not a valid stream resource in /www/htdocs/w0055a6e/PHP02/bestellung.php on line 42
Die Datei 'bestellung.xml' wurde gespeichert!
Was ich tun möchte.
Ein Skript "bestellung.php" und ein Skript "bestellung.xml", auf der warenkorb Seite ich ein Link gesetzt zu "bestellung.php". bestellung.php soll die bestellung.xml auslesen und ausgeben. Danach soll der Warenkorb gelöscht werden.
Das Skript:
warenkorb.php
PHP-Code:
<?php
include ("Warenkorb.inc");
// Starte Session, falls nicht schon passiert
session_start();
// Hole Warenkorb-Objekt aus der Session
$korb = $_SESSION['korb'];
// Falls es der erste Aufruf ist, muss zuerst ein neuer Warenkorb angelegt werden
if(!is_object($korb)){
$korb = new Warenkorb();
$_SESSION['korb'] = $korb;
}
// Artikel hinzufügen
if(isset($artikel)) $korb->hinzufuegen($artikel);
// Artikel entfernen
if(isset($entf)) $korb->entfernen($entf);
// Gesamten Warenkorb löschen
if(isset($loeschen)) $korb->leeren();
?>
<html>
<head>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Warenkorb</h1>
<a href="warenkorb.php?loeschen=1">Warenkorb löschen</a>
<p>
<a href="javascript:history.back()">Zurück</a>
<p>
Sie haben bisher folgende Artikel ausgewählt:<p>
<?php
if(!empty($korb)){
// zeige alle bisher ausgewählten Artikel an
foreach ($korb->inhalt as $artikel=>$anzahl){
print "Artikelnummer: $artikel";
print
"<a href='warenkorb.php?entf=$artikel'>";
print "\rArtikel entfernen</a><br>";
print "Anzahl: $anzahl<br>";
if($artikel == 1001)
print "Der Herr der Ringe<p>";
if($artikel == 2002)
print "Der kleine Hobbit<p>";
if($artikel == 3003)
print "Grimms Märchen<p>";
if($artikel == 4004)
print "Elric von Melnibonee<p>";
}
}
else{
print "Bisher nicht ausgewählt";
}
?>
<br><br>
<ol>2.
Schreiben Sie ein neues Skript "bestellung.php", das über einen Link auf der Warenkorbseite aufgerufen werden soll.<br><br>
Das Skript soll die Bestelldaten in einer Datei "bestellung.xml" im folgenden XML-Format abspeichern:<br><br>
<blockquote class="blockq">
*bestellung*<br>
*artikel nummer="1001" anzahl="3" /*<br>
*artikel nummer="3003" anzahl="1" /*<br>
*/bestellung*
</blockquote>
<br>
Außerdem soll der Warenkorb nach einer Bestellung geleert werden.
</li>
</ol><br><br><br>
<h1 class="h2"><a href="bestellung.php">Zur Bestellung</a></h1>
</body>
</html>
bestellung.xml
Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<bestellung>
<artikel nummer="1001" anzahl="3"/>
<artikel nummer="3003" anzahl="1"/>
</bestellung>
bestellung.php
PHP-Code:
<?php include ("Warenkorb.inc");
// Starte Session, falls nicht schon passiert
session_start();
// Hole Warenkorb-Objekt aus der Session
$korb = $_SESSION['korb'];
// Falls es der erste Aufruf ist, muss zuerst ein neuer Warenkorb angelegt werden
if(!is_object($korb)){
$korb = new Bestellung();
$_SESSION['korb'] = $korb;
}
?>
<html>
<head>
<title>Bestellung</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<?php
// Handle erstellen
$datei = fopen("bestellung.xml", "w");
// Startzeile schreiben
fputs($datei, "<bestellung>\n");
// Artikel aus Array in xml-Datei schreiben
foreach ($korb->inhalt as $artikel=>$anzahl) {
fputs($datei, " <artikel nummer='".$artikel."' anzahl='".$anzahl."'/>\n");
}
// Endzeile schreiben
fputs($datei, "</bestellung>");
// Datei schließen
fclose($datei);
// Meldung ausgeben
print "<b>Die Datei 'bestellung.xml' wurde gespeichert!</b><br><br>";
print "<a href='index.php'><b>Ausloggen</b></a>";
// Warenkorb nach Bestellung leeren
$korb = array();
?>
</body>
</html>
Warenkorb.inc
Code:
<?php
class Warenkorb {
var $inhalt = array();
function hinzufuegen($artikel) {
$this->inhalt[$artikel]++;
}
function entfernen($artikel) {
unset($this->inhalt[$artikel]);
}
function leeren() {
unset($this->inhalt);
}
}
?>