Textdatei über PHP in nachgeladener SWF einladen

FAD

Mitglied
Habe ein Problem (Flash MX 2004).
Ich will in meinen index.swf eine gaestebuch.swf laden, die wiederum über eine PHP-Datei die Gästebucheinträge aus einer txt läd.

Das Gästebuch an sich funktioniert. Nur wenn ich es in die index.swf lade, läd es die Einträge nicht. Einträge schreiben kann man übrigenst auch, die findet man dann in der Textdatei wieder.

index.swf script:
Code:
gaestebuch.onPress = function() {
	ladeziel.loadMovie("gaestebuch.swf");
	ladestatus();
};
loader._visible = false;
ladestatus = function () {
	loader.onEnterFrame = function() {
		geladen = _root.ladeziel.getBytesLoaded();
		zuladen = _root.ladeziel.getBytesTotal();
		if (geladen>=10) {
			loader._visible = true;
			prozent = Math.round(geladen/zuladen*100);
			this.prozentanzeige.text = prozent+" %";
			this.balken._xscale = prozent;
			if (prozent>=100) {
				delete this.onEnterFrame;
				this._visible = false;
			}
		}
	};
};

gaestebuch.php script:
PHP:
<?
#	$Name = ereg_replace("[^A-Za-z0-9 ]", "", $Name);
#	$Email = ereg_replace("[^A-Za-z0-9 \@\.\-\/\']", "", $Email);
#	$Comments = ereg_replace("[^A-Za-z0-9 \@\.\-\/\']", "", $Comments);
	$Name = stripslashes($Name);
	$Email = stripslashes($Email);
	$Comments = stripslashes($Comments);
if ($Submit == "Yes") {
	$filename = "GuestBook.txt";
	$fp = fopen( $filename,"r"); 
	$OldData = fread($fp, 80000); 
	fclose( $fp ); 
	$Today = (date ("l dS of F Y ( h:i:s A )",time()));
	$Input = "Name: <b>$Name</b><br>Email: <b><u><a href=\"mailto:$Email\">$Email</a></b></u><br>Comments: <b>$Comments</b><br><i><font size=\"-1\">Date: $Today</font><br><br>.:::.";
	$New = "$Input$OldData";
	$fp = fopen( $filename,"w+"); 
	fwrite($fp, $New, 80000); 
	fclose( $fp ); 
}
	$filename = "GuestBook.txt";
	$fp = fopen( $filename,"r"); 
	$Data = fread($fp, 80000); 
	fclose( $fp );
	$DataArray = split (".:::.", $Data);
	$NumEntries = count($DataArray) - 1;
	print "&TotalEntries=$NumEntries&NumLow=$NumLow&NumHigh=$NumHigh&GuestBook=";
	for ($n = $NumLow; $n < $NumHigh; $n++) {
	print $DataArray[$n];
		if (!$DataArray[$n]) {
		Print "<br><br><b>No More entries</b>";
		exit;
		}
	}
?>
 

Anhänge

Das ist ein Pfadproblem, zusammenhängend mit dem Begriff _root.

_root bezeichnet die Hauptzeitleiste des Levels, also z.B. die Hauptzeitleiste des Level0, des Hauptfilms.

Lädst du nun deine gaestebuch.swf in einen Movieclip so zielt _root nicht mehr auf die Zeitleiste des gaestebuch-Films sondern auf die Zeitleiste der swf, in deren Zielmovieclip du die gaestebuch.swf geladen hast.

