Forums Développement Multimédia

Aller au contenu

Charger variable Flashvars puis l'utiliser. Probléme de passage de variable

CODE Actionscript

12 réponses à ce sujet

#1 pauligno

    Ceinture Blanche

  • Members
  • Pip
  • 8 messages

Posté 01 July 2008 - 09:36 AM

Bonjour tout le monde,

Je cherche à réaliser une carte dynamique, qui:
- prend l'ID de l'entreprise en GET
- le met dans une variable flashvars
- pour ensuite aller chercher les paramettres grace à un fichier Php
- puis afficher les images.

Je n'arrive pas à récuperer la variable flashvars...
Et la passer ensuite du swf vers le php...

Merci pour votre aide

Voicis mon code de la page ou se trouve le swf:
$ref = $_GET['ref'];
echo'<noscript>
	<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="500" height="376" id="carte" align="middle">
	<param name="allowScriptAccess" value="sameDomain" />
	<param name="allowFullScreen" value="false" />
	<param name="flashvars" value="ref='.$ref.'">
	<param name="movie" value="carte.swf" />
        <param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />	
   <embed src="carte.swf" quality="high" bgcolor="#ffffff" width="500" height="376" name="carte"  flashvars="ref='.$ref.'" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
	</object>
</noscript>';


Mon code flash (en AS 2):

Action Script

import classes.AfficherImage;

class classes.ChargerInfos {

function ChargerInfos() {
var monChargement_lv = new LoadVars();
monChargement_lv.onLoad = function(success) {
if (success) {
monChargement_lv.ref = _root.ref;
var point:AfficherImage = new AfficherImage(_root.point_rouge, "http://localhost/carte/point/"+monChargement_lv.imagePoint, monChargement_lv.posX, monChargement_lv.posY);
var fond:AfficherImage = new AfficherImage(_root.fond_cartes, "http://localhost/carte/plan-fond/"+monChargement_lv.imageFond, 0, 0);
}
};
monChargement_lv.load("http://localhost/carte/envoi_param.php?anticache="+(new Date()).getTime(),monChargement_lv,"POST");
}
}

Puis mon fichier php:

<?php
$ref = $_POST['ref'];

function envoi($var, $val){
	echo "&".$var."=".utf8_encode($val);
}

	$db = mysql_connect('localhost', 'root', ''); //se connecte au serveur
	mysql_select_db('carte',$db);

	$result = mysql_query("SELECT * FROM point");

	$ref=0;
	$coordX=0;
	$coordY=0;
	$imagePoint="";
	while($row = mysql_fetch_assoc($result)) {
		if ($row["ref"]== $ref)
		{	
			$ref=$row["ref"];
			$coordX=$row["coordx"];
			$coordY=$row["coordy"];
			$imagePoint=$row["image"];
			$imageFond=$row["zone"];
		}
	};
	mysql_free_result($result);
	mysql_close($db);

	envoi("ref",$ref);
	envoi("posX",$coordX);
	envoi("posY",$coordY);
	envoi("imagePoint",$imagePoint);
	envoi("imageFond",$imageFond);

?>


#2 j.mertens

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 133 messages

Posté 01 July 2008 - 09:53 AM

Hello,

à première vue l'erreur se situe dans la classe ChargerInfos, pour le moment tu n'envoie aucune valeur au php en post.

Action Script

import classes.AfficherImage;

class classes.ChargerInfos {

function ChargerInfos() {
var monChargement_lv = new LoadVars();
monChargement_lv.ref = _root.ref;
monChargement_lv.onLoad = function(success) {
if (success) {
var point:AfficherImage = new AfficherImage(_root.point_rouge, "http://localhost/carte/point/"+monChargement_lv.imagePoint, monChargement_lv.posX, monChargement_lv.posY);
var fond:AfficherImage = new AfficherImage(_root.fond_cartes, "http://localhost/carte/plan-fond/"+monChargement_lv.imageFond, 0, 0);
}
};
monChargement_lv.load("http://localhost/carte/envoi_param.php?anticache="+(new Date()).getTime(),monChargement_lv,"POST");
}
}

Maintenant...
pourquoi ne pas envoyer directement toutes les variables en flashvars, tu as déjà le 'ref' pour lancer ton swf, ajoute directement les autres paramètres et plus besoin de refaire la demande via loadvars, php,...

P.S. sans être un grand expert de php, je me demande si tu n'aurais pas intérêt a adapter ta requête SQL pour ne sélectionner qu'un élément
$result = mysql_query("SELECT * FROM point WHERE ref=$ref"); 

