Geburtstagreminder

also hab das genau so gemacht wie du, aber da kommt immer folgendes raus:
Code:
<daten /><reminder_info jahr=\"jahr
\" monat=\"monat
\" tag=\"tag
\" nachname=\"Nachname
\" vorname=\"Vorname
\" />

Ich weiß auch nicht was ich da falsch mache. Ich hab mal die datein angehängt, vielleicht kannst ja mal mit meinen probieren und schaun obst klappt.
 

Anhänge

  • gb-reminder.zip
    6,2 KB · Aufrufe: 11
Hi,

der Fehler mit den Zeilenumbrüchen besteht darin, dass Du mehrzeilige Textfelder (Eingabefelder) verwendest. Stell das um und nimm einzeilige Textfelder, dann sollte das Problem behoben sein.

Ansonsten hast Du immer noch nicht stripslashes in der PHP-Datei angewendet (obwohl ichs zweimal gesagt habe):
PHP:
$file="reminder.xml";
$newfile = fopen($file, "w");
$add = stripslashes($_POST["xmlString"]);
fwrite($newfile, $add);
fclose($newfile);

Ein dritte Fehler ist, dass LoadVars.send() nur zwei Parameter kennt (also kein Rückgabeobjekt). Du solltest LoadVars.sendAndLoad() verwenden (zumal dann das PHP-Script nicht in einem neuen Fenster geöffnet wird).

Gruß

EDIT: ausserdem baust Du Dein XML-Objekt falsch zusammen: Der reminder_info-Knoten muss als Child dem daten-Knoten hinzugefügt werden, nicht dem gesamten XML-Objekt:
Code:
var xmlroot = xmlsend.createElement("daten");
var xmlNode = xmlsend.createElement("reminder_info");
xmlNode.attributes.vorname = vo.text;
xmlNode.attributes.nachname = na.text;
xmlNode.attributes.tag = ta.text;
xmlNode.attributes.monat = mo.text;
xmlNode.attributes.jahr = ja.text;
xmlroot.appendChild(xmlNode);
xmlsend.appendChild(xmlroot)
.
 
Zuletzt bearbeitet:
Ok gut danke, jetzt wird es richtig eingefügt!

Aber ist das Problem "eingefügt" und nicht hinzugefügt

Ich will es ja nicht ersetzt haben, sonder das man seine Daten einträgt und ufgenommen wird in die Liste, nun ist es aber so das alles überschrieben wird.

Wäre schön wenn das auch noch lösbar wäre. Danke
 
ja, dann wirf einen Blick in die PHP-Referenz, und Du wirst unter "fopen" eine Erläuterung des zweiten Parameters finden. ;) --> Mit "a" fügst Du etwas an eine Datei an.

Gruß
.
 
Achso, danke das würde klappen, nur schon wieder ein Problem :)

Es ist so es wird hinzugefügt, nur siehst jetzt so aus:
PHP:
<?xml version="1.0" encoding="iso-8859-1"?>
<daten>
	<reminder_info vorname="Dominik" nachname="Klein" tag="29" monat="09" jahr="1989"/>
	<reminder_info vorname="Hannes" nachname="Klein" tag="10" monat="12" jahr="1954"/>
	<reminder_info vorname="Evelyn" nachname="Klein" tag="13" monat="09" jahr="1964"/>
	<reminder_info vorname="Daniel" nachname="Klein" tag="01" monat="09" jahr="1993"/>
	<reminder_info vorname="Julia" nachname="Hill" tag="26" monat="09" jahr="1990"/>
</daten>
<daten><reminder_info jahr="1988" monat="09" tag="23" nachname="Musterman" vorname="Max" /></daten>

Tja das Problem liegt jetzt dabei das es so von Flash nur das erste mit <daten></daten> ausgelesen wird!

Kann man das auch irgendwie in die xml einfügen das es so hinzugefügt wird:
PHP:
<?xml version="1.0" encoding="iso-8859-1"?>
<daten>
	<reminder_info vorname="Dominik" nachname="Klein" tag="29" monat="09" jahr="1989"/>
	<reminder_info vorname="Hannes" nachname="Klein" tag="10" monat="12" jahr="1954"/>
	<reminder_info vorname="Evelyn" nachname="Klein" tag="13" monat="09" jahr="1964"/>
	<reminder_info vorname="Daniel" nachname="Klein" tag="01" monat="09" jahr="1993"/>
	<reminder_info vorname="Julia" nachname="Hill" tag="26" monat="09" jahr="1990"/>
<reminder_info jahr="1988" monat="09" tag="23" nachname="Musterman" vorname="Max" />
</daten>

Also das es zu diesem Hinzugefügt wird und nicht unten angehängt wird?

Klar zuerst darf mal der Knoten ("daten") nicht erstellt werden und dann weiter, wie geht das? Gibts da auch irgend einen Befehl das es im 1.Knoten eingefügt wird?
 
Hi,

zwei Möglichkeiten:
  • in Flash keinen Daten-Knoten erstellen, dafür mit PHP erst die gesamte Datei einlesen und parsen, Deinen neuen Knoten an der entsprechenden Stelle einfügen und dann die gesamte Daten wieder speichern.

  • In Flash kein neues XML-Objekt erstellen, sondern den neuen Eintrag dem eingelesenen XML-Objekt hinzufügen. Dann das gesamte Objekt an PHP schicken und dort speichern (wie gehabt mit "w").

