XML editieren auf etwas andere Weise

the rusher

Mitglied
Hallo zusammen, ich hoffe ich habe im richtigen Forum gepostet, denn mein Problem hängt mit Fläsh, PHP und XML zusammen.

Also folgendes: Mein Projekt ist ein XML-Gästebuch (ja, ich weiss die Ladezeiten sind sch***, aber ich wollte es einfach mal probieren, um es nachher in meine HP zu integrieren.)

Ich habe in Flash die Eingabedaten, die ich an die PHP-Datei sende, welche mir die XML-Datei editieren sollte, welche ich nachher wieder in Flash anzeigen lasse.

In Flash sieht das ganze so aus (Code liegt auf dem Send-Button des Formulars):

Code:
on (release) {
	function sendForm() {
		var nl = new LoadVars();
		nl.gb_name = escape(gb_name.text);
		nl.gb_email = escape(gb_email.text);
		nl.gb_homepage = escape(gb_homepage.text);
		nl.gb_nachricht = escape(gb_nachricht.text);
		nl.send("vars.php", nl, "POST");
		
	}
}

Die Daten aus den Eingabefeldern werden zum php-Dokument "vars.php" geschickt. Dort werden sie wie folgt bearbeitet:

Code:
<?php
//Variablen aus der Flash-Datei empfangen

$name=$_POST["gb_name"];
$email=$_POST["gb_email"];
$homepage=$_POST["gb_homepage"];
$nachricht=$_POST["gb_nachricht"];

//XML-Datei editieren
echo $name,$email,$homepage,$nachricht;
 
$handle = @fopen("eintraege.xml","a"); 
$newline = "<daten>\n"; 
$newline .= "<name>$name</name>\n"; 
$newline .= "<homepage>$homepage</homepage>\n"; 
$newline .= "<mail>$email</mail>\n"; 
$newline .= "<text>$nachricht</text>\n";
$newline .= "</daten>\n" 
@fwrite($handle, $newline); 
@fclose($handle);
?>

Die XML (eintraege.xml) sieht so aus:

Code:
<daten>
	<name>Mister x</name>	
	<homepage>www.xyz.ch</homepage>	
	<mail>tobiwankenobi@bluewin.ch</mail>
	<text>BlaBlaBlaBla texttexttexttext.</text>
</daten>
<br />
<br />
<daten>
	<name>Mister y</name>	
	<homepage>www.xyz.ch</homepage>	
	<mail>tobiwankenobi@bluewin.ch</mail>
	<text>BlaBlaBlaBla texttexttexttext.</text>
</daten>

Die XML lese ich in Flash wieder ein und formatiere sie mit CSS. Wie zu erwarten funktioniert das ganze nicht. Meine Frage: Habe ich das mit dem PHP-Teil richtig gemacht? Ist es möglich, die Variablen, die PHP erhält mit $_POST so zu "formatieren"?
Alles was ich will ist eigentlich einen neuen XML-Datensatz einfügen, die DOM-Variante funtioniert wegen dem Hoster nicht.
Ich hoffe ich habe mich klar ausgedrückt, und entschuldige mich für den etwas fächerübergreifenden Inhalt.

Schönen Abend wünscht rusher
 
Hi,

wie Du schon sagst ist das ganze etwas übergriefend. Darum würde ich anfangen, dass von vorne zu debuggen.

1. Steht in PHP, nach dem Absenden in der POST Variablen überhaupt was drin? print_r($_POST);
2. Wenn ja, kann er die Datei öffnen? echo $handle;
3. Kann er in die Datei schreiben? (Routine ausführen und nachschauen, ob er die Datei geschrieben hat.)
4. Ließt Dein Flash Programm das XML korrekt ein? (Mit Flash kenne ich mich nicht aus)

Ansonsten sieht das ganze für mich recht vernünftig aus.

Marcus.
 
Hi,

wenn Du die Daten in Flash mit escape() codierst, musst Du dann auf PHP-Seite nicht zunächst urldecode() anwenden?

Wenn Du $newline mit echo() ausgibst, was siehst Du dann im Quelltext? Hast Du Register Globals in Flash auf true oder false stehen?

Gruß
.
 
Ok, erstmal Thx to shockshell und Datic für die Antwort. Zuerst einmal zu shockshells Antwort:

1. *dumm frag*: Wie find ich das heraus, da die Variablen ja von Flash abhängt, d.h. der Film muss zuerst gestartet werden, damit überhaupt was gesendet wird kann ich ja nicht einfach die php-Datei im Browser abrufen.

2. Danke für den Tipp, werd ich mal ausprobieren

3. Nein, reinschreiben geht nicht, sie ist genauso wie vorher.

4 Die XML-Datei wird korrekt eingelesen, ich habe ein paar Testeinträge gemacht, die zeigt er mir auch wunderschön an.

Das mit dem urldecode weiss ich jetzt nicht, sollte das dann so aussehen

Code:
$name=urldecode($_POST["gb_name"]);

Was genau sind den "Register Globals", hab ich noch nie gehört, naja, bin auch kein Profiflasher.

Thx und Gruss
 
:-( Sorry, das war ne Art freud'sche Fehlleistung: Ich meinte natürlich nicht die Register Globals (die mit Flash auch herzlich wenig zu tun haben), sondern System.useCodepage. ^^

Im Übrigen: Wenn Du LoadVars.send() verwendest, wird die PHP-Seite ja in einem Browserfenster geöffnet; setz mal an ein paar sinnvollen Stellen echo() s rein und poste mal die Ausgabe. Was kommt an und was steht in der Variable $newline?

Wenn später alles funktioniert, würde ich Dir empfehlen, auf LoadVars.sendAndLoad() umzusteigen: Das Script wird dann nicht mehr sichtbar aufgerufen und Du kannst direkt eine Antwort des Servers empfangen (Du sparst Dir damit z.B. das erneute Einladen der XML-Datei).

Gruß
.
 
Wenn Du dir die Variablen anschauen willst, kannst Du das mit ob_start(),ob_get_contents() und ob end() erledigen.

Hier mal ein Beispiel:

PHP:
ob_start();

$name=$_POST["gb_name"];
$email=$_POST["gb_email"];
$homepage=$_POST["gb_homepage"];
$nachricht=$_POST["gb_nachricht"];

print_r($_POST);
$ausgabe=ob_get_contents();
ob_end_clean();
mail('deine@adresse.de','test',$inhalt);
 
Zurück