Sujets sur : php
Cours ActionScript 3 ‘php’
La technique, en 2 étapes, pour créer un formulaire email pour AWeber avec Flash
Commentaires fermés sur La technique, en 2 étapes, pour créer un formulaire email pour AWeber avec Flash

La série des réponses à vos questions continuent avec ce nouveau tuto flash.
Un développeur m’a demandé comment envoyer, simplement, des informations depuis flash à un script php, perl…
J’en ai donc profité pour créer un formulaire flash pour le service de mailing list AWeber.
Voici ce que vous allez mettre en pratique suite à cette formation Flash :
- La technique pour créer un formulaire AWeber avec Flash.
- Comment envoyer des informations, avec une requête POST, à un script php, perl.
- L’astuce pour modifier des champs textes en fonction du clic de l’utilisateur (avec MouseEvent.CLICK).
- Comment configurer les 8 options de votre formulaire AWeber.
Avec ce tutoriel flash, vous ajoutez des formulaires AWeber dans votre application flash. Et vous envoyez des informations depuis flash vers un script php, perl, en 2 étapes !
AWeber en Flash
Version démonstration
Voici le résultat d’un formulaire AWeber avec Flash.
1 | http://e6msyji6epr.exactdn.com/wp-content/uploads/2013/02/aweber-flash.swf |
Télécharger le code source AWeber avec Flash
Vous trouvez ci-dessous le code source du formulaire AWeber avec Flash.
Ce code source est accompagné du fichier fla avec l’ensemble des composants du Framework AS3 Facile.
Télécharger “AWeber avec Flash” aweber-flash.zip – Téléchargé 2005 fois – 130,12 Ko
Quelles techniques utilisez-vous pour communiquer de flash vers php, perl… ?
Peut-être via le flash remoting, ou une autre solution ?
Partagez votre technique dans les commentaires ci-dessous.
Échanger des données entre PHP / MySQL et Flash / AS3
Dans cet article, nous allons apprendre Comment échanger des données entre Flash (AS3) et Php / MySQL.
Il y a plusieurs méthodes, la plus simple et efficace consiste à utiliser le Flash Remoting.
Qu’est ce que le Flash Remoting ?
Le Flash Remoting permet des échanges entre un client (flash) et un serveur (php). De plus, il possède un format de données propre : l’AMF pour Action Message Format.
Le format AMF (format binaire) permet, entre autre, d’échanger des variables typées et optimisées. Effectivement, les informations sont sérialisées puis envoyées au serveur (Php).
Pour simplifier : Flash encode les données en AMF et les transmet au serveur. Pour décoder le paquet reçu, le serveur a besoin d’une passerelle remoting.
Installation d’une passerelle Remoting
Dans notre tutoriel nous utiliserons AmfPhp pour dialoguer entre Flash et Php. Téléchargez la dernière version : amfphp 1.9.zip.
Dézippez le contenu sur votre serveur web, dans le dossier ‘www’ par exemple.
Il y a 2 dossiers et 1 fichier important :
- browser : permet de tester vos services Php.
- services : contient les Services Php ou classes de communication avec une base de données MySQL.
- gateway.php : la passerelle à configurer dans votre fichier ActionScript pour lancer la communication de Flash avec Php.
Ensuite, tapez l’url d’accès la passerelle gateway.php, par exemple : http://www.votre-domaine.com/include/remoting/gateway.php
Un message vous indique que l’installation d’Amfphp est réussie.
Puis vous avez la possibilité de :
- consulter la documentation sur le site Amfphp.
- lancer le Browser pour tester vos services Php.
Création de la connection entre Flash et Php
Dans votre classe AS3, il suffit de renseigner l’url de la passerelle php (gateway.php). Très simple 🙂
[codesyntax lang= »actionscript3″ title= »addRemoting » bookmarkname= »addRemoting »]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /** * Création de la passerelle de communication avec php */ private function addRemoting() : void { // création d'une connection à un service oConnection = new NetConnection (); // Connection avec la passerelle pour communiquer avec AMFPHP // (avec php et une base de données MySQL par exemple) oConnection.connect("http://www.votre-domaine.com/include/remoting/gateway.php"); /** * Création de l'objet qui permet de communiquer avec votre Service AMFPHP * * @param : fonction appelée en cas de succès de connection à la passerelle AMFPHP * @param : fonction appelée en cas d'échec de connection à la passerelle AMFPHP */ oRetourPhp = new Responder(succesServeurPhp,echecServeur); oRetourMySQL = new Responder(succesServeurMysql,echecServeur); } |
[/codesyntax]
Les classes AS3 suivantes sont utilisées :
- import flash.net.NetConnection; Permet d’établir la connection de Flash avec PhP.
- import flash.net.Responder; Permet de renseigner à Flash, les méthodes AS3 à appeler dès la réception de la réponse de Php.
Échange de données entre Flash et Php
Le fonctionnement est le suivant : le Flash (en AS3) appelle un Service Php (une classe).
Création du Service Php
Sur votre serveur php, dans le répertoire services, créez un fichier php. Dans notre tutoriel, nous l’appellerons FlashRemoting.php.
Dans le constructeur de la classe php FlashRemonting, renseignez le nom des méthodes accessibles depuis flash.
[codesyntax lang= »php » title= »FlashRemonting.php » bookmarkname= »FlashRemoting.php »]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /** * @brief Constructeur de la classe. Initialise les proprietes. * */ public function __construct() { // permet de recuperer le contenu d'une page du flash en fonction du bouton du menu choisi $this->methodTable = array ( "getDate" => array ( "description" => "", "access" => "remote", "arguments" => "array", "returns" => "array" ) ); } |
[/codesyntax]
Ensuite, il reste à implémenter votre script php dans la méthode getDate().
getDate() interroge le serveur php pour récupérer sa date tout simplement.
[codesyntax lang= »php » title= »FlashRemoting.php getDate() » bookmarkname= »FlashRemoting.php getDate() »]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /** * @param - * @return - */ public function getDate($oMsg) { $nTimestamp = time(); //Affiche le nombre de secondes écoulées depuis le 1er janvier 1970 $date = date("d-m-Y"); $heure = date("H:i:s"); $sDateFr = $date." ".$heure; $aResult = array(); $aResult["timestamp_php"] = $nTimestamp; $aResult["date"] = $sDateFr; $aResult["message"] = $oMsg; return $aResult; } |
[/codesyntax]
Dans la méthode getDate(), vous remarquerez l’ajout d’un paramètre en entrée.
C’est un objet envoyé par Flash, puis Php le retourne à Flash. C’est un exemple pour vous montrer cette possibilité : le contenu de cet objet peut être ajouté dans une base de données par exemple…
Test du service avec le browser
Une fois votre service Php crée, vous pouvez le tester avec le browser d’Amfphp.
Tapez l’url d’accès la passerelle gateway.php, par exemple : http://www.votre-domaine.com/include/remoting/gateway.php
Et cliquez sur Load the service browser.
Cette interface en Flash vous permet :
- de détecter les erreurs de syntaxe PhP.
- d’appeler les méthodes de votre service Php.
- d’effectuer des tests de performances de votre serveur Php.
Appel de PhP à partir de Flash
En AS3, vous utilisez l’instance de la classe NetConnection pour appeler votre passerelle Php.
[codesyntax lang= »actionscript3″ title= »appelPhp() » bookmarkname= »appelPhp »]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | private function appelPhp(e:MouseEvent) : void { // création de l'objet transmit en paramètre à php var oInfo:Object = new Object(); oInfo.nom = "ActionScript-Facile.com"; oInfo.numero = Math.floor( Math.random()*69 ); oInfo.timestamp_flash = Math.floor(new Date().getTime()/1000); m_textField.htmlText = "Communication avec PHP en cours :)"; /** * Appel d'une méthode de notre classe PHP. * Localisée dans le fichier services\flashremoting\FlashRemoting.php * * @param : chemin complet d'appel de la méthode php * @param : l'objet qui récupère les réponses de php * @param : paramètre à transmettre à la méthode php */ oConnection.call("flashremoting.FlashRemoting.getDate", oRetourPhp, oInfo); // si tous ce passe bien le serveur répond (succesServeurMysql) sinon appel de la méthode echecServeur... } |
[/codesyntax]
L’instance de la classe Responder indique à Flash les méthodes à appeler en cas de connection réussie ou d’échec.
Vous remarquerez l’ajout du Logger pour afficher du Debug dans Firefox (très pratique)!
La méthode succesServeurPhp reçoit l’objet directement envoyé par la méthode getDate() de la classe Php FlashRemoting.
[codesyntax lang= »actionscript3″ title= »succesServeurPhp() » bookmarkname= »succesServeurPhp() »]
1 2 3 4 5 6 7 8 9 10 11 12 | private function succesServeurPhp(oResult:Object):void { // affiche des messages de debug dans firefox Logger.debug("Connection à la passerelle AMFPHP réussie!"); Logger.debug("timestamp_flash : " + oResult.message.timestamp_flash); Logger.debug("Date reçue de php : " + oResult.date); Logger.debug("timestamp_php : " + oResult.timestamp_php); m_textField.htmlText = "Sur le serveur php N°<b>"+oResult.message.numero+" - " + oResult.message.nom+ "</b>, nous sommes le " + oResult.date + ".\nLe temps écoulé est de " + oResult.timestamp_php +"."; } |
[/codesyntax]
Echanger des données entre flash
et une base de données MySQL
Sur le même principe, Flash peut communiquer avec une base de données, de type MySQL par exemple.
Dans votre service Php, vous implémentez vos requêtes MySQL, c’est aussi simple que cela!
J’ai ajouté à ce tutoriel la classe Mysql.php. Elle possède quelques fonctionnalités bien sympathiques. Je vous laisse les découvrir par vous même.
La classe Mysql.php est commentée, et avec des exemples d’utilisation.
Création d’un compteur de visite en Flash
Nous allons créer un compteur de visites en Flash.
Le Flash va interroger la base de données Mysql via Php pour mettre à jour et afficher le nombre de visiteurs de l’application.
Tout d’abord, renseignez les données de connection à votre base dans la classe Mysql.php
[codesyntax lang= »php » title= »Mysql.php » bookmarkname= »Mysql.php »]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /** * @brief * @param - */ public function __construct() { $this->aConnect = array(); $this->aConnect['ip'] = "nom_serveur"; // le serveur $this->aConnect['login']= "login"; // le login $this->aConnect['password'] = "mot_passe"; // mot de passe $this->aConnect['database'] = "nom_base"; // nom de la base de donnee $this->aConnect['port'] = "3306"; } |
[/codesyntax]
Puis exécutez ces requêtes sql sur votre base de données (via phpmyadmin).
[codesyntax lang= »sql » title= »compteur visite » bookmarkname= »compteur visite »]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | -- -- Table structure for table <code>compteur_visite -- CREATE TABLE <code>compteur_visite</code> ( compteur</code> double NOT NULL default '0', date</code> date NOT NULL default '0000-00-00', time</code> int(9) NOT NULL default '0', duree</code> int(9) NOT NULL default '0', ip</code> varchar(50) NOT NULL default '0', PRIMARY KEY (<code>ip</code>), KEY <code>compteur</code> (<code>compteur</code>,<code>date</code>), KEY <code>date</code> (<code>date</code>), KEY <code>duree</code> (<code>duree</code>), KEY <code>time</code> (<code>time</code>) ) ENGINE=MyISAM; INSERT INTO <code>compteur_visite</code> ( compteur</code> , date</code> , time</code> , duree</code> , ip ) VALUES ( '0', '0000-00-00', '0', '24', 'compteur' ); |
[/codesyntax]
Ensuite, ajoutez un nouvel accès dans le constructeur de votre service php. Ainsi que la création de la connection à la base de données.
[codesyntax lang= »php » title= »FlashRemoting.php » bookmarkname= »FlashRemoting.php »]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | /** * @brief Constructeur de la classe. Initialise les proprietes. * */ public function __construct() { // permet de recuperer le contenu d'une page du flash en fonction du bouton du menu choisi $this->methodTable = array ( "getDate" => array ( "description" => "", "access" => "remote", "arguments" => "array", "returns" => "array" ), "getVisitCount" => array ( "description" => "", "access" => "remote", "arguments" => "array", "returns" => "array" ) ); // ajout des classes php require_once("Mysql.php"); // connection à la base de données mysql $this->oSqlConnection = new Mysql(); } |
[/codesyntax]
Ensuite, vous implémentez les différentes requêtes sql nécessaires dans votre service Php.
[codesyntax lang= »php » title= »getVisitCount() » bookmarkname= »getVisitCount() »]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | /** * @brief Récupère le nombre de visiteur sur le site actuellement, met à jour le compteur également. * @param - * @return - */ public function getVisitCount() { /* init des variables */ $n_nbVisiteur = 0; $n_nbVisiteurToday = 0; $n_nbVisiteurNow = 0; //on recupere l adresse ip du visiteur if($_SERVER) { if($_SERVER['HTTP_X_FORWARDED_FOR']) $sIpAdress = $_SERVER['HTTP_X_FORWARDED_FOR']; elseif($_SERVER['HTTP_CLIENT_IP']) $sIpAdress = $_SERVER['HTTP_CLIENT_IP']; else $sIpAdress = $_SERVER['REMOTE_ADDR']; } else { if(getenv('HTTP_X_FORWARDED_FOR')) $sIpAdress = getenv('HTTP_X_FORWARDED_FOR'); elseif(getenv('HTTP_CLIENT_IP')) $sIpAdress = getenv('HTTP_CLIENT_IP'); else $sIpAdress = getenv('REMOTE_ADDR'); } $sDate = date("Y-m-d"); //on convertit l heure courante en minute d une journee $sTime = (date("H") * 60) + date("i"); $s_sqlSelect = "SELECT compteur, date, time, duree FROM compteur_visite WHERE ip = 'compteur' LIMIT 1"; $o_sqlResult = $this->oSqlConnection->query($s_sqlSelect); $o_result = $this->oSqlConnection->getObject($o_sqlResult); $n_nbVisiteur = $o_result->compteur; $iTimeConnexionRef = $o_result->time; //temps de connexion de reference $iDurationRef = $o_result->duree; //duree de renouvellement de reference $sDateBDD = $o_result->date; //on test si on a changé de jour if ( $sDate!=$sDateBDD ) { $s_sqlDelete = "DELETE FROM compteur_visite WHERE ip!='compteur'";//on vide toutes les addresses ip enregistrées dans la table lors du changement de jour $o_sqlResult = $this->oSqlConnection->query($s_sqlDelete); $s_sqlUpdate = "UPDATE compteur_visite SET date='$sDate'";//on met a jour la nouvelle date dans la table $o_sqlResult = $this->oSqlConnection->query($s_sqlUpdate); } //on verifie l adresse ip du visiteur et aussi son heure de passage $s_sqlSelect = "SELECT compteur, date, time, duree FROM compteur_visite WHERE ip='$sIpAdress' LIMIT 1"; // excecute la requete sql $o_sqlResult = $this->oSqlConnection->query($s_sqlSelect); // recupere le resultat renvoyee par la requete $o_result = $this->oSqlConnection->getObject($o_sqlResult); if( $o_result->compteur == NULL) { //on enregistre l adresse ip si elle est inconnu et on incremente le compteur $s_sqlInsert = "INSERT INTO compteur_visite (ip,time,duree) VALUES ('$sIpAdress','$sTime','$sTime')"; $o_sqlResult = $this->oSqlConnection->query($s_sqlInsert); $n_nbVisiteur +=1; $s_sqlUpdate = "UPDATE compteur_visite SET compteur=$n_nbVisiteur WHERE ip='compteur' LIMIT 1"; $o_sqlResult = $this->oSqlConnection->query($s_sqlUpdate); } else { // si l'adresse ip est connu alors verifie si sa connexion precedente est superieur a la durée // de renouvellement et si son heure de passage precedente incremente ou pas les connectés $sTimeVisit = $o_result->time;//on recupere l'heure de sa precedente connexion de notre connecté $sDurationVisit = $o_result->duree;//on recupere l'heure de sa precedente connexion de notre connecté // on verifie si sa derniere connexion ne date pas de plus que la duree de reference if( $iDurationRef*60 < ( $sTime - ($sDurationVisit) ) ) { //si la duree de reference est depassé alors notre connecté est comptablisé //comme nouvelle visite et on met a jour sa nouvelle heure de passage $s_sqlUpdate = "UPDATE compteur_visite SET time=$sTime, duree=$sTime WHERE ip='$sIpAdress' LIMIT 1"; $o_sqlResult = $this->oSqlConnection->query($s_sqlUpdate); //on cree une ligne fictive pour pouvoir le comptabiliser dans les connectés de jour $sIpAdressV = $sIpAdress.".".$n_nbVisiteur; //echo"sIpAdressV : ".$sIpAdressV; $s_sqlInsert ="INSERT INTO compteur_visite (ip,time,duree) VALUES ('$sIpAdressV','$sTime','$sTime')"; $o_sqlResult = $this->oSqlConnection->query($s_sqlInsert); //et on increment le compteur de visite $n_nbVisiteur +=1; $s_sqlUpdate = "UPDATE compteur_visite SET compteur=$n_nbVisiteur WHERE ip='compteur' LIMIT 1"; $o_sqlResult = $this->oSqlConnection->query($s_sqlUpdate); } else { //on met a jour son heure de passage si elle est superieure a t if ( $sTime > ( ($sTimeVisit)-$iTimeConnexionRef ) ) { $s_sqlUpdate="UPDATE compteur_visite SET time=$sTime WHERE ip='$sIpAdress' LIMIT 1"; $o_sqlResult = $this->oSqlConnection->query($s_sqlUpdate); } } } // on compte le nb de connecté de la journée $s_sqlSelect = "SELECT ip FROM compteur_visite WHERE ip!='compteur'"; // recupere le resultat de la requete SELECT $o_sqlResult = $this->oSqlConnection->query($s_sqlSelect); // retourne le nombre d'enregistrement renvoyee par la requete SELECT $n_nbVisiteurToday = $this->oSqlConnection->getNumRows(); // on compte le nb de connecté $sTimeToday = $sTime - $iTimeConnexionRef; $s_sqlSelect = "SELECT ip FROM compteur_visite WHERE time >= $sTimeToday AND ip!='compteur' "; // recupere le resultat de la requete SELECT $o_sqlResult = $this->oSqlConnection->query($s_sqlSelect); // retourne le nombre d'enregistrement renvoyee par la requete SELECT $n_nbVisiteurNow = $this->oSqlConnection->getNumRows(); $aResult = array(); $aResult["total"] = $n_nbVisiteur; $aResult["today"] = $n_nbVisiteurToday; $aResult["now"] = $n_nbVisiteurNow; return $aResult; } |
[/codesyntax]
Voici le code AS3 pour demander à Mysql les informations du compteur de visites.
[codesyntax lang= »actionscript3″ title= »appelMysql() » bookmarkname= »appelMysql() »]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | private function appelMysql(e:MouseEvent) : void { // création de l'objet transmit en paramètre à php var oInfo:Object = new Object(); oInfo.nom = "ActionScript-Facile.com"; oInfo.numero = Math.floor( Math.random()*69 ); oInfo.timestamp_flash = Math.floor(new Date().getTime()/1000); m_textField.htmlText = "Communication avec MySQL en cours :)"; /** * Appel d'une méthode de notre classe PHP. * Localisée dans le fichier services\flashremoting\FlashRemoting.php * * @param : chemin complet d'appel de la méthode php * @param : l'objet qui récupère les réponses de php * @param : paramètre à transmettre à la méthode php */ oConnection.call("flashremoting.FlashRemoting.getVisitCount", oRetourMySQL, oInfo); // si tous ce passe bien le serveur répond (succesServeurMysql) sinon appel de la méthode echecServeur... } |
[/codesyntax]
Et pour terminer, la méthode AS3 appelée par le Php. Nous utilisons les informations de la base de données, à travers un objet envoyé par Php.
[codesyntax lang= »actionscript3″ title= »succesServeurMysql() » bookmarkname= »succesServeurMysql() »]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /** * Appelée dans le cas d'une communication réussie avec mysql */ private function succesServeurMysql(oResult:Object):void { // affiche des messages de debug dans firefox Logger.debug("Connection à la passerelle AMFPHP réussie!"); Logger.debug("Total des visites : <b>"+oResult.now); Logger.debug("Nombre de visiteur aujourd'hui : " + oResult.today); Logger.debug("Nombre de connectés : " + oResult.now); m_textField.htmlText = "Total des visites : <b>"+oResult.total+"</b>\n" + "Nombre de visiteur aujourd'hui : <b>" + oResult.today + "</b>\nNombre de connectés : <b>" + oResult.now +"</b>."; } |
[/codesyntax]
Conclusion
Et voici le résultat avec les Composants Button du Framework AS3 Facile.
1 | http://e6msyji6epr.exactdn.com/wp-content/uploads/2010/10/remoting_exemple.swf |
Sources Commentées
Vous trouverez ci-dessous l’ensemble des classes créées. Elles sont commentées pour vous permettre de comprendre au mieux leur fonctionnement.
Le fichier zip contient également le logiciel AMFPHP en version 1.9 😉
Vous pouvez télécharger le fichier zip : Télécharger “Flash Remoting AS3 / Php / MySQL (AMFPHP 1.9 inclus)” flash_remoting_as3_facile.zip – Téléchargé 1595 fois – 532,83 Ko
Quelle technique préférez-vous utiliser pour échanger des données entre Php et Flash ?
Partagez-les ci-dessous avec l’ensemble des Développeurs ActionScript. Il y a des solutions plus rapides à mettre en place avec les classes AS3 :
- URLVariables.
- URLRequest.
- URLLoader.