xml guestbook aktualisieren

Ensign

Mitglied
Hi Leute!

Ich bin grad dabei ein Guestbook in Flash zu schreiben, dass die Daten aus eine mysql-DB in ein XML-File liest und so ausgibt und die Daten über ein PHP-Script in die DB schreibt. Bishin funktioniert alles sehr gut, nur ist das Problem, dass, wenn ein Eintrag stattgefunden hat das XML-File aktualisiert werden muss, damit der neue Eintrag zu sehen ist. XML wird so in Flash geladen:

PHP:
 theXML = new XML();
theXML.ignoreWhite = true;
System.useCodePage = true;
xmlfile = "dasXML.php";
theXML.load(xmlfile);
loadData();
function loadData() {
 theXML.onLoad = function(status) {
 if (status) {
  gb_xml = theXML.childNodes[0].childNodes[2].childNodes;
  setGb();
  delete theXML;
 }
 };
}

und nun die Funktion für das Gb (nur so zum Drüberstreuen):
PHP:
 function setGb() {
 count_gb = gb_xml.length;
 attachMovie('gb', 'gb', (count_menu + count_news + 1));
 if (!loaded) {
  _root.gb._visible = 0;
  preload(gb);
  loaded = 1;
 } else {
  _root.gb._visible = 1;
 }
 if (!min_gb) {
  min_gb = 0;
 }
 daten_gb = _root.gb_xml[min_gb];
 
 _root.gb._x = 10;
 _root.gb._y = 10;
 if (count_gb == 0) {
  _root.gb.gb_entries_show.text = "Keine Einträge";
  _root.gb.gb_entries_show._x = 160;
  _root.gb.gb_entries_show._y = 200;
  _root.gb.gb_entries_status._visible = 0;
 } if (count_gb == 1) {
  _root.gb.gb_entries_show.text = "1 Eintrag";
 } if (count_gb >= 1) {
  _root.gb.gb_entries_show.text = count_gb + " Einträge";
 }
 _root.gb.gb_entries_status.text = "Eintrag " + (min_gb + 1) + " von " + count_gb;
 _root.gb.gbdate.text = daten_gb.attributes.date + " Uhr";
 _root.gb.gbname.text = daten_gb.attributes.name;
 _root.gb.gbemail.text = daten_gb.attributes.email;
 _root.gb.gburl.text = daten_gb.attributes.url;
 _root.gb.txt.autoSize = true;
 _root.gb.txt.autoSize = "left"
 _root.gb.txt.htmlText = daten_gb.firstChild.nodeValue;
}

Auf jeden Fall wird in dem attachten "gb"-Movie alles gemacht und alles in die Datenbank geschrieben. Nun hätte ich aber gern einen Button oder eine Funktion, mit dem/der man das ganze refreshen kann. Ich hab leider keine Ahnung wie ich das hinbekommen soll.

Dank schon im Voraus!

Ensign
 
Hmm?

Lass Doch bei Bedarf die XML noch einmal einladen und Dein Gästebuch aktualisieren.

Den Aufruf würd ich übrigens anders schachteln:
PHP:
theXML.load(xmlfile);

theXML.onLoad = function(status) {
  if (status) {
    gb_xml = theXML.childNodes[0].childNodes[2].childNodes; // "this" würde es hier auch tun
    setGb(); // übergib dieser Funktion lieber den Knoten, statt eine globale Variable zu nehmen
    delete theXML; // warum löschst Du das Objekt?
  }
}
- die Funktion loadData brauchst Du nicht.

Außerdem habe ich den Eindruck (habe es aber nur überflogen), dass es hier ein stinknormales LoadVars-Objekt auch tun würde, denn Du liest nur einen Knoten aus, oder?

Gruß

.
 
Zuletzt bearbeitet:
Lieber Datic!

Danke für deine Tipps, nur bin ich ein bisschen zu unfähig sie in die Tat umzusetzen. Ich hab dieses XML-LoadScript übernommen. Kannst du mir bitte etwas genauer sagen, wie ich das File laden soll, damit ich es aktualisieren kann, wenn es nötig ist. Und ja, es wird nur ein stinknormaler Knoten ausgelesen.

Danke schön!

Ensign
 
Hi,

na ja, ich kann es mir noch einmal anschauen. Könntest Du denn die .fla mal posten (dann lässt sich das eleganter testen, wenn ich alles am Stück sehe - und vielleicht auch eine Beispiel-XML (oder zumindest eine Beschreibung, wie die Daten genau aufgebaut sind)?

Gruß

.
 
So, hier hab ich mein File auf das Wesentliche reduziert und eine Test-XML-Datei dazugegeben. Grundsätzlich wird ein neuer Eintrag vom Formular über ein php-File mit loadVariables in die MySQL-DB geschickt und dann eine Antwort an das Flash-Script gegeben. Die eigentliche XML-Datei (bzw. php-Datei) liest das Ganze natürlich aus der DB aus. Hoffe nun kannst du mir weiterhelfen, wie ich die XML-Daten nach dem Posten eines neuen Guestbook-Eintrages aktualisieren kann. Man kann's ja auch jetzt ohne DB probieren indem man das File verändert und das Guestbook in der bereits gestarte Flash-Datei eben versucht zu aktualisieren, aber das wirst du ja sowieso wissen ;)

Vielen, vielen, vilen Dank für deine Hilfe!

Ensign
 

Anhänge

  • flash_gb.zip
    13,5 KB · Aufrufe: 23
Hi,

inzwischen verstehe ich auch, wo Dein Problem liegt. Flash holt einmal geladene Dateien aus dem Cache, und bei load kannst Du im Gegenzug zu getURL keinen Timestamp an die URL anhängen, um ein Neuladen zu erzwingen. Ich habe das damals so gelöst, dass ich beim Schicken der Daten mein PHP-Script die aktualisierte Liste mit echo zurückgeben ließ - also habe ich in Flash nur beim ersten Mal eine echte Datei eingeladen, sondern die Rückgabe des Scriptes verarbeitet. Verwende statt send beim Aktualisieren die Methode sendAndLoad und parse das zurückgegebene XML-Objekt.

Gruß

.
 
Dankeschön! Wenn ich dich jetzt richtig verstehe, soll ich statt
PHP:
theXML.load(xmlfile);

das hier verwenden:
PHP:
theXML.sendAndLoad(xmlfile);

und was meinst du parsen? Ist mir neu, denn ich bin erst seit ca. 10 Tagen in der dynamischen Flash-Welt. Vielleicht könntest du mir sagen, wie ich das im Script passend ändere.

Vielen Dank! Ensign
 
Hi,

Vielleicht könntest du mir sagen, wie ich das im Script passend ändere.
hmm, leider ist Dein Script für mich als Außenstehenden so unübersichtlich, dass es eigentlich nicht wage, ohne einen kompletten Neuaufbau explizite Änderungen vorzuschlagen.

An der Stelle, wo Du die e-Mail versendest, solltest Du statt send sendAndLoad verwenden, und das XML-Objekt auch als Empfänger angeben. Wenn Dein PHP-Script dann auch die aktualisierte Datei zurückgibt, bekommst Du auch den neuen Eintrag und kannst diesen anzeigen. Ein ganz simples Beispiel findest Du z.B. hier (klick) - dort verwende ich zwar ein LoadVars-Objekt, aber die Methode ist die selbe.

Gruß

.
 
Zurück