Tutorial - Comment envoyer et recevoir des données en passant par PHP / MySQL
Pour la création des jeux Pixtiz, j'ai implanté un système de classement. Ce classement doit donc être visible par tous les membres du site.
Le plus pratique était donc de ranger tous les scores dans une base MySQL qui pourrait être appelée dans le site web et dans les jeux par PHP.
J'ai donc cherché sur le net des tutoriaux mais la plupart étaient mal expliqués ou ne fonctionnaient tout simplement pas.
Dans ce tutorial, je vais vous donner les sources du script qui me permet de récupérer le meilleur score et de l'afficher au début de chaque partie.
Le Script PHP avec accès MySQL
La fonction d'envoi vers Flash
function envoi($var, $val){
echo "&".$var."=".utf8_encode($val);
}
Tout d'abord, déclarer la fonction qui va nous permettre d'envoyer nos données une fois la requête MySQL effectuée.
Cette fonction est simple, et prend deux paramètre : $var et $val et va renvoyer une expression de la forme &$var=&$val.
Par exemple,
$nom_user_flash="ninou";
envoi("nom_user",$nom_user_flash);
Cette portion de code va renvoyer "&nom_user=ninou". La fonction utf8_encode est une fonction de php permettant de renvoyer à Flash
des données qu'il pourra interpréter (encodées en UTF-8).
La requête MySQL
Tout d'abord, la connection à la base MySQL
$hostname_connexionLogin = "nom de votre host";
$database_connexionLogin = "nom de la base MySQL";
$username_connexionLogin = "votre nom d'utilisateur";
$password_connexionLogin = "le password qui correspond";
$connexionLogin = mysql_pconnect($hostname_connexionLogin, $username_connexionLogin, $password_connexionLogin) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($database_connexionLogin, $connexionLogin);
Bien sur, il est conseillé de mettre ces routines dans un fichier connect.php par exemple et de faire include("connect.php"); pour éviter de tout refaire à chaque changement de mot de passe ;).
$score_maximum=0;
$recordman="";
$requete = "SELECT * FROM scores ORDER BY score DESC";
$resultat_requete_max = mysql_query($requete, $connexionLogin) or die(mysql_error());
while($row_resultat_requete = mysql_fetch_assoc($resultat_requete_max)){
if($row_resultat_requete["score"] > $score_maximum){
$score_maximum = $row_resultat_requete["score"];
$recordman = $row_resultat_requete["nom"];
}
}
Ici, j'effectue ma requête qui parcourt mes scores et me sort le score maximal (table "scores", champ "score"). On peut evidemment faire tous types de traitement.
Le score maximal est alors enregistré sous la variable $score_maximum et le nom du recordman sous $recordman.
L'envoi vers Flash
envoi("retour",$score_maximum);
envoi("recordman",$recordman);
On envoie les valeurs vers Flash grâce à la fonction envoi crée plus haut.
Le Script ActionScript pour récupérer les valeurs
var monChargement_lv = new LoadVars();
monChargement_lv.onLoad = function(success) {
if (success) {
_root.score_max = monChargement_lv.retour;
_root.recordman = monChargement_lv.recordman;
}
};
monChargement_lv.load("http://www.pixtiz.com/adresse-de-votre-script.php", monChargement_lv, "POST");
Sur l'image-clé à laquelle vous voulez récuperer les valeurs, placez directement ce code AS. Vous pouvez appeler l'evenement dès le chargement d'un clip :
onClipEvent (load) {
...chargement des valeurs...
}
Ce script va charger les valeurs envoyées en POST depuis le script indiqué dans le "load". Pour récuperer le score maximal, on utilise
monChargement_lv.retour (rappelez-vous, on a fait envoi("retour",$score_maximum);) et on le stocke dans une variable de flash, ici score_max au niveau root.
Indiquez ensuite score_max en tant que variable de votre champ de texte dynamique (dans ses propriétés) et le score contenu dans votre base sera affiché.
Envoyer des données vers un fichier PHP depuis Flash
Le script ActionScript qui permet d'envoyer des données
var monEnvoi_lv = new LoadVars();
var monChargement_lv = new LoadVars();
monEnvoi_lv.score = _root.score_total;
monChargement_lv.onLoad = function(success) {
if (success) {
}
};
monEnvoi_lv.sendAndLoad("http://www.pixtiz.com/script qui va recevoir la valeur.php", monChargement_lv, "POST");
Voila la portion de code ActionScript qui vous permettra d'envoyer des valeur vers un script PHP grâce à la fonction sendAndLoad.
Ici on envoie la variable flash score_total au niveau root grâce à l'objet LoadVars monEnvoi_lv.
Cette variable sera repérée par le nom score dans le script PHP car on a donné monEnvoi_lv.score = _root.score_total;.
On peut bien sûr envoyer plusieurs valeurs :
var monEnvoi_lv = new LoadVars();
var monChargement_lv = new LoadVars();
monEnvoi_lv.score = _root.score_total;
monEnvoi_lv.valeur2 = _root.valeur_flash2;
monEnvoi_lv.valeur3 = _root.valeur_flash3;
monEnvoi_lv.valeur4 = _root.valeur_flash4;
...
...
monChargement_lv.onLoad = function(success) {
if (success) {
}
};
monEnvoi_lv.sendAndLoad("http://www.pixtiz.com/script qui va recevoir la valeur.php", monChargement_lv, "POST");
La réception en PHP
if(isset($_POST['score'])) {
$score_unsecure = utf8_decode($_POST['score']);
} else $score_unsecure="inconnu";
On vérifie tout d'abord qu'il y a bien une variable envoyée sous le nom "score" puis on décode cette valeur grâce à la fonction PHP utf8_decode.
On stocke cette variable décodée dans une variable, ici $score_unsecure. Vous pouvez ensuite effectuer les traitements que vous voulez en PHP.
Auriez vous un exemple ce que vous avez expliquer parce que j'arrive pas à afficher les données stockées dans mes tables dans flash.
mercii