IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

Encodage entre PHP et Flash (AMFPHP)


Sujet :

ActionScript 3

  1. #1
    Membre habitué Avatar de demonixis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2008
    Messages : 80
    Points : 150
    Points
    150
    Par défaut Encodage entre PHP et Flash (AMFPHP)
    Bonjour,

    Je travail actuellement sur un projet (dans le cadre de mes études) qui m'a été confié durant mon stage. Je devais créer un système d'informations pour lycée avec d'un coté une partie cliente en flash/CS4 et d'un autre coté, une partie Serveur apache, MySQL.

    J'ai donc créer une interface d'administration intranet ou j'entre et modifie des informations. Depuis cette interface d'administration je peux lancer mon programme flash (dans le navigateur). Ce dernier ce connecte via AMFPHP à ma base de donnée par l'intermédiaire de PHP.

    Mon problème est simple, mais je ne trouve pas la solution : Les informations que j'entre dans ma base de donnée sont toutes encodées en UTF-8 et d'ailleurs mes entête de page web sont déclarées en UTF-8, et je les visualisent correctement. Par contre lorsque je visualise ces même informations avec flash et bien les accents se transforment en caractères bizarres etc... Seul les caractères "standards" sont affichés correctement.

    Un autre fait bizarre : Le fichier qui contient la classe de liaison entre PHP et Flash (le service utilisé par AMFPHP) doit être encodé en UTF-8 sans Bom, sinon mon application flash ne parvient pas à lire le fichier XML que j'envoie en flux...

    Voila quelques morceaux de codes commentés :

    Voici comment j'entre des données dans la base de donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Si on a au moins un titre, un type d'info et un texte  
    if (isset($_POST['titre']) && isset($_POST['info_saisie']))
    {
        $titreInfo = utf8_encode(addslashes($_POST['titre']));
        $infoSaisie = utf8_encode(addslashes($_POST['info_saisie']));
        $date = addslashes($_POST['date']);
        // Du code de traitement
        $req  = "INSERT INTO informations VALUES('', '" . $rang . "', '" . $date . "', '" . $_SESSION['login'] . "', '" . $titreInfo . "', '" . $infoSaisie . "', '" .$image . "', '" . $video . "', '" . $typeInformation . "')";       
         mysql_query($req) or die(mysql_error());
    Et voici comment j'affiche les informations dans la page de visualisation (php)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo nl2br(utf8_decode(stripslashes($retour['message']))); ?>
    Et jusqu'a la, tout ce passe bien, les informations issues de la base de données sont bien affichées. Par contre lorsque je passe tout ca sur flash c'est autre chose... voyez la suite :

    Cette fonction envoi un fichier XML en flux a mon application flash :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function informationsToXML()
        {
            mysql_connect ("localhost", "####", "######");
            mysql_select_db ("infolyc");
     
     
            $compterInformations = mysql_query("SELECT COUNT(*) as taille FROM informations") or die(mysql_error());
            $nombreInformations = mysql_fetch_array($compterInformations);
            $taille = $nombreInformations['taille'];
     
     
            $XMLAbs = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
            $XMLInfo .= "<informations>\r\n";
            $XMLInfo .= "\t<nombre>" . $taille . "</nombre>\r\n";
     
            if ($_SESSION['droits'] == 1) // BVS
                $reqInformations = mysql_query("SELECT * FROM informations WHERE type='1' ORDER BY rang DESC") or die(mysql_error());
            else
                $reqInformations = mysql_query("SELECT * FROM informations ORDER BY rang DESC") or die(mysql_error());
     
            while ($informations = mysql_fetch_array($reqInformations))
            {
                $titre = utf8_decode(stripslashes($informations['titre']));
                $date = date('d/m', $informations['date']);
     
     
                $message = utf8_decode(stripslashes($informations['message']));
                $htmlBr = array ("<br />", "\r\n");
                $message = str_replace($htmlBr, "\n", $message);
     
                $image = stripslashes($informations['image']);
                $video = stripslashes($informations['video']);
                $XMLInfo .= "\t<info>\r\n";
                $XMLInfo .= "\t\t<titre>" . $titre . "</titre>\r\n";
                $XMLInfo .= "\t\t<date>" . $date . "</date>\r\n";
                $XMLInfo .= "\t\t<information>" . $message . "</information>\r\n";
                $XMLInfo .= "\t\t<image>" . $image . "</image>\r\n";
                $XMLInfo .= "\t\t<video>" . $video . "</video>\r\n";
                $XMLInfo .= "\t</info>\r\n";
            }
            $XMLInfo .= "</informations>";
            mysql_close();
     
            return $XMLInfo;
        }
    Dans flash j'utilise AMFPHP comme expliqué dans la tutoriel sur AS3 disponible sur le site (qui au passage est un fantastique ouvrage).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function connexionServeur() : void {
        // Remplacer localhost par l'IP du serveur
        // connexion.connect("172.16.0.3/infolyc/infolyc/echange/gateway.php");
        connexion.connect("http://localhost/infolyc/infolyc/echange/gateway.php");
        connexionInfo.connect("http://localhost/infolyc/infolyc/echange/gateway.php");
    // Du code de traitement
    // L'objet connexion appel les methodes de la class Echanges
        // Cette classe PHP utilise le framework AMFPHP
        connexion.call ("Echanges.absencesToXML", retourServeurAbsence);
        connexionInfo.call ("Echanges.informationsToXML", retourServeurInformation);
    }
     
    // Récupère les informations et les transmets au parseur
    function succesInfo(e:*) : void {
        XMLInfo = new XML(e);
        XMLInfo.ignoreWhitespace = true;
        parseInformations(XMLInfo);
    }
     
    // Parseur de données informations
    function parseInformations(donnee:XML) : void {
        nombreInfo = new Number(donnee.nombre);
        titre = new Array(nombreInfo);
        date = new Array(nombreInfo);
        information = new Array(nombreInfo);
        image = new Array(nombreInfo);
        video = new Array(nombreInfo);
     
        // On rempli les tableau avec les données du fichier XML
        for (var i:Number = 0 ; i < nombreInfo ; i++) {
            titre[i] = new String(donnee.info.titre.text()[i]);
            date[i] = new String(donnee.info.date.text()[i]);
            information[i] = new String(donnee.info.information.text()[i]);
            image[i] = new String(donnee.info.image.text()[i]);
            video[i] = new String(donnee.info.video.text()[i]);
        }
    }
    C'est lourd à lire et c'est pour çela que j'ai bien pris le temps de vous expliquer les étapes. J'espère que vous pourrez m'aider car je but complètement.

    Merci pour votre patience

  2. #2
    Membre habitué
    Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Juin 2009
    Messages : 130
    Points : 176
    Points
    176
    Par défaut
    Bonjour,

    Comment affiches-tu le contenu dans ton TextField au final? Tu utilises htmlText?

  3. #3
    Membre habitué Avatar de demonixis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2008
    Messages : 80
    Points : 150
    Points
    150
    Par défaut
    Non, a vrai dire, j'ai commencé flash/AS3 en même temps que le projet, donc il y a surement des choses que je ne maitrise pas encore. Voila ma fonction d'affichage pour les informations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function afficheInformations(i:Number) : void {
        if (nombreInfo != 0) {
            this.renderLeft.infoTitre.text = "Le " + date[i] + " : " + titre[i];
            this.renderLeft.infoMessage.text = information[i];
            if (image[i] != '0') {
                //afficher une image
            }
            else {
                // Image par defaut
            }
            if (video[i] != '0') {
                //afficher une vidéo
            }
        }
    }
    Comme vous pouvez le voir, j'utilise l'attribut text.

    Je vais faire des tests avec htmltext pour voir, merci pour ce début (voir même) cette solution.

Discussions similaires

  1. Problème de chargement entre php et flash
    Par Target56 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 16/11/2011, 16h36
  2. [PHP-JS] Encodage entre PHP et JS
    Par Akinion dans le forum Langage
    Réponses: 4
    Dernier message: 14/02/2007, 16h57
  3. [FLASH 8] Echange entre php et flash
    Par jbidou88 dans le forum Dynamique
    Réponses: 1
    Dernier message: 18/12/2006, 09h35
  4. [FLASH 8] Variables entre php et flash
    Par jbidou88 dans le forum Flash
    Réponses: 2
    Dernier message: 23/11/2006, 13h27
  5. Réponses: 3
    Dernier message: 12/02/2005, 00h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo