PHP Eval

Résolu
Poil -  
croy Messages postés 453 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
J'ai un soucis sur un eval,

Je récupère depuis une base de donnée une expression, dans cette expression je fais un str_replace et elle ressemble donc à cela quand je l'affiche :
($PSYS_maxPerm - $dbc_maxPerm - $spoolrsv_maxPerm)

Donc mon str_replace
$foovar=str_replace('[TYPE]',$typeesp['var_type_espace'][$i],$catespc['chaine_baseS'][$j]);
echo $foovar;

ensuite je veux que PHP évalue mon expression
$myvar=eval('$foovar;');

mais si je fais un echo de $myvar, la variable est vide.

Si j'affiche chaque variable contenu de mon expression:
echo $PSYS_maxPerm.' '.$dbc_maxPerm.' '.$spoolrsv_maxPerm;
3.77692582244E+12 2137464490844 1639461331600

en mettant en forme avec un round et divisez par /1000000 :
03776.926 - 2137.464 - 1639.461 = 0

Une idée ?
A voir également:

4 réponses

croy Messages postés 453 Date d'inscription   Statut Membre Dernière intervention   114
 
Remplace donc
$myvar=eval('$foovar;');

par
$myvar=eval( $foovar . ";" );
0
Poil
 
Non plus :(

Si je fais

1: echo $foovar.'<br />';
2: echo eval ($foovar . ';');

3: $myvar=eval( $foovar . ";" );
4: echo $myvar;

Ca me donne juste
1:
($PSYS_maxPerm - $dbc_maxPerm - $spoolrsv_maxPerm)
($PSYS_currentPerm - $dbc_currentPerm - $spoolrsv_currentPerm)
($PSYS_freePerm - $dbc_freePerm - $spoolrsv_freePerm)
($PSYS_skewedPerm - $dbc_skewedPerm - $spoolrsv_skewedPerm)

Cdt
0
croy Messages postés 453 Date d'inscription   Statut Membre Dernière intervention   114
 
Pour clarifier ton test :
echo '1:' . $foovar . '<br />';
echo '2:' . eval ( $foovar . ';' ) . '<br />';

$myvar = eval( $foovar . ";" );
echo '3:' . $myvar;


Et donne le résultat par un copié/collé
0
Poil
 
1:($PSYS_maxPerm - $dbc_maxPerm - $spoolrsv_maxPerm)
2:
3:1:($PSYS_currentPerm - $dbc_currentPerm - $spoolrsv_currentPerm)
2:
3:1:($PSYS_freePerm - $dbc_freePerm - $spoolrsv_freePerm)
2:
3:1:($PSYS_skewedPerm - $dbc_skewedPerm - $spoolrsv_skewedPerm)
2:
3:
0
Poil > Poil
 
Y a un truc que je ne saisi pas avec la fonction eval en PHP :)

$foovar = '3 + 4';
echo '1:' . $foovar . '<br />';
echo '2:' . eval ( $foovar . ';' ) . '<br />';

$myvar = eval( $foovar . ";" );
echo '3:' . $myvar . '<br />';


1:3 + 4
2:
3:
0
croy Messages postés 453 Date d'inscription   Statut Membre Dernière intervention   114 > Poil
 
Je viens de consulter la doc de la fonction eval dont la valeur de retour est décrite par :
eval() retourne NULL sauf si return est appelée dans le code évalué, auquel cas la valeur passée à return est retournée. Dans le cas d'une erreur de syntaxe dans le code évalué, eval() retourne FALSE. Dans le cas d'une erreur fatale dans le code évalué, l'ensemble du script se terminera. En PHP 3, eval() ne retourne pas de valeur.

Essaye le code suivant :
$foovar = '3 + 4';
echo '1:' . $foovar . '<br />';
echo '2:' . eval ( '$monResultat=' . $foovar . ';' ) . '<br />';
echo '3:' . $monResultat;


après exécution la variable $monResultat contiendra le résultat (7).

Modifie donc ton script final pour inttégrer le résultat dans une variable passée à eval.
0
croy Messages postés 453 Date d'inscription   Statut Membre Dernière intervention   114
 
Je comprends que ces 4 echos sont dans une boucle. Pour avancer pas à pas, ne passe qu'une seule fois dans la boucle et modifie ton code de test :

echo '1:' . $foovar . '<br />';
echo '2:' . eval ( $foovar . ';' ) . '<br />';

$myvar = eval( $foovar . ";" );
echo '3:' . $myvar . '<br />';

echo '4:'; var_dump( $PSYS_maxPerm ) ; echo '<br>';
echo '5:'; var_dump( $dbc_maxPerm ); echo '<br>';
echo '6:'; var_dump( $spoolrsv_maxPerm ); echo '<br>';
0
Poil
 
1:($PSYS_maxPerm - $dbc_maxPerm - $spoolrsv_maxPerm)
2:
3:
4:float(3776925822440)
5:string(13) "2137464490844"
6:string(13) "1639461331600"


Merci de ton temps :)
0
Poil
 
Je viens de tout forcer en float au niveau de l'affectation des variables.

1:($PSYS_maxPerm - $dbc_maxPerm - $spoolrsv_maxPerm)
2:
3:
4:float(3776925822440)
5:float(2137464490840)
6:float(1639461331600)
0
Poil > Poil
 
Arf tu m'as donné la solution
$foovar = '3 + 4';
echo '1:' . $foovar . '<br />';
echo '2:' . eval ( '$monResultat=' . $foovar . ';' ) . '<br />';
echo '3:' . $monResultat;


Comme un c** je faisais $myvar=eval or le eval il retourne true ou false et non le résultat de l'opération.

Merci beaucoup !
0
croy Messages postés 453 Date d'inscription   Statut Membre Dernière intervention   114
 
S'il est nécessaire de te consoler, je suis aussi un C**. On peut aussi considérer que nous avons appris deux choses :
- le fonctionnement de eval
- l'importance de lire la doc.
0