Accounts erstellen/registrieren und einloggen in Flash mit PHP

Skippy

Mitglied
Hallo Forum,

Ich möchte in diesem Tread nochmals die Thematik "Accounts erstellen/registrieren und einloggen in Flash mit PHP" aber anders als bisher.
Um erstmal die Moderatoren ruhig zu stellen :p :

-Ich habe die Suchfunktion ausführlich benützt.
-Ich habe gegoogelt.
-Ich habe mir PHP angeschaut und Tutorials darüber gelesen
-Ich habe mit meinem bisher angesammelt wissen durch die 2 oberen Punkte bereits selbst getestet und probiert.

Es ist normal, dass man Dinge nicht zu 100% genau erklärt kriegt, dazu reichen manchmal nichtmal Bücher, man muss sich immer noch einen Teil selbst zusammenreimen, lernen, etc.

Allerdings finde ich auch, das man über dieses Problem, vor allem wenn man mit PHP noch nichts zu tun hatte, noch nicht genug detailierte Informationen findet, um sich so ein "System" nenne ich es jetzt mal, selbst zu erstellen, deshaln würde ich in diesem Tread gerne, dieses Thema ausfürlich mit euch behandeln.

Ich möchte hiermal mit folgendem Beitrag von "Tobias Menzel - mod|datic" beginnen, und zwar aus folgendem Tread:
Tread-Link


Beitrag von Tobias Menzel:
1. Bitte halte Dich an Punkt 12 unserer Netiquette (Groß-/Kleinschreibung).

2. Wenn Du nichts von serverseitigen Sprachen verstehst, aber auf die Verwendung solcher angewiesen bist, würde ich Dir vorschlagen, eine zu lernen - man mag zwar in den Weiten des Netzes durchaus die eine oder andere Fertiglösung finden, aber spätestens beim Anpassen an eigene Bedürfnisse bist Du wieder auf Unterstüzung angewiesen.

Das Resultat sind viele Beiträge á la "Wer kann mir das Script XY umschreiben" bzw. Themen, bei denen sich ziemlich schnell herauskristallisiert, dass der Fragende keinen Zugang zu der Materie hat und man - Zeile für Zeile und ohne größeren Lerneffekt - doch alles vorkauen muss. Das können (und wollen) wir in diesem Forum nicht leisten.

Lange Rede, kurzer Sinn: Versuch, Dich mit PHP vertraut zu machen, schau Dich im entsprechenden Forum um, lies die FAQ und probiere einfachere Beispiele aus. Das Auslesen eines per GET/POST übergebenen Wertes und das Schreiben desselben in eine Textdatei ist ein guter Anfang, denn viel ist es wirklich nicht:

Ich möchte noch gerne etwas erwähnen, was das "Zeile für Zeile und ohne größeren Lerneffekt - doch alles vorkauen muss." betrifft.
Ich hoffe dieser Tread kommt noch so rüber, den ich möchte erreichen, dass ich und auch vor allem alle anderen was dadurch lernen, wie das funktioniert, aus interesse an der Materie und aus Motivation. Und zumindest ich, würde mich sehr über diese Hilfe freuen, und ich helfe auch immer gerne wenn ich kann, denn ich möchte die Hilfe untereinander unterstützen.

PHP:
$posting = urldecode($_GET["posting"]);

if ($handler = @fopen("chat.txt", "a")) {
    fwrite($handler, $posting."\n");
    fclose($handler);
    echo "resp=erfolgreich";
} else {
    echo "resp=fehlgeschlagen";
}


Code:
// passendes AS:
var lv = new LoadVars();

lv.onLoad = function() {
    // Anzeige der Rückmeldung:
    mein_textfeld.text = "Übertragung " + this.resp;
}

// Zum Versenden des Inhaltes eines Eingabetextfeldes:
function sendeText() {
    lv.posting = escape(mein_eingabefeld.text);
    lv.sendAndLoad("meinscript.php", lv, "POST");
}


Ich denke es gibt noch viele Leute, die die Sache mit Accounts und dem Login auch noch nicht beherschen, auch ich, weshalb ich mich auch sehr freuen würde, wenn uns hier ein paar experten unter die Arme greifen könnten und uns die beiden Codes genauer erklären könnten.

