Aktuelles
Startseite
TP Wettbewerbe
Sitemap
Service
Hilfe-Forum
Kolumnen
Linktipps
Buchrezensionen
Traum-Team
Newsletter
Traumquelle
Dreamweaver
Fireworks
Photoshop
Flash
Traum-Start
gimp
GoLive
php / Apache
Sonstige
Grundlagen
Usability
CSS
Apple / Mac
3D
Intern
TP-Sponsor
TP SHOP
Bild Galerie
TP Wallpapers
Forum-Archiv
Link zu uns
Impressum
Zurück  
TP Portal > Flash > Gewinnspiel – Interaktion zwischen Flash – PHP und MySQL

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.

Kurzbeschreibung der Funktion

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

Verwendete Dateien:

  • 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

 

Voraussetzungen:

  • 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.

Die Datei "Gewinnspiel.fla"

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-Code im ersten Frame der Hauptzeitleiste:

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-Code der Datei "var.inc.php":

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-Code der Datei "anmelden.php":

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-Code auf dem MC "Ausgabe_mc" :

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-Code für die 24 MC's "btn1" .. "btn24" :

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-Code der Datei "zufall.php":

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-Code im dritten Frame der Hauptzeitleiste:

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-Code auf dem MC "versuch_mc" :

actionscript
onClipEvent (enterFrame) { 
    versuch = "Versuche: "+_root.versuch; 
}

ActionScript-Code auf dem MC " treffer_mc" :

actionscript
onClipEvent (enterFrame) {
treffer = "Gewonnene Tassen: "+_root.treffer;
}

Nun die Kontrolle, ob mindestens ein Treffer dabei war oder alle Versuche nichts ergaben:

ActionScript-Code auf dem MC "controler_mc" :

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-Code im MC "Glueckwunsch_mc" :

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-Code der Datei "gewinnsenden.php":

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-Code auf dem MC "gewinnKontrolle_mc" :

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)

Buchrezension

Coverimage
AJAX Hacks
Dynamische Webseiten mit AJAX programmieren - dieses Handbuch bietet einen praktischen Einblick.
[mehr]
Gimahhot - Shopping


Ferienwohnungen
TP-Partner
Webmasterpro
Eventagentur Hamburg
it-rechtsinfo.de
Designguide
Getreidemühlen
sk-typo3
d. Webdesigner
PSD Tutorials

Hier könnte Ihre Werbung stehen

 >> INFO << 

\ Startseite | Forum | Impressum | nach oben | Seite zurück /