am elegantesten wäre wohl, die Daten in einer Datenbank zu speichern, und mit PHP abzufragen. Am einfachsten wäre dagegen, Du verzichtest auf den Daten-Knoten und packst einfach die reminder_info-Knoten nacheinander in die XML-Datei:
Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<reminder_info vorname="Dominik" nachname="Klein" tag="29" monat="09" jahr="1989"/>
<reminder_info vorname="Hannes" nachname="Klein" tag="10" monat="12" jahr="1954"/>
<reminder_info vorname="Evelyn" nachname="Klein" tag="13" monat="09" jahr="1964"/>

Gruß
.
 
Ok, danke klappt nun alles wunderbar

Das wars dann vorläufig, könnte sein das mir noch wichtige Sachen einfallen und nicht funktionieren.

Nochmal ein großes Lob an dich, und danke für deine Hilfe.
 
Ok, ein Problemchen hab ich heute noch, ich dachte mir nur das vielleicht es nicht so schlecht wäre wenn überprüft wird ob die Daten schon in der xml vorhanden sind, wenn jemand das 2 mal macht sich eintragen sieht auch blöd aus wenn ein Name 2 mal da steht oder?

Ja ich hab mal begonnen da was zu schreiben, aber nun bin ich wieder hängen geblieben, hier mal der Code:
PHP:
_root.eintragen2.onPress = function(){
	if(feld1.text == ""||feld2.text == ""||feld3.text==""||feld4.text==""||feld5.text=="" || feld1.text == "Vorname"||feld2.text == "Nachname"||feld3.text == "Tag"||feld4.text == "Monat"||feld5.text == "Jahr"){
		status_txt.text = "Alles Ausfüllen!"
	}else{
var xmlsend = new XML();
var xmlroot = xmlsend.createElement("daten");
var xmlNode = xmlsend.createElement("reminder_info");
xmlNode.attributes.vorname = feld1.text;
xmlNode.attributes.nachname = feld2.text;
xmlNode.attributes.tag = feld3.text;
xmlNode.attributes.monat = feld4.text;
xmlNode.attributes.jahr = feld5.text;
xmlsend.appendChild(xmlNode);

for(var i=0; i<remind.length;i++){
	if(feld1.text == remind[i].vorname && feld2.text == remind[i].nachname && feld3.text==remind[i].tag  && feld4.text==remind[i].monat && feld5.text == remind[i].jahr){
		status_txt.text = "Bereits vorhanden";
		t[i] = 0;
		}else{
			t[i] = 1;
		}
	}
}
}
function daten_senden(){
	var phpSendXml = new LoadVars();
phpSendXml.xmlString = xmlsend.toString(); 
phpSendXml.sendAndLoad("reminder.php?remin="+random(9999999),phpSendXml,"POST")
_root.status_txt.text = "gesendet";
var y = 0;
	onEnterFrame = function(){
		y++;
		trace(y)
		if(y == 10){
				gotoAndStop(1);
				delete this.onEnterFrame;
			}
		}
}

So ich hab das soweit, das geprüft wird ob der Vorname, Nachname,..... vorhanden ist, wenn er vorhanden ist soll im Textfeld steht, Bereits vorhanden.
Bis dort hin klappts wunderbar, nun kommt jetzt das problem, ich weiß nicht wie ich die funktion mit dem senden aufrufen soll, besser gesagt wann.

Es ist ja in der for schleife, das heißt er muss erst alles mal durchprüfen bevor er senden kann. Weil wenn es vorhanden ist dann wird es ja zb 4 mal in die xml geschrieben weil es nicht übereinstimmt und 1mal nicht weil es überreinstimmt.

Und wenns gar nicht vorhanden ist, dann wirds 5 mal reingeschrieben. Dann hab ichs eigentlich nur schlimmer gemacht!

Ich komm einfach nicht drauf, wie man das machen kann, das er mal alles prüft obs irgendwo übereinstimmt, und wenns wo übereinstimmt dann soll er die funktion mit dem senden nicht ausführen. Ist es nicht vorhanden dann soll er es ausführen.
 
Hi,

ich hab grade keine Zeit, ein Beispiel fertig zu machen, aber hier ein Ansatz:

Ruf beim Abschicken eine Funktion "checkDoubles" auf, die true zurückgibt, wenn der Eintrag noch nicht existiert, und false, wenn er schon existiert. Wird true zurückgegeben, wird gespeichert, ansonsten nicht.

Die Funktion "checkDoubles" geht nun alle Einträge in einer Schleife durch und zwar nach folgendem Muster (Pseudocode):
Code:
function checkDoubles() {
    var not_in_list = true;
    for (alle Einträge in der Liste) {
        if (aktueller_eintrag ähnelt eintrag[i]) {
            not_in_list = false;
            break;
        }
    }
    return not_in_list;
}

Gruß
.
 
Ok, hab das mal so versucht und wollte diesen Teil jetzt mal tracen, gut teste ich und was kommt ist:

"Flash Player wird durch ein Skript in diesem Film verlangsamt. Wenn das Skript weiterin ausgeführt wird, reagiert der Computer möglicherweiße nicht mehr. Möchten sie die Ausführung des Skripts abbrechen?"

Tja so hab ich den code gemacht:
PHP:
function checkDoubles() {
    var not_in_list = true;
    for (var i=0;i<remind.length;i=0) {
        if (feld1.text == remind[i].vorname && feld2.text == remind[i].nachname && feld3.text==remind[i].tag  && feld4.text==remind[i].monat && feld5.text == remind[i].jahr) {
            not_in_list = false;
            break;
        }
    }
    return not_in_list;
	trace(not_in_list);
}

Ich weiß ja nicht ob du überhaupt gemeint hast, das ich es so machen soll. Aber wenn du heute keine Zeit mehr hast, dann erklähr mir morgen wie du das gemeint hattest. So dringend ist es ja nicht, hast mir ja heute schon genug geholfen!
 

Neue Beiträge

Zurück