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

Langage PHP Discussion :

une fonction dans un json [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Points : 9
    Points
    9
    Par défaut une fonction dans un json
    Bonjour,

    Dans un json je souhaite mettre une fonction qui serait ensuite envoyée et interprétée en javascript par eval, par exemple : {"fct":"maFonction(maVariable, 'monTexte');"}
    Jusque là tout va bien, mais quid pour gérer monTexte avec une apostrophe ?
    Je précise que le tout est stocké dans un champ mySQL avant d'être relu et transmis.

    J'ai essayé plusieurs manières de faire avec addslashes notamment mais rien n'y fait, soit le json n'est plus interprété par PHP en tant que tel (en base j'ai une double quote dans mon texte qui flingue le json), soit c'est au niveau de l'interprétation coté javascript où j'ai un apostrophe dans mon texte qui flingue son interprétation.

    Je tourne en bourrique

    Help !!!

    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
     
    $monTexte = "Mon test d'ici";  // ou bien $monTexte = "Mon test d\'ici"; avec addslashes par exemple
    $fctCall .= "maFonction(msg.get('idMsg'),'".$monTexte."');";
    $allData = '{"fct":"'.$fctCall.'"}';
    // Tout en chargé en base
     
    // Ensuite dans une autre fonction, je decode le champ
    $data = json_decode($ligne->data);
    if ($data == NULL)
        $json .= '"actionClient":"" ';
    else {
        if ((!isset($data->fct)) || ($data->fct == ""))
           $json .= '"actionClient":"" ';
        else {
           // je construis le json que je retourne
              $json .= '"actionClient":"' . $data->fct . '" ';    
        }
    }
    //J'envoie le tout
    En Javascript j'utilise eval
    • soit actionClient contient : maFonction(msg.get('idMsg'),'Mon test d'ici'); et donc j'ai une erreur javascript [en base dans ce cas j'ai : {"fct":"'maFonction(msg.get('idMsg'),'Mon test d'ici');"} ce qui permet au son de fonctionner]
    • soit actionClient est vide car $data est NULL car dans ma base j'ai : {"fct":"'maFonction(msg.get('idMsg'),'Mon test d\'ici');"} ou {"fct":"'maFonction(msg.get('idMsg'),'Mon test d\\\'ici');"} et il semblerait qu'un anti-slashe perturbe le json_decode (pourquoi d'ailleurs ?)


    Quelqu'un aurait une petite idée svp ?

    Par avance merci

    Cdlt
    LaZag

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    D'ou vient le ' devant maFonction ?
    "'maFonction
    que tu indiques avoir dans ta base de données ?

    Le code que tu nous montres ne le produit pas.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par sabotage Voir le message
    D'ou vient le ' devant maFonction ?

    que tu indiques avoir dans ta base de données ?

    Le code que tu nous montres ne le produit pas.
    C'est un copié/collé du code précédent, en base il n'y est pas en fait.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le code que tu nous as montré produit donc
    "actionClient":"maFonction(msg.get('idMsg'),'Mon test d'ici');"
    il se passe quoi après ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    L'exécution coté javascript plante parce qu'un apostrophe dans le texte.

    J'ai remarqué que mes anti-slashes s'évaporent à chaque étape !

    Entre le PHP (json renvoyé via echo) et la réception client (firefox/firebird) j'en perds 1 :
    Si j'avais écris "actionClient":"maFonction(msg.get('idMsg'),'Mon test d\'ici');" en PHP,
    j'obtiens à la réception sur le client : "actionClient":"maFonction(msg.get('idMsg'),'Mon test d'ici');"

    Idem ensuite avec le parsing (j'utilise sencha 5.1 et une grid chargée avec store.load()) :
    Si j'avais écris "actionClient":"maFonction(msg.get('idMsg'),'Mon test d\\'ici');" en PHP,
    j'obtiens sur le client "actionClient":"maFonction(msg.get('idMsg'),'Mon test d\'ici');"
    et juste avant l'eval : "actionClient":"maFonction(msg.get('idMsg'),'Mon test d'ici');" !!!!

    Du coup, si je mets 3 anti-slashes en PHP ça marche, mais c'est bizarre

    Merci pour ton aide et si quelqu'un a une explication, je suis preneur.

    Cdlt

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    j'obtiens sur le client "actionClient":"maFonction(msg.get('idMsg'),'Mon test d\'ici');"
    et juste avant l'eval : "actionClient":"maFonction(msg.get('idMsg'),'Mon test d'ici');"
    Tu pourrais déjà chercher ce qui se passe entre les deux.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation d'une fonction dans une procedure
    Par MaxiMax dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/08/2005, 15h51
  2. Comment rappeler une fonction dans une liste déroulante
    Par strogos dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/05/2005, 23h54
  3. Appel d'une fonction dans uns boucle d'un tableau
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/02/2005, 15h37
  4. Réponses: 4
    Dernier message: 26/01/2005, 13h08
  5. Programmation d'une fonction dans Rn
    Par simone.51 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 12/11/2004, 11h30

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