Antworten auf deine Fragen:
Neues Thema erstellen

PHP - Problem bei Session

sloshed

HTML/CSS Profi ;P

Hallo,

ich Programmiere gerade aus Übungszwecken einen Mini-Shop.
Gerade bin ich dabei eine Bestellseite zu machen in der ich aus der laufenden Session die Artikelnummer und die Anzahl der Bestellung hole.

Nun will ich die Artikelnummer und die Anzahl in eine XML schreiben.

Wenn ich im Browser die Variablen $id und $anz ausgeben lasse funktioniert das. Nur wenn ich das ganze in die XML schreiben lasse fehlt der Inhalt der Variablen.

Code:
PHP:
include("Warenkorb.inc");
    // Session wird gestartet
    session_start();
    // Auslesen der Session mit einer While-Schleife
    $korb = $_SESSION['korb']->inhalt;
    while (list($id, $anz) = each($korb))
                
    // In Datei schreiben
    $datei = fopen ("bestellung.xml", "w");
    $inhalt = "<bestlellung>\n<artikel nummer=\"$id1\" anzahl=\"$anz1\"/>\n</bestellung>";
             fputs($datei, $inhalt);
             fclose($datei);
Kann mir jemand meinen Fehler nennen oder zumindest mir einen Denkschupser geben wo der Fehler liegen könnte?

In der XML steht wie gewünscht der $inhalt. Leider ohne die gewünschten Werte.

Grüße und Danke
sloshed
 

BlackScorp

I Code for Food:D

AW: PHP - Problem bei Session

also
1) session_start() schreibt man IMMER als aller erstes keine includes davor
2) while(list(... da fehlt eine {} ohne den geschweiften klammern, darf man nur eine zeile zum ausführen haben
3) verwende file_get_contents und file_put_contents um inhalt in eine datei zu schreiben
4) php bieten XML parser, damit kann man bequemer alles einfügen

php.net wäre eine schöne seite für dich

EDIT:
was soll den $_SESSION['korb']->inhalt sein?

aber ende der Kritik:D

versuch mal in deinem $inhalt alle deine variablen mit ".$variable." einzufügen oder komplett für den $inhalt hochkomma verwenden, dann brauchst du keine anführungszeichen zu escapen
MFG
 
Zuletzt bearbeitet:

sloshed

HTML/CSS Profi ;P

AW: PHP - Problem bei Session

Hallo,
danke für die schnelle Antwort.
Wenn ich nach der Session include bekomme ich eine Fehlermeldung mit der ich nichts anfangen kann:
Warning: Variable passed to each() is not an array or object in... line 8

Die geschweiften Klammern hatte ich versehentlich beim testen gelöscht.

Wenn ich die Session ohne "->inhalt;" auslese, bekomme ich immer die Fehlermeldung:
"__PHP_Incomplete_Class_NamewarenkorbinhaltArray"
Also ging ich davon aus, dass die Klasse nicht eingelesen wurde. Deshalb packte ich include oben hin.
da ich noch blutiger Anfänger bin blick ich teilweise nicht durch. Hatte mir die Fehlermeldungen weg gemogelt :p

Ob ich nun fopen etc.. nehme oder file_get_contents, ist nach meinen Nachschlagungen nur reine Performace oder nicht?

Ich habe mir mal einen XML parser zum lesen geschrieben. Allerdings ging ich nicht davon aus, dass ich keinen zum schreiben der Datei brauche.

versuch mal in deinem $inhalt alle deine variablen mit ".$variable." einzufügen oder komplett für den $inhalt hochkomma verwenden, dann brauchst du keine anführungszeichen zu escapen
Hatte ich auch schon gemacht. Allerdings hat sich da auch nichts getan.

Grüße
 

BlackScorp

I Code for Food:D

AW: PHP - Problem bei Session

achso du hast ein object an die session übergeben. ok, ist halt ungewöhnlich

schau mal:
PHP:
$datei = fopen ("bestellung.xml", "w");
    $inhalt = "<bestlellung>\n<artikel nummer=\"$id1\" anzahl=\"$anz1\"/>\n</bestellung>";
             fputs($datei, $inhalt);
             fclose($datei);

