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 :

Parsage avec la fonction eval


Sujet :

Langage PHP

  1. #1
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut Parsage avec la fonction eval
    Bonjour,

    J'ai un souci pour parser avec eval, une chaine composée d'éléments (variables) tirés d'une db.

    La ligne de test dans mon application est celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    if($index==12 OR $index==13 OR $index==14)
    		{print(" bgcolor=\"$color5\"");}
    Dans le cas de figure ci-dessus et en utlisant une ligne de script "pur", mon affichage est conforme.



    En revanche et ci-dessous, si je récupére en amont mes variables dans une chaine de caractére et en utilisant la fonction eval pour que ce soit considéré comme du script, ce n'est pas interprété et mon affichage ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    //.........
     
    $selection='$index==12 OR $index==13 OR $index==14';
    $commande ='$selection';
    eval( "\$commande = \"$commande\";" );
    //......
     
    if ($commande)
    		{print(" bgcolor=\"$color5\"");}
    J'ai pourtant fait un test :echo $commande;
    Et ma ligne s'affiche correctement :
    $index==12 OR $index==13 OR $index==14

    Peut-être avez-vous une explication, ou un conseil à me donner svp ?

    Merci par avance.
    Cordialement
    Alain

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 39
    Points : 31
    Points
    31
    Par défaut Re: Parsage avec la fonction eval
    essais plustot quelque chose comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    //.........
     
    $selection='($index==12 OR $index==13 OR $index==14)?1:0';
    $commande ='$selection';
    eval( "\$commande = \"$commande\";" );
    //......
     
    if ($commande)
    		{print(" bgcolor=\"$color5\"");}
    la je pense que ca devrais marcher.
    car ici si les condition sont vrai il retrournera 1 sinon il retournera 0.

  3. #3
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Et bien non.

    Celà ne rgéle en rien mon probléme.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    exacte ca marche pas.
    essaie ca dans une page a part et tu devrais comprendre le fonctionnement :
    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
    $index=11;
    $selection='($index==12 OR $index==13 OR $index==14)?1:0';
    $commande ='$selection';
    eval( "\$commande = \"$selection\";" );
    print "commande : $commande<br>";
    if ($commande)
          print(" YOUPIIII<br>");
    else
          print(" BOUUUUU<br>");
    $index=12;
    $selection='($index==12 OR $index==13 OR $index==14)?1:0';
    $commande ='$selection';
    eval( "\$commande = \"$commande\";" );
    print "commande : $commande<br>";
    if ($commande)
          print(" YOUPIIII<br>");
    else
          print(" BOUUUUU<br>");

  5. #5
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    ok, j'ai bien pigé la manoeuvre mais le résultat est le même.
    D'ailleurs dans les 2 cas, il affiche "youpi", ce qui est illogique.

    Dans ton premier exemple :
    Si on attribue 11 à $index, la réponse devrait être "bouu" et ce n'est pas le cas.

    donc non fonctionnel.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    au contraire ca fonctionne tres bien, mais pas suivant tes attentes.

    si tu as bien regarder la sortie $commande vaut une chaine de caractere donc le if($commande) est vrai donc il rentre.

    avec cette exemple on vois juste que pour faire e que tu desires la fonction eval n'est pas approprié.

    pour t'aider plus il faudrait connetre ce qu'il y a avant cette portion de code et surtout le fonctionnement que tu desires.

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Salut,

    D'après ce que je comprends, ce n'est pas la commande eval() qui n'est pas appropriée mais plutot l'utilisation des guillements

    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
    $index=11;
    $selection='($index==12 OR $index==13 OR $index==14)';
    $commande ='$selection';
    eval( "\$commande = $selection;" );
    print "commande : $commande<br>";
    if ($commande)
          print(" YOUPIIII<br>");
    else
          print(" BOUUUUU<br>");
     
    $index=12;
    $selection='($index==12 OR $index==13 OR $index==14)';
    $commande ='$selection';
    eval( "\$commande = $selection;" );
    print "commande : $commande<br>";
    if ($commande)
          print(" YOUPIIII<br>");
    else
          print(" BOUUUUU<br>");
    semble donner ce que tu veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    commande :
    BOUUUUU
    commande : 1
    YOUPIIII

    En effet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval("\$commande = \"$selection\";");
    est évalué en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $commande = "($index==12 OR $index==13 OR $index==14)";
    donc $commande est une chaine de caractère



    En revanche sans les guillemets, ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $commande = ($index==12 OR $index==13 OR $index==14);
    ici $commande est une booléen.

    J'ai bon ?

  8. #8
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Effectivement, il est probable que la fonction eval ne convienne pas.

    Un peu plus de détail.
    En fait, mon applicatif est un calendrier mensuel.

    J’effectue une requete préalable qui vérifie si certains événements (variables) sont attribués à des jours précis, et je transforme le résultat en une chaine ( je passe sur les différentes manipulations). :


    Exemple chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $selection='$index==12 OR $index==13 OR $index==14';
    ou 
    $selection='$index==15 OR $index==20 OR $index==21';
     
     
    etc...
    J'utilise ensuite la fonction eval pour que cette selection ne soit plus interprétée comme une chaine, mais comme un script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    $selection='$index==12 OR $index==13 OR $index==14';
             $commande ='$selection';
             eval( "\$commande = \"$commande\";" );
    Et je procéde à l'affichage .

    Celui ci-dessous fonctionne correctement, mais c'est normal puisque la ligne
    $index==12 OR $index==13 OR $index==14
    est écrite en script (pour test)

    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
    for($index=1;$index<=$nb_jours[$c_mois];"")
    {
    	while($pos<=37 AND $index<=$nb_jours[$c_mois])
    	{
    		print("<td align=\"center\"");
     
     
     
     if($index==12 OR $index==13 OR $index==14 )
    		{print(" bgcolor=\"$bgcolor5\"");}
     
     
     		print("<a href=\"mapage.php3?&c_jour=$index&c_mois=$c_mois&c_annee=$c_annee\">$index</a></td>");		
     
    $index++;
    $pos++;
     
     
    	}
           }
     
    .....................................................
    Par contre si je remplace ma ligne :

    if($index==12 OR $index==13 OR $index==14 )

    Par :

    if ($commande)

    Celà ne fonctionne pas.

    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
     
     
     
    for($index=1;$index<=$nb_jours[$c_mois];"")
    {
    	while($pos<=37 AND $index<=$nb_jours[$c_mois])
    	{
    		print("<td align=\"center\"");
     
     
     
    if ($commande)
    		{print(" bgcolor=\"$bgcolor5\"");}
     
     
     
     
    print("<a href=\"mapage.php3?&c_jour=$index&c_mois=$c_mois&c_annee=$c_annee\">$index</a></td>");		
     
    $index++;
    $pos++;
     
     
    	}
           }
     
    ...........................................

  9. #9
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Oups !

    Mes excuses Taum, je n'avais pas vu ta suggestion quand j'ai envoyé mon dernier post.

    Je regarde celà de prés.

  10. #10
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $selection='$index==12 OR $index==13 OR $index==14';
    $commande ='$selection';
    eval( "\$commande = \"$commande\";" );
    Revient à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $commande = "'$selection'";
    Ce qui ne risque pas de marcher.

    En tout cas eval est à proxire au maximum. C'est la galère à débugger, la preuve avec ce thread. Je te conseille vivement de changer de manière de faire, sinon soit toi, soit celui qui passera derrière toi se tirera une balle !

  11. #11
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Oui, celà fonctionne de cette façon... en attendant plus fonctionnel.

    Je vais tout de même suivre le conseil de Mr. N.
    ....hara-kiri en hiver...hum!

    Merci pour vos interventions respectives.

    cordialement
    Alain

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Citation Envoyé par Mr N.
    En tout cas eval est à proxire au maximum. C'est la galère à débugger, la preuve avec ce thread. Je te conseille vivement de changer de manière de faire, sinon soit toi, soit celui qui passera derrière toi se tirera une balle !
    Tout à fait d'accord !
    Proxisons alors

  13. #13
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut [RESOLU] Parsage avec la fonction eval
    Hum...!

    Bon, celà fonctionne pour cette partie du script mais semble compliquer les choses pour la suite de mon application.

    Bien vu Mr. N.

    Donc, à la trappe la fonction eval().


    Encore merci à vous.

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

Discussions similaires

  1. fatal error avec la fonction eval()
    Par ren84 dans le forum Langage
    Réponses: 5
    Dernier message: 25/04/2013, 10h31
  2. [ASP][NET1.1]Probleme avec la fonction DataBinder.Eval()
    Par Cervantes dans le forum ASP.NET
    Réponses: 10
    Dernier message: 25/04/2007, 16h49
  3. Probleme avec la fonction eval()
    Par ludobado dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 07/03/2007, 22h28
  4. Réponses: 2
    Dernier message: 30/08/2006, 15h08
  5. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22

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