JeuWeb - Crée ton jeu par navigateur
[réglé] Problème avec eval() - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [réglé] Problème avec eval() (/showthread.php?tid=1777)

Pages : 1 2


[réglé] Problème avec eval() - Seals - 18-09-2007

Bonsoir,

j'ai un problème avec eval().

Par exemple :

Code PHP :
<?php 
$calc
= 15*6;

$expr = "\$var = " . $calc . ";";

eval(
$expr);
echo
$var;

c'est bon, y'a pas de soucies.

En revanche :
Code PHP :
<?php 
$calc
= (15*6) - 6));

$expr = "\$var = " . $calc . ";";

eval(
$expr);
echo
$var;

Par exemple si $calc contien un problème de parenthèses, genre 1 parenthèse en trop, ça retourne une erreur :

Parse error: syntax error, unexpected '(' in /mnt/145/sdb/a/8//calcul.php(14) : eval()'d code on line 1


Ce que je voudrais, c'est savoir si la variable contien un problème de parenthèse, et si oui j'affiche une erreur au lieu de me prendre une erreur php dans la tronche ^^

Quelqu'un vois comment faire ?

j'ai essayé ainsi :

Code PHP :
<?php 
$expr
= "\$var = " . $calc . ";";

if (@eval(
$expr)) {
echo
$var;
}
else {
echo
'erreur';
}

Mais qu'il y est un problème de parenthèse ou non, ça m'affiche toujours 'erreur'.


Merci d'avance


RE: Problème avec eval() - denisc - 18-09-2007

L'erreur est sur la ligne de $calc=...
Tu dois utiliser une chaine de caractère, sinon le code est interprété et se plante si tu as une erreur de parenthèses!


RE: Problème avec eval() - Seals - 18-09-2007

Mais je récupère des nombres envoyé par $_POST, comment je peu transphormer ça en chaine de caractères ?

edit : voilà le code en entié :
Code PHP :
<?php
if (isset($_POST['calc'])) {


if(
eregi('[a-z]',str_replace(' ','',$_POST['calc']))){

header('location: seagle.php?get=Erreur');

}
else {

$expr = "\$var = " . $_POST['calc'] . ";";

if (@eval(
$var)) {
header('location: seagle.php?get='.$var.'&calc='.$_POST['calc'].'');
}
else {
echo
'erreur';
}

}
}
else {
?>
T'es un génie, quelle interrêt d'ouvrir cette page sans faire de calcule ?
<?php
}
?>

ça m'affiche 'erreur' à chaque fois.


RE: Problème avec eval() - Bob le Pointu - 19-09-2007

Si j'ai bien compris, c'est la variable $expr qui doit être évaluée, et non pas $var.

L'erreur serait donc logique.


RE: Problème avec eval() - Seals - 19-09-2007

Nan, là j'ai retapé vite fait le code ... et j'ai inversé les deux variables.

Mais je ne demande pas comment ou pourquoi il y a une erreur,
je demande comment savoir si l'eval contien une erreur de calcule, et si oui, afficher un message en concéquence.


RE: Problème avec eval() - Bob le Pointu - 19-09-2007

Tu peux afficher la variable à évaluer afin d'évaluer si la syntaxe PHP est correcte.

Sinon, au niveau erreur de calcul, dans le premier message il y a :

$calc = (15*6) - 6));

Soit il y a des parenthèses en trop, soit tu veux faire le calcul plus tard grâce à eval().
Dans ce cas il faut en effet la transformer en chaîne de caractère :

$calc = '(15*6) - 6))';


RE: Problème avec eval() - Seals - 19-09-2007

Merci ^^

Mais le problème, c'est que si je transphorme en chaine de caractères, eval() ne calculera plus car pour lui ce ne sera plus un calcul, si ?


RE: Problème avec eval() - Bob le Pointu - 19-09-2007

J'ai un peu de mal à tout cerner, mais j'essaie quand même.
Code :
eval('$x = 5+3*12;');

revient à écrire

Code :
$x = 5+3*12;

C'était ça la question ?


RE: Problème avec eval() - Seals - 19-09-2007

Nan je veux dire que, si je fait eval('$x = 5+3*12;'); ça ne peu pas fonctionner.
Car eval() ne peu calculer une chaine de caractères ?

Je vien d'essayer, j'ai fait un calcule simple 5*5 et j'ai cette erreur :
Parse error: syntax error, unexpected $end in /mnt/145/sdb/a/8//calcul.php(14) : eval()'d code on line 1

Warning: Cannot modify header information - headers already sent by (output started at /mnt/145/sdb/a/8/jvfr/calcul.php(14) : eval()'d code:1) in /mnt/145/sdb/a/8//calcul.php on line 15


RE: Problème avec eval() - Bob le Pointu - 19-09-2007

eval() ne fait pas de calcul, juste une évaluation sur une chaîne de caractères, c'est à dire qu'il va considérer la chaîne passée en paramètre comme une instruction PHP, il faut donc prendre soin de vérifier que cette est une instruction PHP correcte.

eval(5*5) n'a aucun sens, de même que eval('5*5').
En revanche, eval('$x = 5*5;') en a, car $x = 5*5; est une instruction valide.