@+
Johan

#3 pauligno

    Ceinture Blanche

  • Members
  • Pip
  • 8 messages

Posté 01 July 2008 - 10:17 AM

Citation (Johan @ Jul 1 2008, 08:53 AM) Voir le message
pourquoi ne pas envoyer directement toutes les variables en flashvars, tu as déjà le 'ref' pour lancer ton swf, ajoute directement les autres paramètres et plus besoin de refaire la demande via loadvars, php,...

Je n'envoyai pas toutes les variables en flashvars car cette carte dynamique viendrai s'afficher dans un site déjà existant qui contient que l'identifiant dans l'URL.
Oui je pourrai tout passer en flashvars, mais je n'arrive même pas à récupérer la valeur de ref que je passe en flashvars dans le flash...

Citation (Johan @ Jul 1 2008, 08:53 AM) Voir le message
à première vue l'erreur se situe dans la classe ChargerInfos, pour le moment tu n'envoie aucune valeur au php en post.

En effet...
J'essayais avant de passer en GET dans la fonction load

Action Script

monChargement_lv.load("http://localhost/zooneo/carte/envoi_param.php?ref="+_root.ref+"&anticache="+(new Date()).getTime(),monChargement_lv,"POST");

mais le fichier php ne le récupérer pas la valeur en GET ( avec biensur $ref = $_GET['ref']; dans le php)

Es ce normal que je ne puisse pas récuperer la variable en GET de la fonction load?

Citation (Johan @ Jul 1 2008, 08:53 AM) Voir le message
P.S. sans être un grand expert de php, je me demande si tu n'aurais pas intérêt a adapter ta requête SQL pour ne sélectionner qu'un élément
$result = mysql_query("SELECT * FROM point WHERE ref=$ref"); 

Merci du conseil.

Modifié par pauligno, 01 July 2008 - 10:17 AM.


#4 j.mertens

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 133 messages

Posté 01 July 2008 - 10:26 AM

re :

commence par vérifié que le passage en flashVars se fait bien.

remplace dans le premier php $ref = $_GET['ref']; par
$ref="test envoi";

et dans ton swf

Action Script

import classes.AfficherImage;

class classes.ChargerInfos {

function ChargerInfos() {
trace("FlashVars transmet ref="+_root.ref);
var monChargement_lv = new LoadVars();
monChargement_lv.ref = _root.ref;
monChargement_lv.onLoad = function(success) {
if (success) {
var point:AfficherImage = new AfficherImage(_root.point_rouge, "http://localhost/carte/point/"+monChargement_lv.imagePoint, monChargement_lv.posX, monChargement_lv.posY);
var fond:AfficherImage = new AfficherImage(_root.fond_cartes, "http://localhost/carte/plan-fond/"+monChargement_lv.imageFond, 0, 0);
}
};
monChargement_lv.load("http://localhost/carte/envoi_param.php?anticache="+(new Date()).getTime(),monChargement_lv,"POST");
}
}


Il s'agit peut-être d'un probleme a la base... si ref n'est pas transmis au swf, forcément il ne le sera pas au php ensuite...

@+
Johan

#5 pauligno

    Ceinture Blanche

  • Members
  • Pip
  • 8 messages

Posté 01 July 2008 - 10:37 AM

Mais lorsque je publie et je teste sur mon serveur local ya plus moyen de voir les trace() non?

Je fais un text dynamique plutot

Action Script

_root.test.text = "FlashVars transmet ref="+_root.ref; 

Modifié par pauligno, 01 July 2008 - 10:40 AM.


#6 pauligno

    Ceinture Blanche

  • Members
  • Pip
  • 8 messages

Posté 01 July 2008 - 10:59 AM

En écrivant directement dans les balises objet et embed mon flash n'arrive pas a sortir les variables flashvars

Code
<!-- saved from url=(0013)about:internet -->
&lt;script language="javascript">
    if (AC_FL_RunContent == 0) {
        alert("Cette page nécessite le fichier AC_RunActiveContent.js.");
    } else {
        AC_FL_RunContent(
            'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0',
            'width', '500',
            'height', '376',
                        ....
                        
                        ....
            'salign', ''
            ); //end AC code
    }
</script>

<noscript>
    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="500" height="376" id="carte" align="middle">
    <param name="allowScriptAccess" value="sameDomain" />
    <param name="allowFullScreen" value="false" />
    <param name="flashvars" value="[b]ref=test[/b]">
    <param name="movie" value="carte.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />    <embed src="carte.swf" quality="high" bgcolor="#ffffff" width="500" height="376" name="carte" flashvars="[b]ref=test[/b] "align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
    </object>