und nun mit file_put_contents
PHP:
$inhalt = '<bestellung>\n <artikel nummer="'.$id1.'" anzahl = "'.$anz1.'"> \n </bestellung>';
file_put_contents("bestellung.xml",$inhalt);

2 zeilen weniger.
 

philbring

Webdesigner

AW: PHP - Problem bei Session

Hallo,

dein list() .. each() Konstrukt liefert dir die Variablen $id und $anz. In der Variablen $inhalt benutzt du jedoch $id1 und $anz1. Die sind natürlich immer leer.

Code:
PHP:
while (list($id, $anz) = each($korb))
          
    // In Datei schreiben
    $datei = fopen ("bestellung.xml", "w");
    $inhalt = "<bestlellung>\n<artikel nummer=\"$id1\" anzahl=\"$anz1\"/>\n</bestellung>";

Wenn du das anpasst enthalten deine XML Files auch Daten.

Viele Grüße

Peter
 

sloshed

HTML/CSS Profi ;P

AW: PHP - Problem bei Session

Hallo,

das Problem besteht weiterhin.
Mein Code bisher:

PHP:
// Session wird gestartet
    session_start();
    // Includieren der Warenkorb.inc
    include("Warenkorb.inc");
    // Auslesen der Session mit einer While-Schleife
    $korb = $_SESSION['korb']->inhalt;
    while (list($id, $anz) = each($korb)) {
            print $id;
            print $anz;
            }
                
    // In Datei schreiben
    $datei = fopen ("bestellung.xml", "w");
    $inhalt = "<bestlellung>\n<artikel nummer=\"$id\" anzahl=\"$anz\"/>\n</bestellung>";
             fputs($datei, $inhalt);
             fclose($datei);
Wenn ich nach dem session_start(); include bekomme ich immer noch die Fehlermeldung:
PHP:
Warning:  Variable passed to each() is not an array or object in... line 8
Wenn ich davor include bleiben die Variablen in der XML leer.
Gibt es vielleicht eine anderen Möglichkeit die Inhalte "Artikelnummer" und "Anzahl" der Session auszulesen und in die XML zu schreiben?
Grüße
 

mommel

mv dau /dev/null

AW: PHP - Problem bei Session

$_SESSION['korb']->inhalt ist dann kein Array
schaus dir doch mal an
PHP:
echo '<pre>';print_r($_SESSION['korb']->inhalt);echo '</pre>';
bzw.
PHP:
echo '<pre>';print_r($korb);echo '</pre>';
packs vor das while
 

sloshed

HTML/CSS Profi ;P

AW: PHP - Problem bei Session

Wenn ich mit folgendem Code versuche:

PHP:
<?php 
    // Session wird gestartet
    session_start();
    // Includieren der Warenkorb.inc
    include("Warenkorb.inc");
    // Auslesen der Session mit einer While-Schleife
    $korb = $_SESSION['korb'];
    echo '<pre>'; print_r($korb);echo '</pre>';  
    while (list($id, $anz) = each($korb)) {
            print $id;
            print $anz;
            }
                
    // In Datei schreiben
    $datei = fopen ("bestellung.xml", "w");
    $inhalt = "<bestlellung>\n<artikel nummer=\"$id\" anzahl=\"$anz\"/>\n</bestellung>";
             fputs($datei, $inhalt);
             fclose($datei);
    
?>
bekomme ich diese Ausgabe:
PHP:
__PHP_Incomplete_Class Object
(
    [__PHP_Incomplete_Class_Name] => warenkorb
    [inhalt] => Array
        (
            [1001] => 1
        )

)
__PHP_Incomplete_Class_NamewarenkorbinhaltArray
Wenn ich wieder vor der Session include bekomme ich diese Ausgabe:

PHP:
warenkorb Object
(
    [inhalt] => Array
        (
            [1001] => 1
        )

)
inhaltArray

Und die Werte "1001" und "1" Sollen in der XML File bei <artikel nummer="" anzahl=""/> stehen. Also <artikel nummer="1001" anzahl="1"/>
Sry das ich da euch mit irgendwelchem Anfängerzeugs nerve. Aber ich bekomme das einfachnicht hin -.-

