PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   Fehler im Skript - bestellen(Warenkorb) (http://www.selfphp.de/forum/showthread.php?t=16990)

jksch 10.06.2007 16:18:22

Fehler im Skript - bestellen(Warenkorb)
 
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);       
                }   
        }
?>


tomilo 10.06.2007 16:33:37

AW: Fehler im Skript - bestellen(Warenkorb)
 
Es sieht so aus, als ob die Zugriffsrechte nicht stimmen würden. Setze die für bestellung.xml auf 777. Dann sollte es vom Prinzip her funktionieren.

Ich würde an deiner Stelle aber auf eine (MySQL-)Datenbank umsteigen. Der Zugriff läuft schneller und man hat auch die Möglichkeit nur einzelne Daten einzulesen.

jksch 10.06.2007 16:40:21

AW: Fehler im Skript - bestellen(Warenkorb)
 
WOW. Danke. Das war der Fehler. Das vergesse ich irgendwie immer mit dem CHMOD.

meikel (†) 10.06.2007 17:35:56

AW: Fehler im Skript - bestellen(Warenkorb)
 
Zitat:

Zitat von tomilo (Beitrag 102485)
Es sieht so aus, als ob die Zugriffsrechte nicht stimmen würden. Setze die für bestellung.xml auf 777. Dann sollte es vom Prinzip her funktionieren.

1. nicht 777 sondern 0777
2. warum überhaupt 0777? Warum schlägst Du vor, aus bestellung.xml eine "Linux-EXE" zu machen? Nicht-ausführbare Dateien setzt man "maximal" auf 0666.


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:49:21 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.