Merkwürdiges Verhalten bei einlesen eines Cookies

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Merkwürdiges Verhalten bei einlesen eines Cookies

    Hi,

    ich generiere über die DOM Imlementation von PHP einen XML-File.

    Die Daten der einzelnen Knoten hole ich mir aus einer DatenbankDatei (MDB). Funktioniert alles wunderbar, wenn ich den Pfad zur Datenbank in meiner Implementierung direkt angebe.

    Nun möchte ich aber dem Benutzer die Möglichkeit geben, die Datenbank selber auszuwählen. Die ausgewählte Datenbank wird dann in einen Cookie geschrieben. Der o. g. XML-Generator soll sich den Pfad da abholen, sich zu der Datenbank verbinden und die Knoten mit den entsprechenden Daten füllen.

    Und genau da liegt der Knackpunkt; sobald die Pfadangabe aus einem Cookie kommt, bricht das Script ab.

    Wennn ich die Datenbank so reinschreibe:

    Quellcode

    1. $dbselect = "c:\Programme\DB/scms.mdb";


    funktioniert es wunderbar.

    Aber so

    Quellcode

    1. if (isset($_COOKIE["database"])) {
    2. $dbselect = "".$_COOKIE["database"]."";
    3. }


    funktioniert es nicht, exakt so wie ich es haben will

    Vielmehr funktioniert es schon, wenn der ganze Prozess via Ajax läuft.

    Wenn ich es also so mache, kann ich den Pfad via Cookie holen:

    - Datenbank wird ausgewählt und in Cookie geschrieben
    - Anfrage wird von Benutzer gestellt
    - Anfrage wird via Ajax verarbeitet, d.h. die XML-Datei wird anhand der Datenbank, die im Cookie eingetragen ist generiert
    - Ajax fügt die Daten aus der XML-Datei ins Hauptdokument

    Wenn es so läuft, funktioniert es nicht
    - Datenbank wird ausgewählt und in Cookie geschrieben
    - Anfrage wird von Benutzer gestellt
    - Anfrage wird via PHP verarbeitet, d.h. über die DOM load Funktion wird die der XML-Generator aufgerufen

    Nun sollte es eig. weitergehen, aber an dieser Stelle bricht das Script ab. Eig. sollte der XML-Generator nach dem Aufruf durch DOM load die XML-Datei genauso generieren wie mit Ajax.

    Er bricht aber mit dem folgenden Fehler ab:


    print.php erzeugt eine Ansicht ohne Ajax. In Zeile 65 wird einfach der Pfad zur creatorExporter.php mit entsprechenden Parametern gesetzt.
    Also so:

    $XMLRequest->load($uri);

    Ich verstehe nicht, wo der Fehler liegt, den irgendwie hat das augenscheinlich gar nichts miteinander zu tun.

    Er sagt mir, da wäre "Extra content" am Ende, des durch DOM load generierten XML-File .. aber die generierte XML-Datei ist absolut ok.

    Zumal funktioniert der gleiche Ablauf auch in Aajx .... Ich weiss echt nicht weiter ...

    Vielleicht hat jemand von Euch eine Idee, was ich noch testen könnte!?

    Danke!
    Um Rekursionen zu verstehen, muss man zuerst Rekursionen verstehen...
  • da die kompliziertesten probleme, meist den einfachsten ursprung haben würde ich mich erstmal aufs cookie konzentrieren.

    die manuelle zuweisung von $dbselect steht vermutlich an gleicher stelle wie deine if bedingung mit $_COOKIE["database"]...

    eine ausgabe mit echo hast du bestimmt schon probiert..
    aber hast du mal verglichen

    Quellcode

    1. if($_COOKIE["database"] == "c:\Programme\GATE to Marketing\DB/scms.mdb")
    2. die('pfad ist identisch');
    3. else
    4. die('pfad ungleich');


    vielleicht sind irgendwelche sonderzeichen reingerutscht
  • Hi,

    gute Idee. Ich hatte schon was ähnliches probiert und festgestellt, dass ein "/" vervierfacht wird.

    Also habe ich den Pfad einfach mal hart implementiert und nur die Datei in den Cookie geschrieben. Die Daten waren dann absolut identisch.

    Aber der Fehler bleibt.

    Der Cookie wurde dann so ausgelesen.

    Quellcode

    1. if (isset($_COOKIE["database"])) {
    2. $mdbFile = "".$_COOKIE["database"]."";
    3. $dbselect = "c:\Programme\DB/".$mdbFile;
    4. }


    Die XML-Datei lässt sich auch problemlos erzeugen per Direktaufruf, d.h. die Verbindung kann über die Pfadangabe durchgeführt werden. Das scheint korrekt zu sein.

    Aber sobald ich den XML-File statisch aufrufe, z.B. so:

    Quellcode

    1. <?php
    2. $XMLRequest = DOMDocument::load('http://192.168.1.12/creatorExporter.php?source1=OverviewType&selectCat=OverviewAll');
    3. ?>


    gibt er mir die Fehlermeldung, dass sich Extra Content in dem File befindet...

    Das macht keinen Sinn, ich sehe da nicht mal einen Zusammenhang, aber ausgelöst wird es anscheinend aus irgendeinem Grund, der mit dem Cookie im Kontext steht, da, wenn ich den Pfad komplett hart implementiere, alles in Ordnung ist.

    Kann das ein Bug in PHP sein?

    Was könnte ich noch versuchen?
    Um Rekursionen zu verstehen, muss man zuerst Rekursionen verstehen...
  • Hm, ich hab gerade mal das XML-Dokument exakt so, wie es vom creatorExporter erzeugt wird in eine Datei kopiert, diese "test.xml" genannt und dann also load-File für DOMDocument::load angegeben, also DOMDocument::load('test.xml').

    Das funktioniert perfekt, also ist die erzeugte Datei OK.

    Warum funktioniert es nicht, wenn die Datei dynamisch erzeugt wird...

    DOMDocument:load holt sich doch nur das Dokument, in etwa so wie ein req.open() in Ajax ...

    Also, ausgehend davon, dass ein Cookie für den DB-Pfad des XML-Generators verwendet wird:

    - Direkter Aufruf des XML-Generators geht
    - Aufruf via Ajax geht
    - DOMDocument::load geht nur, wenn XML-Datei statisch ist ...

    Hmm........
    Um Rekursionen zu verstehen, muss man zuerst Rekursionen verstehen...