Grüße
 

philbring

Webdesigner

AW: PHP - Problem bei Session

Hallo,

das sieht nach einem Fehler/Problem in deiner warenkorb.inc Datei aus.

Was steht denn in der Datei alles drin? Der Hinweis
__PHP_Incomplete_Class Object
ist da sehr interessant.


Viele Grüße

Peter
 

mommel

mv dau /dev/null

AW: PHP - Problem bei Session

Zeig mal bitte dein Warenkorb.inc die ist der Grund für den Fehler, falls du das nicht willst und ne quick and dirty lösung belassen willst dann lass es hinter dem inc.
 

sloshed

HTML/CSS Profi ;P

AW: PHP - Problem bei Session

Warenkorb.inc

PHP:
<?php
class Warenkorb {
    var $inhalt = Array();
    function hinzufuegen($artikel) {
        $this->inhalt[$artikel]++;
    }
    function entfernen($artikel) {
        unset($this->inhalt[$artikel]);
    }
    function leeren() {
        $this->inhalt = Array();
    }
}
?>
*edit*
Meine Aufgabe ist es die bestellten Sachen über die oben gepostete bestellung.php in eine XML zu schreiben und den Warenkorb zu leeren.
 
Zuletzt bearbeitet:

philbring

Webdesigner

AW: PHP - Problem bei Session

Hallo,

sieh Dir mal das Beispiel zu Klassen aus der PHP Seite an. Dort ist als Beispiel auch ein Warenkorb realisiert.



Viele Grüße

Peter
 

sloshed

HTML/CSS Profi ;P

AW: PHP - Problem bei Session

Die Warenkorb klasse funktioniert ja wie gewünscht.
Nur die Übergabe in der bestellung.php via Session in die XML schreiben geht nicht bzw ich weiss nicht wie. Vielleicht gibt es ja noch einen andere Möglickeit das zu lösen. Auch ohne Session.
 

saila

Moderatorle

AW: PHP - Problem bei Session

Hi,

wenn ich heute mal Zuhause ankomme, werde ich mich in das Thema einlesen.

Bislang gab es Fehlermeldungen und zwar einmal innerhalb der Session-Array-Variablen bzgl. dem übergebenen Object und bei der while oder list (vor und innerhalb). Kannst du diese beiden Fehlermeldungen noch mal aus dem Thread hier herausziehen?

Bis später....
 

Chickenshooter

Alter Mann

AW: PHP - Problem bei Session

Wann genau nutzt Du eigentlich deine Klasse Warenkorb??

Ich habe noch nirgens so etwas wie

PHP:
$korb = new Warenkorb();
gesehen.

Mit welcher PHP Version arbeitest Du mit der Version 4.x
könnte die Klasse so functionieren mit 5.x
wahrscheinlich nicht, wieso...?

die Variable $inhalt in der Klassendefinition ist implizit private

somit ist so ein Zugriff

PHP:
$korb->inhalt
nicht zulässig.

Erstelle einfach eine Set und Get Methode für diesen Array
Dann geht das Ganze schon eher in die Richtung Objektorientierte Programmierung,
denn in Dieser ist das was Du machst, wie schon gesagt "nicht erlaubt".... ;-)

die Get-Method
PHP:
public function getInhalt()
{
   if( !is_array($this->inhalt) )
      $this->inhalt = new Array();
   return $this->inhalt;   
}

Schreibe dir des weiteren eine methode in die Klasse Warenkorb die
das Schreiben in eine XML Datei realisiert (Das wäre noch mehr objektorientiert),
das Warenkorbobjekt kümmert sich selbst um das Wegschreiben in eine Datei, oder
wer weis wohin das bestimmst ja Du.

z.B.
PHP:
public funtion writeXML($filename=null)
{
   $file = $filename;
   if(is_null($file))
     $file = "bestellung.xml";
   /*
     .... hier Dein Code zum Schreiben nach wer weis wohin ;-)
   */
   # und wenn schreiben erfolgreich dann auch noch
   return true;

   # wenn nicht erfolgreich dann 
   return false;
}