Ich habe mal z.B. in mehreren PHP Tutorials nach den Parametern im oberen PHP-Code recherchiert, und wollte herausfinden was sie bewirken, in welchem zusammenhang sie stehen müssen, was sie bedeuten etc.
Aber leider habe ich nichts gefunden :-(

Deshalb eine meiner Bitten, könnte uns/mir einer genauer erklären, was der PHP-Code genau bedeutet, und was für was steht


vom Actionscript her, werden die meisten wahrscheinlich schon mehr anfangen können, bis auf die Tatsache vieleicht, dass sie noch nicht soviele Erfahrungen hatten mit Befehlen wie posting etc., so geht es mir z.B. auch, trotzdem komm ich noch so damit zurecht, dass ich es zum laufen bringen würde, trotzdem eine Frage noch:

Muss der obere Actionscript, zusammen in irgend einem "Frame 1" liegen, oder muss der Teil "// Zum Versenden des Inhaltes eines Eingabetextfeldes:" nicht auf einem Button liegen?

Und hängen beide Codes so zusammen, dass:
1. der Text aus dem Eingabetextfeld an die PHP Datei geschickt wird
2. die PHP Datei den Text in einer Textdatei auf dem Server speichert
3. die Flashdatei hinterher anzeigt ob es geklappt hat

eine andere Frage bzg. des PHP-Codes, wofür steht das a bei:
Code:
if ($handler = @fopen("chat.txt", "a")) {

Ich habe es schon versucht aber die Flashdatei hat nichts angezeigt, also was jetzt die Rückmeldung angeht.

Viele Fragen stehen offen, ich hoffe ich habe jetzt nicht zu durcheinander geschrieben ^^ es werden sich sicher(hoffentlich) noch ein paar Fragen häufen, bis diese Thematik ausfürlich auch als Tutorial dienen könnte.

An dieser Stelle sage ich jetzt erstmal bis Später,

Mit freundlichen Grüßen, Skippy
 
Hi,

vorweg: Die von Dir geposteten Codeschnipsel haben nichts mit Useraccounts oder Einloggen zu tun.
Und hängen beide Codes so zusammen, dass:
1. der Text aus dem Eingabetextfeld an die PHP Datei geschickt wird
2. die PHP Datei den Text in einer Textdatei auf dem Server speichert
3. die Flashdatei hinterher anzeigt ob es geklappt hat
Vielmehr passiert genau dieses! ;)

Die Ausschnitte erkläre ich Dir gerne Zeile für Zeile:

AS-Code:
Code:
// wir erstellen uns ein LoadVars-Objekt:
var lv = new LoadVars();

// Diese Funktion wird aufgerufen, wenn Daten empfangen werden. Das ist hier
// der Fall, wenn das PHP-Script eine Meldung (per echo) zurückgibt:
lv.onLoad = function() {
    // Anzeige der Rückmeldung:
    // Es muss hier auf der Bühne ein Textfeld mit dem Instanznamen
    // "mein_textfeld" geben, damit die Meldung angezeigt werden kann:
    mein_textfeld.text = "Übertragung " + this.resp;
}

// Zum Versenden des Inhaltes eines Eingabetextfeldes:
function sendeText() {
    // "posting" ist kein Befehl, vielmehr lege ich eine Variable namens "posting"
    // als "member" (sprich: Unterobjekt) des LoadVars-Objektes an. In diese
    // Variable wird der Inhalt eines Eingabefeldes geschrieben. Das Eingabefeld
    // hat hier den Instanznamen "mein_eingabefeld".
    lv.posting = escape(mein_eingabefeld.text);
    // Mit der sendAndLoad-Methode wird ein Script aufgerufen, ohne dass
    // es in einem Browserfenster geöffnet wird.
    // Wird per "POST" gesendet, muss das PHP-Script die Variablen
    // per $_POST abfragen.
    lv.sendAndLoad("meinscript.php", lv, "POST");
}
Der Code kann komplett in einem Schlüsselbild stehen - auf irgendwelche MovieClips kommt nichts davon. Um die Methode "sendeText" aufzurufen, kannst Du allerdings einen Button verwenden: Gib einem MovieClip z.B. den Instanznamen "button" und gebe unter dem bisherigen Script folgendes ein:
Code:
button.onRelease = function() {
    sendeText();
}
Alternativ könntest Du die Funktion auch starten, wenn das Eingabefeld vom Benutzer verlassen wird, oder bei einem bestimmten Tastendruck (z.B. ENTER). Mach Dich über Key-Listener schlau (--> F1), wenn Du so vorgehen willst.

PHP-Script:
Code:
// Hier wird die übergebene Variable "posting" aus dem superglobalen
// Array $_POST geholt und in eine PHP-Variable gesetzt. Da wir (s.o.) per
// "POST" senden, muss es auch $_POST statt $_GET heissen:
$posting = urldecode($_POST["posting"]);

// Wir öffnen die Textdatei mit dem Parameter "a" - das "a" steht für
// "append" und bedeutet, dass alles, was nun in die Datei geschrieben
// wird, einfach hinten angehängt wird (siehe PHP-Referenz unter "fopen").
if ($handler = @fopen("chat.txt", "a")) {
    // Hier wird der Inhalt der Variable an die Datei angehängt:
    fwrite($handler, $posting."\n");
    fclose($handler);
    // Hats geklappt, so wird die Variable "resp" mit dem Wert "erfolgreich" zurückgegeben:
    echo "resp=erfolgreich";
} else {
    // ansonsten gibts ein "fehlgeschlagen":
    echo "resp=fehlgeschlagen";
}

Allgemeines zum LoadVars-Objekt:

Um mit dem LoadVars-Objekt Variablen zu verschicken, muss man dem Objekt diese Variablen zuweisen. Angenommen, ich will die Variable "titel" mit dem Inhalt "News" verschicken sowie die Variable "datum" mit dem Wert "09.06.2006", so erstelle ich beide Variablen als "Member" des LoadVars-Objektes:
Code:
var lv = new LoadVars();
lv.titel = "News";
lv.datum = "09.06.2006";
Wird das Objekt nun verschickt, so werden beide Variablen an den Server gesendet. Angenommen, wir senden per "GET", so könnte das dazugehörige PHP-Script so aussehen:
Code:
echo $_GET["titel"]; // gibt "News" aus
echo $_GET["datum"]; //gibt "09.06.2006" aus

Will man nun auch Variablen an Flash zurückgeben, so werden diese einfach url-kodiert per echo ausgegeben. Beispiel:
Code:
echo "status=erfolgreich&feeling=happy";
Kommt das nun in Flash an, so wird die Methode "LoadVars.onLoad" aufgerufen und beide Variablen stehen als Member (s.o.) des LoadVars-Objektes zur Verfügung:
Code:
lv.onLoad = function() {
    trace(this.status); // gibt "erfolgreich" aus
    trace(this.feeling); // gibt "happy" aus
}

Gruß
.
 
Wow, erstmal vielen Dank für diese schnelle und umfangreiche Antwort :) solche Leute braucht die Welt ^^ (mehr Danksagungen zu späteren Beiträgen :p )

