Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02-07-2005, 01:46   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 593
Passwortabfrage in for-Schleife mit Werten aus ner *.xml

Hallo,

als ich diesen : [TUTORIAL] laden und verarbeiten von XML Dateien (basics) thread gesehen habe, dachte ich mir, dass praktisch (wenn auch zimlich unsicher) wäre, wenn man in einer *.xml verschiedene Namen und dazugehörige Passwörter speicherte und dessen Eingabe anschließen in einer for-Schleife überprüfte.

Meine *.xml sieht so aus
Code:
 
<?xml version='1.0' encoding='utf-8'?> 
<knoten> 
<kindknoten name="Klaus" pw="12" /> 
<kindknoten name="Peter" pw="34" /> 
<kindknoten name="Hans" pw="56" /> 
</knoten>
dazu das AS im 1. Bild so:

ActionScript:
  1. stop();
  2. var PWliste = new XML();
  3. PWliste.ignoreWhite = true;
  4. PWliste.load("xml.xml");
  5. PWliste.onLoad = function(success) {
  6. PWliste_namen = [];
  7. PWliste_pws = [];
  8. if (success) {
  9. for (var i = 0; i<PWliste.firstChild.childNodes.length; i++) {
  10. PWliste_namen[i] = PWliste.firstChild.childNodes[i].attributes.name;
  11. PWliste_pws[i] = PWliste.firstChild.childNodes[i].attributes.pw;
  12. }
  13. gotoAndStop(2);
  14. } else {
  15. trace("Laden der *.xml fehlgeschlagen...");
  16. }
  17. };
und das AS des 2. Bildes so:
ActionScript:
  1. stop();
  2. trace(PWliste_namen);
  3. trace(PWliste_pws);
  4. // -----------------------------------
  5. function checkPass() {
  6. for (var p = 0; p<PWliste.firstChild.childNodes.length; p++) {
  7. //trace(PWliste_namen[p]+" : "+PWliste_pws[p]);
  8. if (name_txt.text == PWliste_namen[p]) { // hier sollte ja jetz ersma nur der Name Überprüft werden weils halt noch nicht funktioniert
  9. /*if ((name_txt.text == PWliste.firstChild.childNodes[pW].attributes.name and
  10. pw_txt.text == PWliste.firstChild.childNodes[pW].attributes.pw)) { */
  11. this.gotoAndStop(4);
  12. } else {
  13. this.gotoAndStop(3);
  14. }
  15. }
  16. }
  17. this.btn.onPress = function() {
  18. checkPass();
  19. };

Ich hatte mir eigentlich erhofft, dass das Ganze dann etwa so funktioniert, wie in dem "trace" des 2. Bildes etwa zu sehen ist (trace(PWliste_namen[p]+" : "+PWliste_pws[p])), also dass dann zu dem Namen Klaus das Passwort 12, zu Peter das PW 34 und Hans das PW 56 gehört.

Wenn ich
ActionScript:
  1. PWliste_namen[p]
trace
dann erscheint in der Ausgabe:
"Klaus
Peter
Hans"
(was ja eigentlich bedeuten müsste, dass Flash die einzelnen Werte von "p" bereits zwischen speichert) aber die Passwortabfrage funktioniert halt nicht bei nur einem Namen!

Ich befürchte mir ist da irgendwo ein dummer Denkfehler unterlaufen nur leider komm ich nich dahinter, würde mich freuen wenn mir jemand auf die Sprünge helfen könnte! In der Suche hab ich hier leider auch nix problemlösendes finden können (obwohl es da ja eigentlich schon etwas geben müsste. Falls es hier schon eine Lösung gibt, bitte ich meine Blindheit zu entschuldigen).
Angehängte Dateien
Dateityp: zip ich hängs einfach nochmal mit dran... .zip (6,2 KB, 4x aufgerufen)
__________________
mfg

Geändert von L.M. (02-07-2005 um 02:01 Uhr)
L.M. ist offline   Mit Zitat antworten
Alt 02-07-2005, 05:43   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
ActionScript:
  1. for (var p = 0; p<PWliste.firstChild.childNodes.length; p++) {
Das benötigst du hier doch gar nicht mehr, weil du zwei neue Arrays mit den Namen und Passwörtern angelegt hast. Außerdem ist Flash die childNodes.length außerhalb des XML-Objektes nicht mehr unbedingt bekannt...

Versuchs mal so etwa:
ActionScript:
  1. function checkPass() {
  2.   _level0.pass = false;
  3.   var laenge = PWliste_namen.length;//vorher ermitteln sonst muss der Wert in der Schleife bei jedem Durchgang neuberechnet werden
  4.         for (var p = 0; p<laenge; p++) {
  5.            if ((_level0.name_txt.text == PWliste_namen[p]) && (_level0.pw_txt.text ==  PWliste_pws[p])){
  6.                _level0.pass = true;
  7.                _level0.gotoAndPlay("OK");
  8.                break;
  9.            }
  10.            
  11.           }
  12.          if(_level0.pass == false){
  13.            _level0.gotoAndPlay("Falsch");
  14.           }
  15. }

Geändert von agedoubleju (02-07-2005 um 05:46 Uhr)
  Mit Zitat antworten
Alt 02-07-2005, 12:58   #3 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 593
Yiiiipeeeyyy jetzt klapts! danke danke!
Kannte den Sinn und Zweck von "break;" auch noch nicht, macht aber n guten Eindruck!
Es dient doch nur der Performance, da es die Schleife abbricht wenn ein Name und ein PW übereinstimmen oder hat es noch einen andern Sinn? Das AS funktioniert nämlich auch ohne das "break;"?
__________________
mfg
L.M. ist offline   Mit Zitat antworten
Alt 02-07-2005, 23:23   #4 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Yep, break bricht die Schleife ohne weitere Durchläufe ab und verhindert oft darüberhinaus auch, dass weitere "falsche" Bedingungen gecheckt werden...
  Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 00:19 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele