probleme variable flash =>php - Flash/ActionScript - Programmation
Marsh Posté le 26-02-2009 à 18:51:29
utilise les balises [code=javascript] et [code=php] pour coloriser ton code...
Marsh Posté le 26-02-2009 à 21:15:19
1) fais en sorte que ton fichier flash_mysql.php écrive sur un fichier les variables envoyées ( ou pas )
2) si tu n'envoies pas de variables, ça vient du flash, sinon ton fichier écrit te permettra de savoir ce que tu envoyes réellement
3) file_put_contents("tonfichier",print_r($_POST,1));
Marsh Posté le 26-02-2009 à 23:24:34
j'ai rajouter la ligne suivante a la fin de mon script php:
file_put_contents("essais",print_r($_POST,1));
et je recupere dans le fichier essais :
Array
(
)
je suppose donc que flash n'envoie rien^^
mais je vois pas d'où vient le prob avec flash, j'ai suivi plusieurs tuto a la lettre, et j'arrive toujours pas à envoyer des variables, alors que la reception marche.
Marsh Posté le 27-02-2009 à 02:14:38
Et tu testes ça en local sur ta machine ( genre avec un serveur Wamp ou équivalent ) ?
Et depuis où ? L'éditeur Flash même ? ou dans ton navigateur ?
Marsh Posté le 27-02-2009 à 09:14:10
Si tu recuperes des donnees visiteurs tu dois TOUJOURS le retraiter pour etre sur qu'ils n'entrent pas de la merde dans ta DB.
Ensuite il y a des fautes dans ton code.
Tu fais une recherche dans ta DB avec $plat ... il manque le S.
Bref, pour debuter, fais un test tout simple.
Code :
|
Et dans ton php
Code :
|
Une chose a la fois
Marsh Posté le 27-02-2009 à 11:10:22
Oui mais en fait, si je demandais d'où il teste ( IDE ou browser ) , c'est juste parce que depuis l'IDE, il faut oublier la méthode POST.
Du moins, la dernière fois que j'ai utilisé l'outil de Macromedobe, c'était toujours le cas : uniquement du GET !
Alors pour tester, en développement, depuis l'IDE, faut temporairement tout passer en GET .. et puis repasser en POST à la mise en exploitation.
Marsh Posté le 27-02-2009 à 12:36:25
Non, tu peux l'utiliser tel quel depuis Flash et meme un projecteur.
Tu peux meme mettre une adresse http://
Marsh Posté le 27-02-2009 à 12:50:13
Alors ça a changé après Flash 8 ( mais ça m'étonnerait bcp ! )
http://livedocs.adobe.com/flash/8/ [...] 02335.html
Citation : |
Marsh Posté le 27-02-2009 à 13:43:52
Mr Mala a écrit : Et tu testes ça en local sur ta machine ( genre avec un serveur Wamp ou équivalent ) ? |
je test a l'aide d'easyphp, à partir du navigateur
@Zedlefou:
Pour ce qu'il concerne la partie base de donnée je l'ai pas encire testé du fait que mon script php recupère quedal de flash.
Je testerai tes indications dans mon code dans l'aprem (certain ont des cours^^).
Marsh Posté le 27-02-2009 à 13:46:04
Ben moi, j'ai toujours fait comme ca il me semble
Marsh Posté le 27-02-2009 à 13:49:06
Ben oui mais soit, comme tu l'as dit, du projector ( indépendant de l'IDE ) ou du navigateur ...
Mais depuis l'IDE lui-même ( CTRL-return ), ça a toujours été le cas; même si tu demandes explicitement la méthode POST il repasse en GET !
@darksantor :
JUSTE POUR VOIR, passe un peu en méthode GET dans ton script PHP ...
Marsh Posté le 27-02-2009 à 14:56:33
darksantor a écrit : meme resultats avec get |
Dans ton script php, $_GET au lieu de $_POST ? ...
Vraiment bizarre ...
Et tu as essayé ( en POST et GET ) le petit script de test proposé par Zed ? ... c'est un petit test simple et rapide avant de te lancer dans le "gros" traitement des données ..
EDIT: bon, visiblement, au temps pour moi, dans Flash CS3 ( et peut-être avant, juste après Flash8 ), ils ont "corrigé" le fait de ne pouvoir envoyer qu'en GET depuis l'IDE !
( 'tain ça faisait un bail que j'avais pas touché à cet IDE; j'ai appris à m'en passer depuis pas mal de temps ! :| )
Donc, POST ou GET, même combat !
Par contre j'ai tapé le simple petit test de Zed et ça passe bien .. aussi bien en POST qu'en GET ...
A un détail près qu'il faut éviter le monAffiche_lv.var ...
Vu qu'il considère 'var' comme un mot réservé, il n'aime pas trop !
Mets plutôt
monAffiche_lv.lavar
.. et évidemment
echo "&lavar=".$return ;
.. dans le PHP
Marsh Posté le 27-02-2009 à 16:12:32
Par contre, j'avoue que je ne m'étais pas encore bien penché sur ton post initial .. .. maintenant, oui
Et là, je m'interroge ...
- si j'ai bien compris, tu as une DB avec dedans une correspondance "plat" -> "vin" ..
- ton but est bien d'envoyer le nom d'un plat ( bouffe.text ) et de recevoir en retour le type de vin qui lui est associé ? mmh ?
Alors je ne comprends pas du tout le pourquoi de "envoyer()" ET "afficher()" !
Dans ton flash_mysql.php, si tu as une variable toto ( = bouffe.txt ), tu l'assignes à $plat et tu fais la requête sql ... sinon, tu injectes "allo" dans $plat ...... et tu fais quand même la requête ! :-/
afficher() se retrouve dans le cas du "allo" .. et très certainement, le script php ne renvoie RIEN vu qu'il est peu probable que tu aies des tuples dont le nom de plat est "allo" !
En fait, "envoyer()" fait tout le boulot nécessaire :
- tu envois le nom du plat,
- tu renvois le résultat dans la variable "variable_vin"
- .. qui se trouvera dans monAffiche_lv !
Marsh Posté le 27-02-2009 à 16:16:25
print_r($_REQUEST); dans le cas où flash ne sait pas ce qu'il envoie ( ou pas )
Marsh Posté le 27-02-2009 à 17:58:25
Mr Mala a écrit : Par contre, j'avoue que je ne m'étais pas encore bien penché sur ton post initial .. .. maintenant, oui |
en fait pour le moment fait pas gaffe a la parti DB.
T'a bien compris le but de mon code envoyer un nom de met pour qu'on nous donne le vin correspondant.
le envoyer() sert a envoyer la variable que je rentre dans ma saisie de texte vers php qui fera le traitement avec la DB, et le afficher() permet d'afficher dans un cadre texte dynamique de mon flash, la réponse de php.
le 1er marche pas car a chaque fois php me répond "allo" car le post semble être vide.
Marsh Posté le 27-02-2009 à 18:08:02
Oui ok mais "afficher()" ne sert à rien !
Le script PHP envoie déjà une réponse au "envoyer()" !
Là, tu es en train de t'imaginer que :
- tu fais une requête qui lance un script PHP sur le serveur.
- le script est super gentil, ne va jamais s'arrêter et va "stocker" la réponse en attendant que tu lui demande !
C'est pas du tout ça !
- Envoyer() va effectuer la requête http qui va lancer l'exécution du script.
- le script va répondre à la question "donne-moi le vin qui correspond au plat [machin]"
- va te renvoyer immédiatement la réponse via la variable "variable_vin" qui sera stockée dans "monAffiche_lv"
- le script se termine ! pouf! fini!
"envoyer()" devrait plutôt s'appeller "GetVin()" ou "DonneMoiLaBinouze()" ..
Tu as par hasard essayé un "trace(monAffiche_lv.variable_vin);" dans le if(success) de envoyer() ?
Avec derrière, le mini-script de Zed encore réduit à son minimum :
Code :
|
Marsh Posté le 28-02-2009 à 16:45:44
merci pour ces conseils, donc si j'ai bien compris je ne garde que ma fonction envoyer, qui contient le senandload qui est chargé d'envoyer puis de réceptionner ce qui arrive de php.
Voici donc mon nouveau code:
Action script:
function envoyer() {
var monEnvoi_lv = new LoadVars();
var monAffiche_lv = new LoadVars();
monEnvoi_lv.toto = bouffe;
monAffiche_lv.onLoad = function(success) {
if (success) {
vin = monAffiche_lv.variable_vin;
trace (monAffiche_lv.variable_vin);
}
};
monEnvoi_lv.sendAndLoad("http://localhost/test/flash_mysql.php", monAffiche_lv, "POST" );
test = monEnvoi_lv.toto;
}
ok.onRelease = function(){
envoyer();
}
Php:
$return = $_POST['toto'] . " reussi";
echo "&variable_vin=".$return ;
mon trace me renvoi ceci:
<TEXTFORMAT LEADING=\"2\"><P ALIGN=\"LEFT\"><FONT FACE=\"Times New Roman\" SIZE=\"12\" COLOR=\"#FF0000\" LETTERSPACING=\"0\" KERNING=\"0\">oeuf</FONT></P></TEXTFORMAT> reussi
Donc ça doit être bon, je vois ce que je lui envoie (dans le cas present oeuf), par contre le résultat ne s'affiche toujours pas dans mon cadre devant le réceptionner ayant pour occurrence "flash_vin" et comme variable "vin"
Marsh Posté le 28-02-2009 à 17:49:14
Oui ok mais une étape à la fois !
Déjà, est-ce que tu as compris cette première "correction" concernant l'envoi/réception ? Est-ce que tu as bien compris le principe d'exécution d'un script côté serveur ?
Ensuite, aussi étrange que ça puisse parraître, tu donnes un partie de réponse dans ta question ; tu nous parles de la variable "vin" se trouvant dans l'objet "flash_vin" .......... alors pourquoi avant le trace() tu tentes d'y accéder simplement par "vin" ?
Marsh Posté le 28-02-2009 à 17:55:30
j'y accède par vin = monAffiche_lv.variable_vin qui ce trouve juste avant le trace, par contre dans mon cadre de texte dynamique correspondant à la variable vin, il n'affiche rien, alors que j'ai fait exactement la même chose avec la variable test qui me permet de voir ce que j'envoie à php et lui marche.
Pour ce qui concerne la fonction sendandload, oui j'ai bien compris a quoi il sert^^
Marsh Posté le 28-02-2009 à 19:26:59
C'est quoi le code pour afficher la variable php que je reçoit dans flash?
Marsh Posté le 02-03-2009 à 17:50:52
voila j'ai résolu tout mes problèmes au niveau affichage dans flash, merci encore pour vos conseils.
Maintenant j'attaque la partie communication avec la bdd mysql, et j'ai un problème au niveau de la réponse, à chaque fois j'ai droit a un undefined dans mon flash.
code php:
<?php
if($_POST['toto'] == "" ) {
$plats="remplisser le champ svp";
echo "&variable_vin=".$plats;
}
else $plats = utf8_decode($_POST['toto']);
$hostname_connexionLogin = "localhost";
$database_connexionLogin = "vin";
$username_connexionLogin = "root";
$password_connexionLogin = "mysql";
$connexionLogin = mysql_connect($hostname_connexionLogin, $username_connexionLogin, $password_connexionLogin) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($database_connexionLogin, $connexionLogin);
$requete = "SELECT vin.nom
FROM preparation
LEFT JOIN vin ON preparation.id_vin = vin.id
WHERE preparation.Nom like '%$plats%'";
$resultat_requete_vin = mysql_query($requete) or die(mysql_error());
while($row_resultat_requete = mysql_fetch_array($resultat_requete_vin)){
$nom = $row_resultat_requete["nom"];
envoi("variable_vin",$nom);
}
function envoi($var, $val){
echo "&".$var."=".$val;
}
?>
D'où cela peut venir, j'ai un doute au niveau de l'encodage de ma variable $_post, car quand je fait une requête du genre :
$requete = "SELECT vin.nom
FROM preparation
LEFT JOIN vin ON preparation.id_vin = vin.id
WHERE preparation.Nom like '%oeuf%'";
et bah j'ai la réponse que je veut dans mon flash.
merci d'avance
Marsh Posté le 02-03-2009 à 18:13:28
Ben déjà, tu risques d'avoir un beau problème si ta requête te renvoie plusieurs 'vin' !
Tu vas sortir une ligne echo genre
&variable_vin=vin1&variable_vin=vin2&.. etc
Je ne sais pas comment flash va réagir mais j'ose imaginer qu'il ne tiendra compte que de la dernière valeur de variable_vin !
( c'est peut-être pour ça d'ailleurs ton undefined .. mais je ne m'avancerai pas plus ! )
D'ailleurs, pour "ta requête qui fonctionne", Flash te donne quoi ?
Ce que je ferais, à ta place, c'est générer une liste de valeurs genre
vin1|vin2|vin3|.. etc ..
Et pour clôturer le script,
echo "&variable_vin=".$liste_de_resultats;
Ensuite, du côté Flash, tu splittes simplement ton résultat par rapport au caractère de séparation que tu auras choisi.
Marsh Posté le 02-03-2009 à 18:19:04
Autre chose, il y a une erreur de logique dans ton script ...
Tu testes le contenu de la variable 'toto' ( que tu devrais renommer en un mot clé plus "parlant" d'ailleurs ! ) ...
Si elle est vide, tu génères une espèce de message d'erreur ... ... mais ça n'arrête pas pour autant le script et la requête SQL est quand même exécutée avec comme $plats "remplisser le champ svp" !
Alors soit tu clôtures le script toi-même après le "echo "&variable_vin=".$plats;" par un "exit' ou "die" ...
Soit tu entoures le "else" d'accolades !
Code :
|
Marsh Posté le 02-03-2009 à 18:33:18
tu a raison pour mon résultat ça affiche une succession de &variable_vin et flash prend la dernier, donc voila ce que j'ai comme resultat avec ma requete de type $requete = "SELECT vin.nom FROM preparation LEFT JOIN vin ON preparation.id_vin = vin.id WHERE preparation.Nom like '%oeuf%'"; Donc je pense pas que mon undefined vienne de la.
Par contre pour ton idée de liste, comment génère tu cette liste? :S
puis pour ton splitte j'ai décrocher dsl, que veut tu dire par la? comment le met tu en place?
merci d'avance
Marsh Posté le 02-03-2009 à 19:03:07
Pour tes listes, je peut faire de même avec un tableau non?
for($i==0;$i>10;$i++){
$tab[$i]=$row_resultat_requete["nom"];
}
$vin_liste=$tab;
envoi("variable_vin",$vin_liste);
Bon avec ça j'ai aucun retour par contre pour le moment^^
Marsh Posté le 02-03-2009 à 21:55:49
Mais non mais non ...
Tu concatènes tes résultats dans une même chaine et tu choisis un séparateur
Code :
|
Ensuite, tu vas voir du côté de la doc de String.split() dans actionscript .. et tu vas vite comprendre .. ;-)
Marsh Posté le 02-03-2009 à 22:22:31
oki merci, en effet c'est beaucoup plus simple ta méthode^^, je vais m'attaquer au split, par contre ce qui m'inquiète c'est toujours ce retour de "undefined" dans mon cadre texte dynamique quand je souhaite utiliser ce que je rentre dans ma saisie de texte dans flash
Marsh Posté le 02-03-2009 à 22:39:44
y'à 3 ans, j'ai fait la meme chose avec un player, une playliste et ses 7 infos relatives au émission diffusée sur une radio ...
Je me rappelle que la chaine avait plusieurs délimiteurs pour recontruire ensuite le tableau en as
côté délimiteurs, il faut opter pour les nombreux caractères inutilisés
Marsh Posté le 03-03-2009 à 20:13:59
ça marche manqué une fonction dans php pour qu'il prenne que ce que je tape dans mon cadre texte dans flash.
Pour la fonction split, j'ai capter que ce que je met en paramètre disparait (ex: vin.split("|" )) mais je voudrait sauté une ligne après chaque résultat comment on peut faire?
var my_array:Array = monAffiche_lv.variable_vin.split("," ); //j'ai remplacer ton | par , pour le moment
for (var i = 0; i<my_array.length; i++) {
trace(my_array[i]);// le trace marche bien mais maintenant je voudrait afficher le contenu de my_array dans mon cadre texte dynamique (variable vin)
}
merci d'avance
Marsh Posté le 03-03-2009 à 23:36:00
Sauter une ligne ???
Heuuu tu veux dire ALLER à la ligne non ??
Si c'est un champs texte HTML, il te suffit d'ajouter un '<br>' après chaque élement de l'array ..
Si c'est un texte brut simple, un '\n' ...
Marsh Posté le 03-03-2009 à 23:50:23
oui voila aller a la ligne.
bah c'est un champ de texte dynamique dans flash il prend quoi comme format?
edit:
var my_array:Array = monAffiche_lv.variable_vin.split("," );
for (var i = 0; i<my_array.length; i++) {
trace(my_array[i]);
}
vin=my_array;
quand je fait ça j'ai l'impression que le split marche pas, car dans mon cadre texte j'ai toujours les virgules, normal?
Marsh Posté le 04-03-2009 à 00:57:06
Mais ?? ..
Franchement, je n'arrive pas à bien suivre le cheminement de tes pensées ! O_o
D'un côté, tu fais une joooolie boucle pour afficher un par un dans les traces les différents éléments du tableau .....
Puis la seconde d'après, tu te dis "bah! Flash, c'est magique, je vais balancer dans le champ texte carément le tableau lui-même .. et il va magiquement savoir que c'est un tableau et magiquement faire implicitement la boucle que j'ai fait plus haut pour magiquement m'afficher les uns au dessus des autres les éléments du tableau !" ... O_o
Marsh Posté le 04-03-2009 à 13:56:25
^^, j'avoue que j'ai des question bizarre quoi qu'il en soit, c'est bon j'arrive à faire ce que je veut entre mon fichier flash, mon script php et ma bdd mysql.
Merci beaucoup pour ton aide ainsi que pour ta patience.
Marsh Posté le 26-02-2009 à 18:46:43
Bonjour à tous
Je vous explique mon problème, je veux envoyer une valeur saisie dans un champ "saisie de texte" dans flash vers un script php histoire de faire quelque traitement avec dans une base de donnée mysql. Mais le soucis est que mon php ne reçoit rien de flash, j'ai suivie plusieurs tuto expliquant Loadvars et sendandload mais ça fonction toujour pas. Ci joint je vous fait un copier-coller de mon code.
merci d'avance.
action script (situé sur ma 1ere image):
function envoyer() {
var monEnvoi_lv = new LoadVars();
var monAffiche_lv = new LoadVars();
monEnvoi_lv.toto = bouffe.text;
monAffiche_lv.onLoad = function(success) {
if (success) {
}
};
monEnvoi_lv.sendAndLoad("http://localhost/test/flash_mysql.php", monAffiche_lv, "POST" );
test = monEnvoi_lv.toto;
}
function afficher(){
if(met_flash_var == "" ){
vin_flash_var = "entrer votre demande";
}
else{
var monChargement_lv = new LoadVars();
monChargement_lv.onLoad = function(success) {
if (success) {
vin = monChargement_lv.variable_vin;
}
};
monChargement_lv.load("http://localhost/test/flash_mysql.php", monChargement_lv, "POST" );
}
}
ok.onRelease = function(){
envoyer();
afficher();
}
PHP (flash_mysql.php):
<?php
if(isset($_POST['toto'])) {
$plats = utf8_decode($_POST['toto']);
} else $plats="allo";
function envoi($var, $val){
echo "&".$var."=".utf8_encode($val);
}
$hostname_connexionLogin = "localhost";
$database_connexionLogin = "vin";
$username_connexionLogin = "root";
$password_connexionLogin = "mysql";
$connexionLogin = mysql_pconnect($hostname_connexionLogin, $username_connexionLogin, $password_connexionLogin) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($database_connexionLogin, $connexionLogin);
$vin="";
$requete = "SELECT vin.nom
FROM preparation
LEFT JOIN vin ON preparation.id_vin = vin.id
WHERE preparation.Nom like '$plat'";
$resultat_requete_vin = mysql_query($requete, $connexionLogin) or die(mysql_error());
while($row_resultat_requete = mysql_fetch_assoc($resultat_requete_vin)){
//$vin = $row_resultat_requete["nom"];
}
$vin = $plats;
envoi("variable_vin",$vin);
echo $_POST['toto'];
?>