Ich habe jetzt gerade nochmal rumexperimentiert die letzte Stunde, es klappt alles, bis auf eine Sache...

Siehe Hier

AS sowie PHP-Code sind genau wie oben, was ist da falsch?

*die ganze Zeit am testen und grübeln ist*

MfG und danke im Vorraus, Skippy

EDIT:
Achja, hab recherchiert, dass sowas noch rein muss, was ich auch noch als einzige Änderung reingeschrieben habe:
<?php .............. ?>
 
Zuletzt bearbeitet:
... warum bindest Du die PHP-Datei in ein Frameset ein? Die Rückgabe des Scripts wirst Du im Browser nicht sehen können, denn das Script wird auf dem Server ausgeführt - in Deinem Frame steht aber zu diesem Zeitpunkt nur die Ausgabe dieses Scriptes, das beim Aufruf der Seite aufgerufen wurde.

Poste bitte mal Deine Dateien (.fla und .php), damit ich einen Blick in die Quelltexte werfen kann. Vielleicht habe ich auch einen Syntaxfehler o.ä. übersehen. ;)

Gruß
.
 
Das hab ich nur für mich gemacht, um zu beobachten was passiert etc. will ja schließlich was lernen und so und muss alles testen da ich kaum ahnung hab :p

Ich hab mal alles was damit zu tun hat gerart:

http://www.gabbagandalf.de/flash/php_flash.rar

EDIT:
Nochmal zu meinem letzten Beitrag, das Problem ist das bevor irgendwas passiert es direkt fehlgeschlagen ist
 