das schöne an dieser Sache.....

PHP:
if( $korb->writeXML("neNeueDatei.xml") )
  echo "<b>Warenkorb erfolgreich geschrieben.</b>";

Ein Konstruktor ist auch von Vorteil, Du könnstest beim erstellen
einer Instanz deines Warenkorbes gleich einen kompletten
Warenkorb übergeben.

z.B.
PHP:
/* $_SESSION['korb'] ist vom Typ Warenkorb, dann */
$korb = new Warenkorb($_SESSION['korb']);
MfG
 
Zuletzt bearbeitet:

Chickenshooter

Alter Mann

AW: PHP - Problem bei Session

In der Objektorienten Programmierung ist eine Klassenvariable in der Regel
immer private es sei denn man setzt den Zugriffsmodifikator public davor.

und es ist auch besser über set und get auf diese Klassenvars. zu zugreifen
so kann man mit disen Methoden verhindern das falsche Werte direkt in die
Klassenvariable geschrieben werden.

Das das in PHP alles (noch) nicht so eng gesehen wird weis ich es war ja nur
ein Tipp von mir, vielleicht für die Zukunft (die von PHP, zwecks Codewiederverwendung).

MfG
 

saila

Moderatorle

AW: PHP - Problem bei Session

:) wäre mir neu. Variablen und Methoden sind in OOP ohne Sichbarkeitsdefinition grundsätzlich public! Ergo würde die Fehlermeldung aus den vorherigen Beispielen anderst lauten. Somit würde die Ausgabe
PHP:
<?php
echo $korb->inhalt[1];
?>

den Array-Wert zurückgeben (sofern belegt) mit dem Key 1. Und es wurde keine Sichtbarkeitsdefinition gelegt.

Oder anderst - würde deine These zutreffen, wäre die Ausgabe:
PHP:
<?php
echo '<pre>'; print_r($korb->inhalt); echo '</pre>';
?>

nicht möglich, da ein Fehler bzgl. Rechte zu $inhalt erfolgen würde. Das dürfte aber kaum zutreffen.

Um zum Thema zurückzukehren. Die Fehlerausgabe "__PHP_Incomplete_Class_NamewarenkorbinhaltArray" weist eher darauf hin, dass die Klasse nicht initialisiert wurde.

Bei der Fehlermeldung "Variable passed to each() is not an array or object i" wird sicherlich auch eine Zeile angegeben, wo dieser Fehler auftritt. Die in each($variable) übergebene Variable ist weder ein Array noch ein Object. Was letztlich die Fehlermeldung aussagt.

Ergo wäre also zu prüfen ob der Ablauf bis dahin korrekt ist oder vor der while-Schleife eine Prüfung mit z.B. is_array($variable) oder is_object($variable) durchführt. Wenn dies zutrifft, kann die Schleife durchlaufen werden. Ansonsten eben etwas anders.
 

Chickenshooter

Alter Mann

AW: PHP - Problem bei Session

Ich nehme Bezug auf Java welche eine OO Sprache ist.

In der der OOP ist ein Punkt die Kapselung von Daten.

In Java und ich gehe davon aus auch in jeder anderen Sprache
die einen Objektorientierten Ansatz hat, sind Klassenvars. alsauch
Methoden und da verbessere ich mich selbst, implizit protected.

Heisst eine Instanz dieser Klasse kann nicht auf protected Member
zugreifen, aber eine Ableitung von dieser Klasse kann auf protected
member zugreifen, nicht aber auf die private member der beerbten Klasse.




Das in PHP diese OO Dinge (noch)nicht "so ernst" genommen werden weis
ich. Ichwollte nur die richtige Richtung aufzeigen.

MfG
 

saila

Moderatorle

AW: PHP - Problem bei Session

Hi,

ok - wenn du Bezug auf Java nimmst dito. Wir sind hier im Thema aber bei PHP und es wäre also angebracht PHP-Seitig zu informieren - auch wenn der Hinweis zur Richtung ein gut geminter Wille ist.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben