bonjour,
Mon problème est à la fois simple et suffisamment complexe puisque j'y ai passé plusieurs jours sans
avoir réussi.
C'est un problème que rencontre les pseronnes qui désirent échanger des données entre flash et MySQL.
Aussi je vais essayer d'etre rationnel et précis dans la présentation du schéma.
Pour commencer, précisons l'environnement serveur que j'utilise : Apache (easy PHP 1.8 qui inclut PHP
4.3, MySQL).
Donc, je désire récupérer des infos stockées préalablement dans ma base de données.
Pour récupérer les données dans la BD MySQL, j'ai écrit une page (script) PHP qui via une connexion
remplit une variable avec ma requete. Cette variable est remplie au moyen de 2 boucles (ce que je tiens
à faire pour garder une bonne visibilité). Elle contient en fin de compte un tableau. A la fin du
script, la variable-tableau est envoyée .
Elle est ensuite récuperée par le navigateur dans une page html (incluant le fichier *.swf). Dans ce
fichier flash, la page doit normalement afficher chacune des cellules de la variable-tableau dans des
zones textes dynamiques.
je vais placer ici dans l'ordre
-l'extrait du script PHP
-les codes actionscript2 de flash
-------------------
VOILA LE CODE PHP
-------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta HTTP-EQUIV="expires" content="0">
<meta HTTP-EQUIV="Pragma" content="no-cache">
<meta HTTP-equiv="Cache-Control" content="no-cache">
<title>recup_annonces_output.php</title>
</head>
<body>
<?php
// fonction de retour de variable à flash
function envoi($var,$val) {
echo "&".$var."=".utf8_encode($val);
}
// variables de connection
$host="localhost";
$login="moi";
$pass="toto";
$base="DB";
$tableannonces="annonces";
// connexion à la base autorisation
$connect = mysql_connect($host, $login, $pass) or die('pas de possibilité de connection à mySQL ');
// sélection de la base
mysql_select_db($base,$connect) or die('selection de la base impossible : '.mysql_error());
// la requête sql dans la table
$requete = "SELECT id, natureann, annonce, nomann, prenomann, date,FROM $tableannonces ORDER BY date DESC " or die('la commande insert ne fonctionne pas ') ;
// l'indice de pointage de la table
$indice = mysql_query($requete) or die('Erreur d enregistrement');
// récupération des informations au moyen de l'indice avec double boucle for
for($i=0; $i<mysql_num_rows($indice); $i++)
{
$tableau_annonces[$i]=mysql_fetch_row($indice);
// les echo ne sont la que pour voir le résultat dans le serveur apache PHP 4.3
echo '<font color="red">les donnees colonne I : '.$i.' <br>';
echo 'la categorie de l annonce est : '.$tableau_annonces[$i].' <br>';
echo '+++++++++++++++++++++++++++++++++++++++++++++ <br>';
for($j=0; $j<mysql_num_fields($indice); $j++ )
{
$tableau_annonces[$j]=mysql_fetch_field($indice);
//ici, pour chaque itération, j'envoie le contenu de chaque cellule de ma variable $tableau_annonces[$i][$j] à flash :
envoi("table_fla[$i][$j]",$tableau_annonces[$i][$j]);
echo '<font color="black">le champ J : '.$j.' <br>';
echo 'la categorie de l annonce est : '.$tableau_annonces[$i][$j].' <br>';
echo '------------------------------------------------------- <br>';
};
};
// envoi de la variable de controle a flash
envoi("finautre","demande enregistrée");
envoi("fin","ok");
echo ' <br>';
//fermeture de la connexion
mysql_free_result($indice);
mysql_close();
// affichage de la variable tableau_annonce dans apache pour vérification
echo "<pre>";
print_r($tableau_annonces);
echo "</pre>";
?>
</body>
</html>
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
**********************
-------------------
VOILA LE CODE FLASH MX 2004 pro
-------------------
fichier : "publication_annonce.fla"
<IMAGE 1 >
---calque action------
// déclaration des variables
_global.envois_sms_lv=new LoadVars();
_global.reception_sms_lv=new LoadVars();
_global.table_annonces= new Array();
_global.nombre= new Number();
<IMAGE2>
---calque action------
stop();
// il y a un bouton surlequel cliquer ( déclencher l'execution du code)
bouton1_btn.onRelease= function()
{
envois_sms_lv.accord_fla.text="envoi";
//donnees_sms_lv.send("annonces_input1.php", "POST");
envois_sms_lv.sendAndLoad("recup_annonces_output.php", reception_sms_lv,"POST");
//getURL("annonces_input1.php","_blank","POST");
//loadVariables("annonces_input1.php", "saisie", "POST");
reception_sms_lv.onLoad = function(success) {
if (success)
{
info1_txt="chargement bien effectué";
gotoAndPlay(20);
} else {
info1_txt="pas de retours d'info";
gotoAndPlay(2);
};
};
}
<IMAGE 20>
---calque action------
// pourquoi image 20, plutot qu'image 3 ?
// pour laisser un peu de temps au chargement du Load à partir de PHP. En théorie, il conviendrait de venir en boucle //jusqu' à l'image ayant déclenchée le Load, tant que le chargement n'est pas totalement effectué.
//mais avec un bouton, vela n'est pas faisable
// par ailleurs, la fonction : =function (success) {if (success) remplace cette boucle théorique
affiche_table.text=table_annonces
var i:Number=0;
duplique_txt=reception_sms_lv.finautre;
// répartition du contenu des cellules [i] (où i=0) de la variable table_fla[i][j] envoyée par le script PHP dans (l'objet LoadVars) reception_sms_lv
id_txt1=reception_sms_lv[i][0]; //essai pensant que l'objet LV contient implicitement le tableau
natureann_txt1=reception_sms_lv.table_fla[i][1];
annonce_txt1=reception_sms_lv.table_fla[$i][2]; //essai en utilisant la forme PHP des variables : $
nomann_txt1=reception_sms_lv[i][3];
prenomann_txt1=reception_sms_lv.table_fla;
date_txt1=reception_sms_lv.table_fla[$i][5j];
---calques affichage ------
//dans chaque calque affichage, une zone textes dynamiques, sans nom d'occurence
// mais, chaque zone de texte est identifiée par une variable
une zone de texte pour la vérification de la liaison (zone de texte_verif ): duplique_txt
puis les autres zones de texte pour afficher les cellules[0] de ma variable table_fla
la premiere zone de texte : variable id_txt1
la deuxième zone de texte : variable natureann_txt1
la troisième zone de texte : variable annonce_txt1
la quatrième zone de texte : variable nomann_txt1
la cinquième zone de texte : variable prenomann_txt1
LE PROBLEME
Lorsque je fais tourner la page "publication_annonce.HTML" contenant le fichier *publication_annonce.swf" dans le serveur apache PHP,
la zone texte_verif donne bien "demande enregistrée" renvoyée par le script PHP
les zones de texte ne donne que "UNDEFINED"
<IMAGE 21>
// idem page 20 sauf que
// var i:Number=1;
---------------------------------------
Donc, si vous pouvez m'expliquer pourquoi mes zones texte n'affichent pas l'objet LV
et surtout expliquer la logique (brièvement bien sur, car votre temps est précieux)
je vous en remercie vivement.
Partager