Fazit: Alle Pfade der gaestebuch.swf
- relativ schreiben (also statt _root dann this, oder this._parent, oder this._parent._parent je nachdem wie es verschachtelt ist, kenne deine gaestebuch-Datei nicht, oder
- falls absolut, so wie wenn du das Gästebuch in dem Movieclip erstellt hättest, in den du ihn später nachlädst. Also statt _root.machwas() dann _root.instanznamedeszielMC.machwas(). HIer funktioniert das Gästebuch jedoch dann nur hinzugeladen, nicht separat getestet.

Außerdem mußt du die Pfade zu den php-Scripts (die das Gästebuch braucht) in beiden Fällen von dem Verzeichnis der html-Datei setzen, in der die Haupt-swf eingebunden ist, also nicht von der gaestebuch.swf aus, falls die in einem Unterverzeichnis liegt. Möglicherweise ist das ja auch das eigentliche Problem.

Gruß
Rena
 
Hab mal alle _root durch this ersetzt in der gaestebuch.swf, es ändert sich allerding nichts. Das mit this._parent versteh ich leider nicht ganz wirklich. Hab mir auch noch mal die Hilfe angekuckt, aber so richtig helle werd ich dadurch auch nicht ;(

Ich hatte das Gästebuch oben übrigenst angehangen. Wenn du Bock hast kannst du ja noch mal einschauen. Komm echt nicht weiter. Meiner ansicht nach wird der Text nur durch den Code geladen:
Code:
NumLow = 0;
NumHigh = 10;
loadVariablesNum("GuestBook.php?NumLow="+NumLow+"&NumHigh="+NumHigh+"&R="+random(999), 0);
stop();

Kann sonst nirgenst etwas im zusammenhang mit dem Feld wo der Text reingeladen werden soll und _root finden.
Ich könnte mir ja auch ein eigenes dynamisches Textfeld bauen, welches den Text läd. Allerdings hab ich keine Ahnung wie ich das dann mit dem Blättern hinbekommen soll. Da ja immer nur 10 Einträge mit einmal angezeigt werden sollen.

Bei einer anderen Seite konnte ich das Problem durch this._lockroot = true; lösen, jedoch wird dort nur eine txt geladen kein PHP.

Ciao René
 
--------

loadVariablesNum("GuestBook.php?NumLow="+NumLow+"&NumHigh="+NumHigh+"&R="+random(999), 0);
--------

Mit der 0 lädst du die Daten in die Hauptzeitleiste des Level0, _nicht_ in den Movieclip, in den du die Gästebuch lädst.

Versuch mal
--------
loadVariables("GuestBook.php?NumLow="+NumLow+"&NumHigh="+NumHigh+"&R="+random(999), this);
--------
Damit lädst du die Variablen in die Zeitleiste, in der dieser Befehl steht (ich nehm mal an, der steht im Gästebuch-Film).
Ungetestet ... reinschauen kann ich nicht, da ich kein MX2004 hab.

Empfehlen würd ich auch, dir mal das loadVars-Objekt anzuschauen, damit lassen sich nachgeladene Daten besser kontrollieren.

Gruß
Rena

PS: Ohne Codeformatierung geschrieben, da bei mir im Mozilla bei einzeiligen, langen Scripts nur der Anfang gezeigt wird und das eigentlich wichtige steht ja hier u.a. am Ende der Zeile
 
Zuletzt bearbeitet:
Da kommt dann beim veröffentlichen folgender Fehler:

**Fehler** Szene=Scene 1, Ebene=LoadActions, Bild=1:Zeile 3: Falsche Anzahl an Parametern; loadVariablesNum erfordert zwischen 2 und 3.
loadVariablesNum("GuestBook.php?NumLow="+NumLow+"&NumHigh="+NumHigh+"&R="+random(999));

Anzahl der ActionScript-Fehler: 1 Gemeldete Fehler: 1


Hab die die Datei noch mal als FlashMX rangehängt. Da funktionierte es auch.

Ciao René
 

Anhänge

Es gibt da leider noch ein kleines Problem.
Es läd zwar die Einträge jetzt, aber wenn ich einen neuen mache soll es diese ja wieder neu laden, inkl. des neuen Eintrags.

Das macht es aber jetzt noch nicht. Und auch die Fehlermeldung wenn bsw. keine email angegeben wurde bringt es nicht.

Das ist der Text, der auf dem senden Button steht.
Code:
on (release) {
	if (Name eq "") {
		_root.Status = "Bitte deinen Namen angeben";
	} else if (Email eq "") {
		_root.Status = "Bitte deine e-mail adresse angeben";
	} else {
		Submit = "Yes";
		NumHigh = 10;
		NumLow = 0;
		_root.GuestBook = "Processing..   Loading New... ";
		loadVariablesNum("GuestBook.php", 0, "POST");
		_root.Status = "Danke für Deinen Eintrag, er wurde hinzugefügt.";
		gotoAndStop(2);
	}
}

Ich dachte wenn ich die zeile
loadVariablesNum("GuestBook.php", 0, "POST");
genau so änder wie bei dem laden am Anfang, sollte das gehen. Tut es aber nicht.

Außerdem sollte eben das dynamische Textfeld namens Status die Fehlermeldung ausgeben, was es ebenfalls nicht macht.
Hab es auch schon mit this statt _root ;oder this._lockroot = true; probiert aber leider ohne Erfolg.

Wenn jemand darauf auch noch eine Antwort wüsste wäre das super

Ciao Rene
 
Zurück