Page 1 sur 1

Interpréter une équation avec des variables dynamiques

Posté : 02 sept. 2010, 19:12
par VaN
Bonjour,

En base de données, je stocke l'équation suivante : (%RESULTATS% - %OBJECTIFS%) / 10

Et dans une classe, je récupère cette équation, et je remplace les 2 variables par leurs valeurs :
function get_part_variable($config) {
		$equation = $config->get_equation();
		$equation = str_replace("%RESULTATS%", $this->user_resultats, $equation);
		$equation = str_replace("%OBJECTIFS%", $this->user_objectifs, $equation);
		
		echo $equation;
	}
Le problème, c'est que lors cela m'affiche
(55000 - 50000) / 10
au lieu de faire le calcul. Que dois-je faire pour que le calcul se fasse ?

Re: Interpréter une équation avec des variables dynamiques

Posté : 02 sept. 2010, 19:14
par stealth35
fais un eval, mais t'as pas moyen de faire autrement ?

Re: Interpréter une équation avec des variables dynamiques

Posté : 02 sept. 2010, 19:45
par VaN
$equation = $config->get_equation();
		$equation = str_replace("%RESULTATS%", $this->user_resultats, $equation);
		$equation = str_replace("%OBJECTIFS%", $this->user_objectifs, $equation);
		
		eval($equation);
me donne
Parse error: syntax error, unexpected $end in D:\www\Projects\OOP\project_4\class.user.php(45) : eval()'d code on line 1
Qu'entends par faire autrement ?

C'est une équation que je dois stocker en base de données, et dont je dois remplacer les variables par des valeurs, en fonction de l'utilisateur affiché.
Existe t-il un autre moyen de faire ce que je souhaite ?

Re: Interpréter une équation avec des variables dynamiques

Posté : 02 sept. 2010, 20:02
par stealth35
$equation = $config->get_equation();
		$equation = str_replace("%RESULTATS%", $this->user_resultats, $equation);
		$equation = str_replace("%OBJECTIFS%", $this->user_objectifs, $equation);
		
		eval($equation);
me donne
Parse error: syntax error, unexpected $end in D:\www\Projects\OOP\project_4\class.user.php(45) : eval()'d code on line 1
Qu'entends par faire autrement ?

C'est une équation que je dois stocker en base de données, et dont je dois remplacer les variables par des valeurs, en fonction de l'utilisateur affiché.
Existe t-il un autre moyen de faire ce que je souhaite ?
eval attend du php derrière donc faut mettre le ; a la fin, eval tout seul dans ton cas fera pas grand chose, donc faut mettre un echo dans le coin
si l’équation est toujours la même seul les valeur change, tu pourrai même mettre direct le résultat en mysql

Re: Interpréter une équation avec des variables dynamiques

Posté : 03 sept. 2010, 00:34
par VaN
eval attend du php derrière donc faut mettre le ; a la fin, eval tout seul dans ton cas fera pas grand chose, donc faut mettre un echo dans le coin
si l’équation est toujours la même seul les valeur change, tu pourrai même mettre direct le résultat en mysql
Ok, ça marche mieux, j'ai bien le résultat qui s'affiche, mais pas où il devrait.

J'ai le tableau suivant :
echo "<table border=\"1\" cellpadding=\"5\">" . "\n";
	echo "<thead>" . "\n";
	echo "<tr>" . "\n";
	echo "<th>#</th>" . "\n";
	echo "<th>Prénom</th>" . "\n";
	echo "<th>Salaire</th>" . "\n";
	echo "<th>Résultats</th>" . "\n";
	echo "<th>Objectifs</th>" . "\n";
	echo "<th>Part variable</th>" . "\n";
	echo "<th>Actions</th>" . "\n";
	echo "</tr>" . "\n";
	echo "</thead>" . "\n";
	echo "<tbody>" . "\n";
	foreach($employes as $employe) {
		echo "<tr>" . "\n";
		echo "<td>".$employe->get_id()."</td>" . "\n";
		echo "<td>".$employe->get_prenom()."</td>" . "\n";
		echo "<td>".$employe->get_salaire()."</td>" . "\n";
		echo "<td>".$employe->get_resultats()."</td>" . "\n";
		echo "<td>".$employe->get_objectifs()."</td>" . "\n";
		echo "<td>".$employe->get_part_variable($config)."</td>" . "\n";
		echo "<td><a href=\"edit.php?user_id=".$employe->get_id()."\">modifier</a> - <a href=\"index.php?action=delete_user&user_id=".$employe->get_id()."\">supprimer</a></td>" . "\n";
		echo "</tr>" . "\n";
	}
	echo "</tbody>" . "\n";
	echo "</table>" . "\n";
et ma fonction get_part_variable() : (6e td du tableau)
function get_part_variable($config) {
		$equation = $config->get_equation();
		$equation = str_replace("%RESULTATS%", $this->user_resultats, $equation);
		$equation = str_replace("%OBJECTIFS%", $this->user_objectifs, $equation);
		
		eval("echo ".$equation.";");
	}
et voilà le code source généré :
<table border="1" cellpadding="5">
<thead>
<tr>
<th>#</th>
<th>Prénom</th>
<th>Salaire</th>
<th>Résultats</th>
<th>Objectifs</th>
<th>Part variable</th>
<th>Actions</th>

</tr>
</thead>
<tbody>
<tr>
<td>2</td>
<td>David</td>
<td>45000</td>
<td>55000</td>
<td>50000</td>
500<td></td>
<td><a href="edit.php?user_id=2">modifier</a> - <a href="index.php?action=delete_user&user_id=2">supprimer</a></td>

</tr>
</tbody>
</table>
Etrangement, le 6e <td> se place après la valeur, ce qui fait que ma valeur s'affiche en dehors du tableau. A quoi est-ce du ?

Et pour répondre à ta question, hélas non, l'équation peut être amené à changer, c'est pour cela que je la stocke en base de données.

Re: Interpréter une équation avec des variables dynamiques

Posté : 03 sept. 2010, 00:45
par stealth35
tu fais un double echo la puisque y'en a 1 dans le eval

fais plutôt comme ca
function get_part_variable($config)
{
    $equation = $config->get_equation();
    $equation = str_replace(array("%RESULTATS%", "%OBJECTIFS%"), array($this->user_resultats, $this->user_objectifs), $equation) ;
               
    eval('$out = ' . $equation . ';');
    return $out;
}
et met tes public/private sur tes classes :wink:

Re: Interpréter une équation avec des variables dynamiques

Posté : 03 sept. 2010, 09:14
par VaN
super, ça marche. merci beaucoup.