|
|
 |
 |
|
TP Portal > Flash > Gewinnspiel – Interaktion zwischen Flash – PHP und MySQL
|
|
|
Bei diesem Beispiel handelt es sich um einen Adventskalender, in welchem unter den 24 "Kalendertürchen" je nach Glück ein bis drei Gewinne versteckt sind. Der Sitebesucher muss sich mit einer gültigen E-Mail-Adresse und einem Namen anmelden. Jede E-Mail-Adresse wird via PHP in einer DB gespeichert. Jeder Spieler kann pro Tag nur einmal sein Glück versuchen. Ist die Adresse noch nicht bekannt oder wurde die Adresse am entsprechenden Tag noch nicht aufgerufen, so beginnt das Adventskalender-Gewinnspiel. Nun kann der Spieler durch Klick auf die Felder 1-24 versuchen, drei Gewinne zu ergattern. Nach dem dritten Klick werden ihm die eigentlichen Gewinnzahlen, ein "Sorry, leider nix gewonnen" oder sein Gewinn mit der Trefferanzahl ausgegeben. Die 24 Zahlen werden bei jedem Aufruf zufällig angeordnet. Auch werden die drei Gewinnzahlen jedes Mal über PHP neu ermittelt. Im Falle eines Gewinns bekommt der Spieler eine Benachrichtigung an seine angegebene E-Mail-Adresse zugesandt.
Beispiel
- Gewinnspiel.fla --> Die Flash-Datei
- anmelden.php --> sendet die Anmeldung aus der Gewinnspiel.swf (Name und E-Mail Adresse an die MySQL DB)
- var.inc.php --> enthält Variablen für die PHP-Dateien
- gewinnsenden.php --> Versendet im Falle eines Gewinns eine Nachricht per E-Mail an Spieler und Betreiber
- zufall.php --> ermittelt die Gewinnzahlen für die Gewinnspiel.swf
- Tabelle_anlegen.txt --> beinhaltet Struktur der benötigten MySQL Tabelle
Alle benötigten Dateien zum download
- Flash (wer hätte es gedacht!) ab Version MX 04.
- Laufender lokaler Server mit PHP und MySQL zum Testen (ich empfehle XAMPP von www.apachefriends.org) Einfache Installation und sehr zuverlässig. Am besten die Dienste so einrichten, dass Sie immer laufen.
- Webspace mit PHP und MySQL, zum Online-Anbieten
- Grundkenntnisse in ActionScript, dem Umgang von MovieClips, dem Zeichnen in Flash, Umgang mit Ebenen, Schlüsselbildern und deren Bezeichnungen.
- Grundkenntnisse in PHP und MySQL
- Geduld und der Wille zum Lernen
Auf die Installation von PHP und MySQL auf dem lokalen System wird nicht näher eingegangen. Da haben schon dutzend andere genug ins Web eingemeißelt. Hauptzeitleiste 1er Frame: Hier befindet sich unser kleines Formular zur Anmeldung am Gewinnspiel. Elemente in diesem ersten Frame sind:
- Ein Textfeld mit Instanznamen "einleitung_txt" zur Begrüßung und einer kleinen Einleitung.
- Ein Eingabe-Textfeld mit Instanznamen "nachname" und Variablen "nachnametext" zur Eingabe des Namens des Spielers.
- Ein Eingabe-Textfeld mit Instanznamen "email" und Variablen "emailtext" zur Eingabe der E-Mail Adresse des Spielers.
- Ein dynamisches Textfeld mit der Variablen "meldung" zur Ausgabe der Überprüfung von Name und E-Mail Adresse.
- MovieClip mit Instanznamen "Ausgabe_mc". Dieser beinhaltet ein dynamisches Textfeld mit der Variablen "ausgabe". Hier kontrollieren wir den Anmeldevorgang.
- Ein Button mit Instanznamen "senden_btn" zum Senden der Variablen aus dem Formular an die "anmelden.php".
actionscript //Film anhalten
stop();
//Codepage des Systems aktivieren, um Probleme mit Umlauten zu vermeiden
System.useCodepage = true;
//steuert die automatische Größenänderung und Ausrichtung von Textfeldern
einleitung_txt.autoSize = true;
//Beim Laden(Aktualisieren) der swf wird gesendet auf 0 gesetzt. Diese kommt von der anmelden.php
this.onLoad = function() {
_root.gesendet = 0;
//_root.gesendetkopie = 0;
};
//Tabulatoren-Reihenfolge für die beiden Textfelder. Wegen der Benutzerfreundlichkeit
nachname.tabIndex = 1;
email.tabIndex = 2;
//Array für Textfelder erzeugen. Nicht zwingend notwendig, macht aber bei größeren Formularen durchaus Sinn
textfeld = new Array();
textfeld[0] = "nachname";
textfeld[1] = "email";
for (i=0; i<=textfeld.length; i++) {
this[textfeld[i]].text = "";
}
//Funktionen für den Anmelde-Button
senden_btn.onRelease = function() {
//Wenn Textfeld nachname leer ist, dann Meldung
if (nachnametext == "") {
meldung = "Bitte Namen eingeben";
}
//Wenn Textfeld email kein @ oder einen Punkt enthält, , dann Meldung
if (emailtext.indexOf("@") == -1 || emailtext.indexOf(".") == -1) {
meldung = "Keine gültige E-Mail angegeben";
}
//Wenn Angaben OK sind
if (emailtext.indexOf("@") != -1 && emailtext.indexOf(".") != -1 && nachnametext != "") {
//Textfeld meldung wieder leeren
meldung = "";
//Warten bis Anmeldevorgang erledigt ist
Ausgabe_mc.ausgabe = "Bitte warten, Anmeldung wird gesendet";
//Variablen der Anmeldung an anmelden.php senden
loadVariablesNum("anmelden.php?"+new Date().getTime(), 0, "POST");
}
};
//Funktion für einen eventuellen Zurücksetzt-Button
Loeschen_btn.onRelease = function() {
nachname.text = "";
email.text = "";
};
//------------------------------------------------------------------
//Ausgabe_mc wieder leeren, sollte sich der User verschrieben haben
this.onEnterFrame = function() {
//Wenn auf eines der beiden Textfelder erneut geklickt wird
nachname.onSetFocus = function() {
Ausgabe_mc.ausgabe = "";
};
email.onSetFocus = function() {
Ausgabe_mc.ausgabe = "";
};
};Nachdem die Felder in der swf-Datei ausgefüllt wurden, werden die Variablen "nachnametext" und "emailtext" an die Datei "anmelden.php" gesendet. php <?php
// Datenbank Variablen
$dbserver = "localhost"; //Servername
$dbname = "Datenbank";//Datenbenkname
$dbuser = "admin";//Benutzername
$dbpass = "password"; //Passwort
$ip = $REMOTE_ADDR; //IP-Adresse
$browser=$HTTP_USER_AGENT;//Verwendeter Browser
//Datum ermitteln
$dat=date("d.m.Y H:i");
$tag=date("d");
$monat=date("m");
$jahr=date("Y");
$sessionid=session_id();
$tabelle = "tutorialgewinn"; //Name der Tabelle
//Verbindung zur Datenbank
$db = mysql_connect($dbserver, $dbuser, $dbpass);
if(!$db){die ("Konnte keine Verbindung zur Datenbank herstellen");}
mysql_select_db("$dbname",$db);
?>php <?php
//Es wird eine neue Session gestartet
session_start();
//Dateien einlesen
include('var.inc.php');
//Verbindung zur Datenbank
$db = mysql_connect($dbserver, $dbuser, $dbpass);
//Hier kommen die Variablen aus der swf-Datei an
//Leerzeichen am Anfang der Variablen entfernen
$nachnametext=ltrim($nachnametext);
$emailtext=ltrim($emailtext);
//Wegen der Sicherheit entfernen wir HTML-Tags aus den Textfeldern der swf-Datei
$nachnametext=strip_tags($nachnametext);
$emailtext=strip_tags($emailtext);
//Variablen jahr mont tag kommen aus der var.inc.php
//Jeder Besucher soll nur einmal pro Tag teilnehmen dürfen, deahalb:
//Generierung der Variablen $schongespielt zum Abfragen
$schongespielt = $jahr."-".$monat."-".$tag;
echo "\$schongespielt = $schongespielt <br>";
//Überprüfung ob E-Mail Adresse am aktuellen Tag schon in der DB steht#####################################
$sql="Select * FROM $tabelle WHERE email='$emailtext' AND spieltag='$schongespielt' ";
$istda=mysql_query($sql, $db);
$vorhanden = mysql_num_rows($istda);
$zeile=mysql_fetch_array($istda, MYSQL_ASSOC);
//Ergibt vorhanden mehr als 0 Treffer, wurde mit der angegebenen E-Mail Adresse schon gespielt
if($vorhanden!=0)
{//Auf 1
echo " <b>Sie haben heute schon Ihr Glück probiert.<br>Bitte versuchen Sie es morgen noch einmal.</b><br>";
//Den Versuch der mehrmaligen Anmeldung trotzdem in DB protokollieren, dies ist nicht unbedingt erforderlich
$sqlversuch="INSERT INTO $tabelle (session, nachname, email,spieltag, eingetragen) VALUES ('$sessionid', '$nachnametext','$emailtext',NOW(), NOW())";
if(@mysql_query($sqlversuch, $db))
{//Wenn Eintrag erfolgreich
echo " Unnoetiger Versuch erfolgreich in DB gespeichert<br>";
}
//Variable für Flashausgabe generieren und auf 1 setzen. Die Variable $vorhanden finden wir gleich in der fla auf dem MC "Ausgabe_mc" wieder
$vorhanden=1;
echo "&vorhanden=$vorhanden&";
exit();
}//Zu 1//Ende if($vorhanden)
else//Wenn adresse noch nicht am aktuellen Tag in der DB, dann eintragen
{//Auf 2
$emailadresse=$emailtext;
//Ausgabe zum Testen
echo "&emailadresse=$emailadresse&";
//Eintrag in DB###########################################################
$sql="INSERT INTO $tabelle (session, nachname, email,spieltag, eingetragen)VALUES
('$sessionid', '$nachnametext','$emailtext',NOW(), NOW())";
if(@mysql_query($sql, $db))//Wenn Eintrag erfolgreich
{
echo " Eintrag erfolgreich";
$gesendet=1;
// Wieder für Flash eine Variable $gesendet erzeugen, diese sorgt dafür, dass unser Movie zum Spiel weiterläuft.
echo "&gesendet=$gesendet&";
}//Ende if(@mysql_query($sql, $db))//Wenn Eintrag erfolgreich
// Wenn der Eintrag nicht erfolgreich sein sollte
else{
//Testausgabe
echo "da ist was schief gegangen";
}
}
?>Es wurden die Variablen "$nachnametext" und "$emailtext" durch die Funktion loadVariablesNum("anmelden.php?"+new Date().getTime(), 0, "POST"); des Buttons "senden_btn" an die Datei "anmelden.php" gesendet. Nach einer Überprüfung, ob mit der gesendeten E-Mail-Adresse am aktuellen Spieltag nicht schon gespielt wurde, wird diese mit dem Namen des Users in die Tabelle "tutorialgewinn" der Datenbank eingetragen.
Für unser Flash-Movie werden die Variablen "$vorhanden" und "$gesendet" generiert und zum weiteren Verlauf an dieses gesendet.
Mit diesen beiden Variablen werden wir wie folgt weiterarbeiten:
Zurück im ersten Frame der fla wartet hier unser MC "Ausgabe_mc" mit den Ergebnissen der beiden Variablen. actionscript onClipEvent (enterFrame) {
//Variable vorhanden empfangen und
//Wenn mit der E-Mail Adresse am aktuellen Tag schon gespielt wurde, Meldung ausgeben
if (_root.vorhanden == 1) {
ausgabe = "<b>Mit dieser E-Mail Adresse haben Sie heute schon Ihr Glück probiert. Bitte versuchen Sie es morgen noch einmal.</b>";
//Anschließend Variable für eventuelle neue Versuche wieder auf Null setzten
_root.vorhanden = 0;
}
//gesendet ist die Variable, die PHP sendet, das
//der Eintrag in der DB erfolgreich war
if (_root.gesendet == 1) {
//Diese Ausgabe ist eine Variante, in unserem Fall aber nicht sichtbar
ausgabe = "Ihre Anmeldung wurde an das System weitergeleitet.";
_root.gesendet = 0;
this._parent.nachname.text = "";
this._parent.email.text = "";
//da es zum Spielen gleich weiter geht
this._parent.gotoAndPlay(2);
}
}Wir befinden uns nun im dritten Frame der fla. Hier finden wir nun unser eigentliches Gewinnspiel.
Auf der Ebene "Zahlen" befinden sich unsere 24 MCs, die wie folgt erstellt werden:
1. eine Nummer in ein Textfeld schreiben.
2. F8 drücken und in einen MC umwandeln, Name btn1
3. Instanznamen vergeben, hier " btn1"
4. Doppelklick auf "btn1", und die Ebene mit der Zahl der Ordnung halber in "zahlen" umbenennen. Nun in Frame 2 von MC "btn1" mit F6 ein weiteres Schlüssesbild einfügen und die Zahl einfärben. Dies geschieht aber nur zur besseren Optik, nicht unbedingt notwendig.
5. Zurück im ersten Frame, legen wir eine Ebene "Bild" an und ziehen diese unter Ebene "Zahlen". Hier fügen wir nun in Frame 2 und 3 Bilder für Niete oder Treffer ein.
6. Schließlich benennen wir noch eine neue oberste Ebene mit AS, setzen hier in Frame 1 bis 3 je ein Schlüsselbild und vergeben jeweils eine Bildbezeichnung. Für Frame 1 "start", für 2 "nix" und für 3 "treffer". Alle drei Schlüsselbilder enthalten noch eine "stop()" Anweisung.
Den MC "btn1" duplizieren wir in der Bibliothek nun 23 mal, nennen diese fortlaufend btn2…btn24, schreiben entsprechende Zahlen in die MCs und ziehen alle in der Hauptzeitleiste in Frame 3 auf die Ebene "Zahlen". Nun noch entsprechend der Nummern die Instanznamen vergeben "btn1" .. "btn24".
Nun schreiben wir auf jeden der 24 MCs noch folgende kurze Anweisung: actionscript // Beispielcode für MC "btn24"
on (release) {
_root.zahl = 24;
}Natürlich kann man die Erzeugung auch mit createEmptyMovieClip() machen, würde aber hier jetzt zu weit führen. Außerdem handelt es sich hier ja um eine Datei, die sich vom Aufbau her so schnell nicht ändert (zumindest so lange, wie es Adventskalender von 1 bis 24 gibt), von daher nicht unbedingt dynamisch sein muss.
Weitere Elemente im dritten Frame der Hauptzeitleiste sind:
- MovieClip mit Instanznamen "KeinGewinn_mc" --> zum Anzeigen, wenn kein Gewinn geklickt wurde.
- MovieClip mit Instanznamen "controler_mc" --> dieser unterscheidet zwischen gewonnen und nicht gewonnen.
- 1 Textfeld mit Instanznamen "okgeladen" --> zur Kontrolle der geladenen Zufallszahlen (Gewinnzahlen)
- MovieClip mit Instanznamen "versuch_mc" --> dieser Zählt die Klicks auf unsere 24 Mcs
- MovieClip mit Instanznamen "treffer_mc" --> zählt die eventuell richtigen Treffer.
- MovieClip mit Instanznamen "ergebnis_mc" --> gibt nach Beendigung die Zahlen aus, die zum Erfolg geführt hätten.
- MovieClip mit Instanznamen "mctreffertext_mc" --> zum Anzeigen/Zwischenspeichern der aktuellen Anzahl von Treffern.
- Drei Textfelder "zahl1", "zahl2" und "zahl3" zum Testen unserer Datei. Diese nicht mit veröffentlichen, sonst gibt es 100% Gewinne.
Weiterhin haben wir in der Bibliothek einen MC "Glueckwunsch_mc", der im Glücksfall mittels this._parent.attachMovie("Glueckwunsch_mc", "Glueckwunsch_mc2",3); auf die Bühne gezaubert wird.
Angekommen in Frame 3, wird mittels lesen.load("zufall.php?"+new Date().getTime(), this); die Datei "zufall.php" aufgerufen, um die drei Gewinnzahlen zu ermitteln: php <?php
//Session fortführen
session_start();
//Dateien einlesen
include('var.inc.php');
//Verbindung zur Datenbank
$db = mysql_connect($dbserver, $dbuser, $dbpass);
//Neuestes Login ermitteln
//Nötig, da ein User sich innerhalb einer Sitzung mit meheren E-Mail Adressen anmelden kann.
$sqlneu="Select * FROM $tabelle WHERE session='$sessionid' ORDER BY id DESC LIMIT 0,1 ";
$istneu=mysql_query($sqlneu, $db);
$zeileneu=mysql_fetch_array($istneu, MYSQL_ASSOC);
//Überprüfung der drei Gewinnzahlen an Hand der Aktuellen Session, ob schon mal gespielt wurde
//damit keine der drei vorherigen Zufallszahlen beim nächsten Aufruf wieder gezogen wird.
//Dies ist bei nur 24 Zahlen sonst durchaus schnell möglich
$sql="Select * FROM $tabelle WHERE session='$sessionid' AND z1>0 ORDER BY id DESC LIMIT 0,1 ";
$istda=mysql_query($sql, $db);
$zeile=mysql_fetch_array($istda, MYSQL_ASSOC);
//Wenn aktuell schon Zahlen gezogen wurden
if($zeile[z1] > 0){
// alte Zahlen ermitteln
$sd1 = $zeile[z1];
$sd2 = $zeile[z2];
$sd3 = $zeile[z3];
//Array mit den alten Zahlen füttern
$array1 = array($sd1, $sd2, $sd3);
//Hier werden neue Gewinnzahlen aus einem Array ermittelt
$array2 = range(1,24);
shuffle($array2);
//Eventuelle Unterschiede der beiden Arrays vergleichen
$result = array_diff ($array2, $array1);
//Weiteres Array mit den neuen Gewinnzahlen füttern
$array3=array_merge($result);
//Variablen mit den drei Gewinnzahlen erstellen
$gz1 = $array3[0];
$gz2 = $array3[1];
$gz3 = $array3[2];
//Gewinnzahlen in den aktuellen Datensatz der DB schreiben
$sqleintrag="UPDATE $tabelle SET z1='$gz1', z2='$gz2', z3='$gz3' WHERE id='$zeileneu[id]' ";
if(@mysql_query($sqleintrag, $db)){
echo "Eintrag erfolgreich<br>";
}
}//Ende => if($zeile[z1] == 0)
//Wenn noch keine Zahlen zuvor gezogen wurden
else{
//Dann einfach ein Array erzeugen
$array = range(1,24);
shuffle($array);
$gz1 = $array[0];
$gz2 = $array[1];
$gz3 = $array[2];
//Gewinnzahlen in den aktuellen Datensatz der DB schreiben
$sqleintrag="UPDATE $tabelle SET z1='$gz1', z2='$gz2', z3='$gz3' WHERE id='$zeileneu[id]' ";
if(@mysql_query($sqleintrag, $db)){
echo "Eintrag erfolgreich";
}
}
//Variablen für Flash generieren , <br>-Tag ist nur zum Testen
echo "&gz1=$gz1& <br>";
echo "&gz2=$gz2& <br>";
echo "&gz3=$gz3& <br>";
?>Nun werden die drei Gewinnzahlen von unserer fla-Datei in Frame 3 der Hauptzeitleiste empfangen: actionscript //Film anhalten
stop();
//Codepage des Systems aktivieren, um Probleme mit Umlauten zu vermeiden
System.useCodepage = true;
//GewinnZahlen ermitteln
lesen = new LoadVars();
//Die Datei zufall.php beauftragen, neue Gewinnzahlen zu ermitteln
lesen.load("zufall.php?"+new Date().getTime(), this);
lesen.onLoad = function(geladen) {
//Kontrolle des Ladevorgangs der Variablen
if (geladen) {
okgeladen.htmlText = "Viel Glück";
//Die drei Gewinnzahlen zum Späteren anzeigen in Textfeld "gz" innerhalb des MC "ergebnis_mc" ausgeben.
zahl1.text = lesen.gz1;
zahl2.text = lesen.gz2;
zahl3.text = lesen.gz3;
ergebnis_mc.gz.text = "Gewinnzahlen waren:\n"+lesen.gz1+" - "+lesen.gz2+" - "+lesen.gz3;
} else {
//Falls bei der Verbindung etwas nicht schief gelaufen ist
okgeladen.htmlText = "<b>Fehler aufgetreten!</b>";
}
};
// Prototype Array-Suche
var tueren:Array = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24);
//Für die zufällige Anordnung der 24 MC's auf der Bühne
Array.prototype.randomize = function() {
return this.sort(function (a, b) {
return (Math.floor(Math.random()*2) == 0) ? 1 : -1;
});
};
tueren.randomize();
//Platzierung der MC's auf der Bühne
mc1 = "btn"+tueren[0];
this[mc1]._x = 0;
this[mc1]._y = 0;
mc2 = "btn"+tueren[1];
this[mc2]._x = 95;
this[mc2]._y = 0;
mc3 = "btn"+tueren[2];
this[mc3]._x = 190;
this[mc3]._y = 0;
mc4 = "btn"+tueren[3];
this[mc4]._x = 285;
this[mc4]._y = 0;
mc5 = "btn"+tueren[4];
this[mc5]._x = 0;
this[mc5]._y = 65;
mc6 = "btn"+tueren[5];
this[mc6]._x = 95;
this[mc6]._y = 65;
mc7 = "btn"+tueren[6];
this[mc7]._x = 190;
this[mc7]._y = 65;
mc8 = "btn"+tueren[7];
this[mc8]._x = 285;
this[mc8]._y = 65;
mc9 = "btn"+tueren[8];
this[mc9]._x = 0;
this[mc9]._y = 130;
mc10 = "btn"+tueren[9];
this[mc10]._x = 95;
this[mc10]._y = 130;
mc11 = "btn"+tueren[10];
this[mc11]._x = 190;
this[mc11]._y = 130;
mc12 = "btn"+tueren[11];
this[mc12]._x = 285;
this[mc12]._y = 130;
mc13 = "btn"+tueren[12];
this[mc13]._x = 0;
this[mc13]._y = 195;
mc14 = "btn"+tueren[13];
this[mc14]._x = 95;
this[mc14]._y = 195;
mc15 = "btn"+tueren[14];
this[mc15]._x = 190;
this[mc15]._y = 195;
mc16 = "btn"+tueren[15];
this[mc16]._x = 285;
this[mc16]._y = 195;
mc17 = "btn"+tueren[16];
this[mc17]._x = 0;
this[mc17]._y = 260;
mc18 = "btn"+tueren[17];
this[mc18]._x = 95;
this[mc18]._y = 260;
mc19 = "btn"+tueren[18];
this[mc19]._x = 190;
this[mc19]._y = 260;
mc20 = "btn"+tueren[19];
this[mc20]._x = 285;
this[mc20]._y = 260;
mc21 = "btn"+tueren[20];
this[mc21]._x = 0;
this[mc21]._y = 325;
mc22 = "btn"+tueren[21];
this[mc22]._x = 95;
this[mc22]._y = 325;
mc23 = "btn"+tueren[22];
this[mc23]._x = 190;
this[mc23]._y = 325;
mc24 = "btn"+tueren[23];
this[mc24]._x = 285;
this[mc24]._y = 325;
_root.zahl = "";
_root.versuch = 0;
_root.treffer = 0;
//Jedem der 24 Button Funktionen hinzufügen
this.onEnterFrame = function() {
for (i=1; i<=24; i++) {
this["btn"+i].onRelease = function() {
//den Zaehler erhöhen
_root.versuch++;
//Vergleichen ob die aktuell gedrückte Zahl mit einer Zahl aus zufall.php übereinstimmt
if (lesen.gz1 == _root.zahl || lesen.gz2 == _root.zahl || lesen.gz3 == _root.zahl) {
//Bei Rrfolg, dies im btnXX MC durch Sprung auf Bildbezeichner anzeigen
this.gotoAndStop("treffer");
//Anzahl der Gesamttreffer erhöhen
_root.treffer++;
//Anzahl der Treffer in Textfeld ausgeben
mctreffertext_mc.text = _root.treffer;
} else {
//Bei Niete innerhalb des MC's auf Schlüsselbild mit Bezeichner "nix" springen
this.gotoAndStop("nix");
}
};
}
//Wenn drei mal gehlickt wurde
if (_root.versuch == 3) {
//den bisher unsichtbaren MC durch _y Änderung auf der Bühne anzeigen
ergebnis_mc._y = 440;
//Meldung ausgeben
okgeladen.htmlText = "<b>Spiel beendet</b>";
//Und ein weiterspielen verhindern
for (i=1; i<=24; i++) {
this["btn"+i].enabled = false;
}
delete this.onEnterFrame;
}
};Die geklickten Versuche zählen und ausgeben: actionscript onClipEvent (enterFrame) {
versuch = "Versuche: "+_root.versuch;
}actionscript onClipEvent (enterFrame) {
treffer = "Gewonnene Tassen: "+_root.treffer;
}Nun die Kontrolle, ob mindestens ein Treffer dabei war oder alle Versuche nichts ergaben: actionscript onClipEvent (load) {
//Variable als Schalter setzen, um schon vorhandenen Glückwunsch MC zu aktualisieren
_root.movieholen = 0;
}
onClipEvent (enterFrame) {
//Wenn mindestens ein Treffer dabei war und alle 3 Versuche verbraucht sind
if (_root.treffer>0 && _root.versuch == 3) {
if (_root.movieholen == 0) {
//Glückwunsch MC aus der Bibliothek auf die Bühnen holen
this._parent.attachMovie("Glueckwunsch_mc", "Glueckwunsch_mc2", 3);
//und positionieren
this._parent.Glueckwunsch_mc2._x = 0;
this._parent.Glueckwunsch_mc2._y = 0;
//Schalter auf bestzt legen
_root.movieholen = 1;
}
}
//Wenn kein Treffer erlangt wurde und alle drei Versuche vorbei sind, dann den MC KeinGewinn auf der Bühne durch verschieben der _x-Position anzeigen
//Dies würde natürlich auch mit attachMovie wie oben gehen
if (_root.treffer == 0 && _root.versuch == 3) {
this._parent.KeinGewinn_mc._x = 0;
}
}Im Falle eines Gewinns geht es wie folgt weiter:
Der MC "Glueckwunsch_mc" ist nun auf der Bühne und hat folgendes Script im ersten Frame seiner Zeitleiste: actionscript trefferanzahl = _root.treffer;
//Die Anzahl der Treffer wird an die gewinnsenden.php gesendet
loadVariablesNum("gewinnsenden.php?"+new Date().getTime(), 0, "POST");Nun kommt die Datei "gewinnsenden.php" ins Spiel. Hier wird die Bestätigungsmail an den User gesendet und die Anzahl der Treffer in der DB gespeichert. Die Session ID bekommt der User als Code-ID in der Mail mitgeteilt, damit wir diese nach Erhalt einer Antwortmail mit dem Eintrag in der DB vergleichen können. php <?php
//Session fortführen
session_start();
//Dateien einlesen
include('var.inc.php');
//Verbindung zur Datenbank
$db = mysql_connect($dbserver, $dbuser, $dbpass);
//Aktuellen Spieler aus der Tabelle holen#####################################
$sql="Select * FROM $tabelle WHERE session='$sessionid' ORDER BY id DESC LIMIT 0,1 ";
$istda=mysql_query($sql, $db);
$vorhanden = mysql_num_rows($istda);
$zeile=mysql_fetch_array($istda, MYSQL_ASSOC);
if($vorhanden!=0)
{//Auf 1
//Zum Testen Ausgabe
echo " <b>Hier die E-Mail Adresse<br>$zeile[email]</b><br>";
//Anzahl der gewonnenen Tassen in DB eintragen, hier die Variable trefferanzahl aus dem Glueckwunsch_MC
$sqleintrag="UPDATE $tabelle SET treffer='$trefferanzahl' WHERE id='$zeile[id]' ";
if(@mysql_query($sqleintrag, $db)){
echo "Anzahl gewonnener Tassen in DB gespeichert";
//Variable gewinnmail erzeugen und auf 1 setzen
$gewinnmail=1;
//Variable für Flashausgabe generieren
echo "&gewinnmail=$gewinnmail&";
//Weitere Daten aus der Datenbank holen
$emailadresse=$zeile[email];
$teilnehmer=$zeile[nachname];
$sitzung = $zeile[session];
$anzahl = $trefferanzahl;
//Variable für Flashausgabe generieren
echo "&anzahl=$anzahl&";
//Eigene Mail Adresse
$mymail="info@domain.de";
$date=date("d.m.Y H:i");
$betreff="Tassen-Advent-Gewinn ";
//Versand der Mail an den User
if(@mail($emailadresse, "$betreff","
Sehr geehrte(r) Frau/Herr $teilnehmer,
herzlichen Glückwunsch.
Sie haben am $date Uhr beim Adventskalender von domain.de gewonnen.
Anzahl gewonnener Tassen: $anzahl Stück.
code: $sitzung
Diesen Code bitte auf keinen Fall entfernen, oder ändern. Eine Gewinnauszahlung ist sonst nicht möglich.
***********
Bitte senden Sie diese E-Mail an uns mit Ihrer Anschrift und Ihrem Namen zurück,
damit wir Ihnen Ihre Tassen auch zusenden können.
***********
Wir wünschen Ihnen noch eine angenehme Weihnachtszeit und verbleiben
mit freundlichen Grüßen
Ihr Team vom Tassen-Gewinn.
http://www.domain.de
info@domain.de
","From:Team Tassen<$mymail>")){
//Wenn Mail erfolgreich gesendet, dann Vars für Flash generieren
echo "&emailadresse=$emailadresse&";
//echo "&anzahl=$anzahl&";
//Ende Mail ###########
}
else{
echo "leider ist ein Fehler beim Mailversand-aufgetreten";
}
}
exit();
}//Zu 1//Ende if($vorhanden)
?>Als Letztes wollen wir in unserer swf ja noch eine Ausgabe für den glücklichen Gewinner erzeugen. Hier kommen wir wieder zu unserem "Glueckwunsch_mc". In diesem ist ein weiterer MC namens "gewinnKontrolle_mc". Dieser reagiert, sobald er die oben erzeugte Variable "gewinnmail" mit dem Wert 1 erhalten hat. Ein in ihm befindliches Textfeld sorgt für die entsprechende Ausgabe. actionscript onClipEvent (enterFrame) {
//Die aus gewinnsenden.php erhaltene Variable
if (_root.gewinnmail == 1) {
//Ausgabe im Textfeld mail_txt
this.mail_txt.htmlText = "<b>Herzlichen Glückwunsch!<br>Sie haben gewonnen!</b><br>Gewonnene Tassen: "+ _root.anzahl+" Stück<br><br>Sie haben an <b>"+_root.emailadresse+"</b> eine Gewinnmitteilung erhalten. Bitte senden Sie diese mit Ihrer Anschrift und Ihrem Namen an uns zurück, damit wir Ihnen Ihren Gewinn auch zusenden können.<br><br>Vielen Dank fürs Mitspielen und noch viel Spaß auf Domain.de";
// Zur nächsten Aktualisierung wieder auf 0 setzen
_root.gewinnmail = 0;
}
}Das war's. Unser kleines Gewinnspiel sollte nun eigentlich funktionieren. Natürlich kann man durch Optimierungen in den AS- und PHP-Scripten noch einiges an Code kürzen, aber dies ist eine andere Geschichte …
Autor: Stephan Funke (www.funkeundfunke.de)
|
|
|
 |
|