Hallo Leute,

hab jetzt schon oft gelesen, dass viele die Möglichkeiten suchen mit Flash und PHP und einer MySQL Datenbank zu kommunizieren, da möchte ich doch hier mal ein kleines Script zu posten, damit das vielleicht jemand gebrauchen kann .

Natürlich ist ActionScript mit im Spiel.
Insgesamt braucht man 3 Dateien.
- film.fla (die fla wo der Flash Film entsteht)
- file.php (zum senden in die Datenbank)
- query.php (zum abfrgen aus der Datenbank)

Benutzt für das ganze habe ich Flash8 Professional und ActionScript2.

gehe jetzt mal von einer lokal installierten Xampp DB aus. Bei anderen muss nur der DB connect halt angepasst werden.

Nun an die film.fla:
Folgendes liegt vor, du hast ein Spiel programmiert, nun lässt du die Zeit stoppen und am Ende soll der Spieler in die Highscoreliste eintragen können, und dies soll natürlich auch gespeichert werden.
Du hast in einem Movieclib einmal nun die Zeit liegen, sowie ein Eingabfeld für den namen, dann belege man einen Button mit folgendem Code:
Code:
_root.absenden_btn.onRelease = function() {
	if (_root.name_txt.text == "") {
		_root.fehler_txt.text = "Bitte einen Namen eingeben";
	} else {
		v = new LoadVars();
		v.spielzeit_txt = _root.differenz/1000;
		v.name_txt = name_txt.text;
		v.sendAndLoad("http://localhost/flash/file.php", v, "POST");
		_root.fehler_txt.text = "Eingaben erfolgreich gespeichert";
		//gotoAndStop("highscore");
	}
};
Als erstes eine leere Funktion für die Ereignisprozedur, da ich von der Zeitleiste aus die Scripte einfüge, und nicht direkt auf den Button lege.
Dann eine Abfrage ob das Feld für den Namen auch gefüllt ist, wenn nicht wird eine anderes Feld mit dem Hinweistext gefüllt.
Danach wird ein neues Object erstellt, wo dann einmal die Spielzeit gespeichert wird und der Name aus dem Inputfeld. Dann verbindung mit dem Script herstellen und noch eine Nachricht für das Senden ausgeben. Soweit nicht so schwer .
Nun werden die Eingaben in PHP mit POST Methode übergeben, und heißen wie im LoadVars() Object benannt (v.variable).
der Ausdruck "_root.differenz/1000" ist nur die varialbe differenz, die ich von der root Zeitleiste hole und durch 1000 teile, da die Zeit bei getTimer() in milliSekunden angegeben wird und doch in die DB die sekunden speichern will.

Nun die file.php Datei:
Für bloß 2 Variablen ist das relativ einfach
Code:
<?php
$zeit = $_POST&#91;'spielzeit_txt'&#93;; 
$name = $_POST&#91;'name_txt'&#93;; 

$verbindung = mysql_connect &#40;'localhost', 'root', ''&#41;;
mysql_select_db&#40;'flash'&#41;;

$eintrag = "INSERT INTO game &#40;id, zeit, name&#41; VALUES &#40;'', '$zeit', '$name'&#41;";
$eintragen = mysql_query&#40;$eintrag&#41;;


?>
Zu begin natürlich die Variablen aus Flash auffangen, und einfach in die Tabelle "flash" eintragen, da nur 2 Felder auch nur ein kleiner sql Statement .


So, nun? Nun sind die Datn schonmal in der Datenbank. Aber jetzt sollen die auch wieder zurück nach Flash???

Das geht so:
Dort wo man nun die Daten wieder laden möchte, z. B. in einem neuen Movieclib oder ähnliches diesen Code anlegen:
Code:
stop&#40;&#41;;
var datenVars&#58;LoadVars = new LoadVars&#40;&#41;;
datenVars.load&#40;"http&#58;//localhost/flash/query.php"&#41;;
datenVars.onLoad = function&#40;&#41; &#123;
	zeit0_txt.text = this.zeit0;
	name0_txt.text = this.name0;
	zeit1_txt.text = this.zeit1;
	name1_txt.text = this.name1;
	zeit2_txt.text = this.zeit2;
	name2_txt.text = this.name2;
	zeit3_txt.text = this.zeit3;
	name3_txt.text = this.name3;
	zeit4_txt.text = this.zeit4;
	name4_txt.text = this.name4;
	//trace&#40;this.zeit0 + this.name0 + "\n" + this.zeit1 + this.name1&#41;;
&#125;;
Zum begin, bei mir immer ein stop(); .
Wie bereits bekannt wieder ein LoadVars Object erstellen, dann aus diesem die query.php (Inhalt folgt gleich) laden, der Inhalt bei mir ist nun eine Schleife die 5 Einträge zurück gibt, die so ausehen:
&zeit0=$zeit0&name0=$name0&zeit1=$zeit1&name1=$nam e1... usw
hier konnte ich nun einfach 5 Dynamische Textfelder generieren und mit der Option .text die Werte zuweisen.
Das "&" vor den Variablen ist eine Art Trennungszeichen für Flash, damit kann es die Werte auseinandere halten.
Am Ende ein auskommentiertes trace um zu sehen ob die ersten beiden Einträge richtig eingelesen werden, hätte man auch ne schleife machen können.

Der Inhalt der query.php:
Eine einfach Abfrage an die Datenbank:
Code:
<?php
$verbindung = mysql_connect &#40;'localhost', 'root', ''&#41;;

$qr=mysql_db_query&#40;"flash","SELECT zeit, name FROM game ORDER BY zeit ASC"&#41;;
$nrows=mysql_num_rows&#40;$qr&#41;;

$nrows=5;
for &#40;$i=0; $i<$nrows; $i++&#41;&#123;
  $row = mysql_fetch_array&#40;$qr&#41;;
  echo "&zeit".$i."=".$row&#91;'zeit'&#93;;
  echo "&name".$i."=".$row&#91;'name'&#93;;
&#125;
?>
Hier nur die 5 einträge, die ausgelesen werden mit der Sortierung, man kann die query.php einfach im Browser aufrufen und sehen was dann dabei rauskommt, ob das Format richtig ist für Flash.

So ist das schon eine schnelle Möglichkeit daten von Flash in eine DB zu schreiben und zurück zu holen.

Nun kann man das ganze noch durch Sicherheitsabfragen erweitern, beim Eintragen in die DB oder zum senden von Flash an ein Script finde ich es persönlich besser in Flash die Überprüfung per ActionScript durchzuführen, und nicht erst von Flash ans Script senden lassen, und dort das Script überprüfen lassen, aber das muss jeder selber wissen .
Dann kann man das ganze auch noch schöner machen, die Abfrage sowie Eintragung in eine PHP Datei und der URL noch ne Variable mitschicken was er machen soll, aber habs nun erstmal so dargestellt.

Hoffe, dass es mal nützlich ist...

soo, haben leider schon 5 Uhr, wollte jetzt noch ne fla + die PHP Dateien dran hängen, aber jezt grad keine zeit mehr die fla zu erstellen, muss um 6 in Kreuztal sein, also dann folgt die heute abend noch .

Viel Spaß mit dem Script!

MfG

Daniel
Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!