Zuletzt bearbeitet:
Hi,

beide Dateien arbeiten bei mir fehlerfrei zusammen. Möglich, dass Du bei Dir keinen Schreibzugriff auf die Datei "chat.txt" bekommst. Nimm im PHP-Script mal die Fehlerunterdrückung bei "fopen" heraus (entferne das "@" vor "fopen") und ändere in Flash die Zeile
Code:
lv.sendAndLoad("meinscript.php", lv, "POST");
um in:
Code:
lv.send("meinscript.php", "POST");
Das Script wird dann im Browser geöffnet, und Du siehst eventuelle Fehlermeldungen.

Gruß

P.S.:
Das hab ich nur für mich gemacht, um zu beobachten was passiert etc.
Das bringt Dir beim Script allerdings nichts, weil durch den Aufruf von Flash aus Dein iframe nicht aktualisiert wird: Die Ausgabe des Scriptes landet wirklich nur in Flash und nicht in Deinem Browser. Wenn Du die Ausgabe sehen willst, mach es so, wie ich es eben beschrieben habe: ändere "sendAndLoad" vorübergehend ab in "send".
.
 
Vielen Dank für diesen Tipp, den er hat meiner Beobachtung nach geholfen:

Code:
Warning: fopen(chat.txt): failed to open stream: Permission denied in /home/www/web169/html/flash/meinscript.php on line 6
resp=fehlgeschlagen

Tja, das heist ja dann wohl, dass meinscript.php keinen zugriff auf chat.txt hat, und jetzt :google: ich mal nach ner Lösung ^^ vieleicht kann einer/du ja schneller antworten als ich die Antwort finde :p

nochmals danke bisher für alles ^^

MfG Skippy
 
Alles klar, Problem gelöst ^^

War nur ne Sache von rechtsklick->Eigenschaften aufm Server :p

Das war ja jetzt mal eher ein Chat ^^
Vielen dank für deine angagierte Hilfe, ich werde wahrscheinlich das alles hier behandelte zu einem kleinen Tutorial zusammen schreiben und dann wieder posten.

MfG Skippy
 
So, und schon kommt die nächste Frage ^^

Ich mache mich jetzt gerade mit PHP vertraut, mein Problem ist auch eigentlich ein PHP problem, da es allerdings nicht so groß ist und eigentlich immernoch am besten hier rein passt, hab ich gedacht ich komm dem Forum am besten entgegen wenn ich dafür dann keinen extra neuen Tread im PHP Forum erstelle, und zwar folgendes:

Code:
<?php

$benutzername = urldecode($_POST["benutzername"]);
$passwort = urldecode($_POST["passwort"]);

if (file_exists($benutzername.".txt")) {
	$profil_oeffnen = @fopen($benutzer_checken.".txt", "r");
	$passwort_checken = @fread($profil_oeffnen, "10");
	echo"resp=$passwort_checken";
} else {
  
    echo "resp=User existiert nicht";
}

?>

Ich weiss, ihr braucht wahrscheinlich die Dateien und die Flash noch dazu und alles am besten, aber falls da nichts auf anhieb falsch ist, schau ich nochmal selbst und dann lad ichs vieleicht hoch, aber vieleicht ist hier schon ein fehler.
Also: in der datei chat.txt steht vorne drin: "zehnbuchst", nur wenn ich jetzt bei Benutzername in Flash "chat" eingebe, zeigt flash die Variable resp bzw. $passwort_checken leer an, also stimmt da wohl irgendwas nicht mit "fread", könnte das sein? Das ganze ist für Testzwecke auch schon online:

>> HIER <<

MfG, Skippy

EDIT:
scheint als wäre es doch keine so gute Idee gewesen das hier zu posten ^^ dann werd ich vieleicht erst nochmal selbst googlen und so und dann vieleicht ins andere Forum posten.
 
Zuletzt bearbeitet:
So,

Ich habe jetzt nochmal weiter recherchiert, und festgestellt, das größte Problem ist jetzt erstmal das PHP und nicht Flash, deswegen würd ich sagen, dieses Thema ist vorerst erledigt ^^ ich ewrde mein ganzes Wissen posten sobald alles fertig ist.

MfG und danke an Datic, Skippy
 
Zurück