</noscript>
</body>
</html>


Sur le flash il ne s'affiche que:

FlashVars transmet ref=undefined

Modifié par pauligno, 01 July 2008 - 11:03 AM.


#7 j.mertens

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 133 messages

Posté 01 July 2008 - 11:54 AM

Salut,

si tu utilises AC_FL_RunContent tu dois aussi y intégré flashvars :

AC_FL_RunContent(
'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0',
'width', '500',
'height', '376',
....

....
'salign', ''
'FlashVars','ref=test'
); //end AC code


@+
Johan

#8 pauligno

    Ceinture Blanche

  • Members
  • Pip
  • 8 messages

Posté 01 July 2008 - 12:05 PM

Merci Johan!! au moins maintenant la flashvars se charge!

Bon maintenant il reste à faire passer la variable ref vers le php.

Je vais essayer de la faire passer en GET

Action Script

 monChargement_lv.load("http://localhost/zooneo/carte/envoi_param.php?ref="+_root.ref+"&anticache="+(new Date()).getTime(),monChargement_lv,"POST"); 

OU es ce qu'il faut que je fasse un send() pour envoyer ref puis un load() ca me parait bizare dans la même fonction...

Une idée?

Sinon je fais tout passer par flashvars

#9 pauligno

    Ceinture Blanche

  • Members
  • Pip
  • 8 messages

Posté 01 July 2008 - 13:06 PM

Je pense avoir trouver la fonction qu'il me faut : SendAndLoad()

Je regarde tout de suite les détails de cette fonction et je vois si ca marche!

#10 pauligno

    Ceinture Blanche

  • Members
  • Pip
  • 8 messages

Posté 01 July 2008 - 14:04 PM

Je pense avoir compris le mecanisme du sendAndLoad()
Il faut deux loadvars: un envoyeur et un receveur.

Mon envoyeur envoi la variable ref pour que mon fichier php puisse marcher
puis mon loadvars qui est censer recevoir de recoit rien...
Je fait un affichage test pour voir et rien du tout...

Action Script


import classes.AfficherImage;

class classes.ChargerInfos {

function ChargerInfos() {
_root.test.text = "FlashVars transmet ref="+_root.ref+"\n";
var monChargement_lv = new LoadVars();
var envoyeur = new LoadVars();

envoyeur.ref = _root.ref;
_root.test.text += "envoyeur transmet ref="+envoyeur.ref+"\n";
monChargement_lv.onLoad = function(success) {
if (success) {
var point:AfficherImage = new AfficherImage(_root.point_rouge, "http://localhost/carte/point/"+monChargement_lv.imagePoint, monChargement_lv.posX, monChargement_lv.posY);
var fond:AfficherImage = new AfficherImage(_root.fond_cartes, "http://localhost/carte/plan-fond/"+monChargement_lv.imageFond, 0, 0);
_root.test.text += "chargement transmet image="+monChargement_lv.imagePoint+"\n";
}
};
envoyeur.sendAndLoad("http://localhost/carte/envoi_param.php?anticache="+(new Date()).getTime(),monChargement_lv,"POST");
}
}

PS: J'ai bien mis la variable $ref en POST dans mon fichier php.


#11 j.mertens

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 133 messages

Posté 01 July 2008 - 14:23 PM

Pour trouver la faille... travaillons par étapes icon_mrgreen.gif

Vérifie premièrement si le php réagit convenablement.
change

# <?php
# $ref = $_POST['ref'];

par

# <?php
# $ref = 'IDvalable'; ou IDvalable est une valeur que tu es sur de trouver dans ta base de données

ensuite lance le script php en direct et voit ce qu'il te sort...
En cas d'erreur dans le script, flash ne recevra rien et ca ne se voit pas
En cas de sortie à l'écran contrôle si c'est correct...

Johan

#12 j.mertens

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 133 messages

Posté 01 July 2008 - 14:26 PM

P.S. à première vue j'oublierais l'anticache sur le script php

envoyeur.sendAndLoad("http://localhost/carte/envoi_param.php",monChargement_lv,"POST"); 



#13 pauligno

    Ceinture Blanche

  • Members
  • Pip
  • 8 messages

Posté 01 July 2008 - 15:17 PM

J'ai trouvé!!

Il a fallu que je mette le $_POST['ref']

à l'intérieur du while et du mysql_fetch_assoc

et pour l'instant ca marche!

Merci encore Johan gourou.gif



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)