[Php] fonction eval() : qui peut m'expliquer ce résultat?

fonction eval() : qui peut m'expliquer ce résultat? [Php] - Programmation

Marsh Posté le 22-02-2002 à 10:50:27    

Voilà, j'essaie d'utiliser eval() dans mon code.
Je créée un string avec une boucle "for"
-----------------------------
$str = "TraitementCra(\$Month,\$Year,\$nom,\$prenom,";
 
for($l=1;$l<15;$l++) {
 for($k=1;$k<32;$k++) {
             $str .= "$J".$k."AMP".$l.",";
             $str .= "$J".$k."PMP".$l.",";
 }
}
 
$str .= "\$Day)";
-----------------------------
Puis avec eval()
 
eval( "\$str = \"$str\";" );
-----------------------------
Quand je fais un echo, j'obtiens :
TraitementCra(02,2002,zer,zer,1AMP1,1PMP1,2AMP1,2PMP1,3AMP1,3PMP1,4AMP1...
 
Bref, touts les '$J' ont disparu...
 
Pourquoi :??:

 

[jfdsdjhfuetppo]--Message édité par Thocan--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 22-02-2002 à 10:50:27   

Reply

Marsh Posté le 22-02-2002 à 12:05:48    

qd tu fais ça:
$str .= "$J".$k."AMP".$l.",";  
 
les $J sont évalués
en effet quand tu mets une variable dans une string délimitées par des doubles quotes ", cette variable est évaluée puis "insérée" dans la string.
Pour éviter cela, utilise des simples quotes ' à la place de "
 
A+

Reply

Marsh Posté le 22-02-2002 à 12:06:22    

Et y vaut quoi $J dans ton truc ? ? ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 22-02-2002 à 12:13:02    

je pense qu'il veut créer dynamiquement des noms de variable, ie récupérer $J1AMP1... et comme $J n'est pas définit, il récupére 1AMP, non?
 
si tel est le cas, je lui conseillerai un un ptit tour sur be.php.net section manuel, nom dynamique de variable...

Reply

Marsh Posté le 22-02-2002 à 12:28:31    

dropsy a écrit a écrit :

je pense qu'il veut créer dynamiquement des noms de variable, ie récupérer $J1AMP1... et comme $J n'est pas définit, il récupére 1AMP, non?
 
si tel est le cas, je lui conseillerai un un ptit tour sur be.php.net section manuel, nom dynamique de variable...  




 
Vi c exactement ça!  :)  
Je vais voir sur le site en question...

Reply

Marsh Posté le 22-02-2002 à 12:36:39    

Je pensais qu'il connaissais le truc le l'interprétation des variables dans les chaînes "..." puisqu'il pense à faire çà :
$str = "TraitementCra(\$Month,\$Year,\$nom,\$prenom,";  
 
? ? ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 22-02-2002 à 12:38:57    

$tmp = $j."AMP1";
si $j vaut "TE", $tmp vaut donc "TEAMP1"
ensuite pour recuperer la valeur de la variable $TEAMP1 il te suffit d'utiliser $$tmp (avec deux $)

Reply

Marsh Posté le 22-02-2002 à 12:51:33    

Donc, j'ai réussit à écrire mes deux strings.
echo $str; vaut "function toto($A,$B...) { blabla };"
echo $str1; vaut "toto(arthur,jean,...);"
 
Bref, j'ai donc bien un string qu définit ma fonction et l'autre qui la lance.
 
Mais ensuite comment faire en sorte que le php l'interprète?
avec eval(), sans doute mais...
J'ai essayé :
$fonction = "return(".$str." );";
mais ça me sort une erreur :
Parse error: parse error in c:\program files\easyphp\www\html\Tmis\Formulaires\cracra.php(65) : eval()'d code on line 1
 :(

Reply

Marsh Posté le 22-02-2002 à 12:55:14    

eval($str);
mais $str doit se terminer avec un ;

Reply

Marsh Posté le 22-02-2002 à 13:49:37    

c pourtant le cas... :(

Reply

Marsh Posté le 22-02-2002 à 13:49:37   

Reply

Marsh Posté le 22-02-2002 à 14:04:08    

Il cherche bien la fonction traitementcra().
Donc mon deuxième string fonctionne très bien.
 
Mais apparemment, le premier n'est pas reconnu.

Reply

Marsh Posté le 22-02-2002 à 15:01:52    

http://be.php.net/manual/fr/function.eval.php
la première remarque des utilisateurs correspond à ton cas, non?
sinon, si tu pouvais donner exactement la ligne où il y a le eval avec la valeur des différents paramètres, parce que je me perd un :pt1cable:

Reply

Marsh Posté le 22-02-2002 à 16:21:41    

Vi, je connais cette page par coeur...
J'ai tout essayé mais rien ne fonctionne...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed