probleme avec date dans eval()

Petit nouveau ! | 5 Messages

18 oct. 2010, 15:14

Bonjour

je cherche à utiliser la fonction eval
j'écris ma chaine avant, ici la fonction date() avec un point vigurle à la fin,
je fais ensuite l'eval et rien ne se passe
directement, la meme fonction date() marche bien
voici mon code :

<?php

$chaine = "date('d/M/Y Hms') ; " ;

echo "<p>[".eval( $chaine )."]</p>" ;

echo "<p>.[".date( 'd/M/Y Hms' )."].</p>" ;

?>

que pensez - vous de cela ?

pendant mes recherches, j'ai aussi essayé les apostrophes inversées , comme en perl :
`$chaine`;

et rien ne se passe !

j'ai regardé dans mon php.ini, je n'ai pas déclaré eval comme etant une fonction disable
et si j'omets le point virgule, j'obtiens bien une erreur, normale !

Qu'ais-je oublié à votre avis ?

Merci de vos lumieres

JP

ViPHP
ViPHP | 5462 Messages

18 oct. 2010, 15:16

pourquoi tu fais un eval ?

Petit nouveau ! | 5 Messages

18 oct. 2010, 15:27

salut stealth35

je fais un eval car j'ai en fait un tableau de chaines qui sont differents formatages de date et je veux les evaluer en fonction du langage du navigateur

j'ai bien conscience du trou de sécurité mais je voudrais savoir pourquoi eval ne marche pas !

a++

ViPHP
ViPHP | 5462 Messages

18 oct. 2010, 15:37

je fais un eval car j'ai en fait un tableau de chaines qui sont differents formatages de date et je veux les evaluer en fonction du langage du navigateur
t'as pas besoin de eval pour faire ca

ViPHP
AB
ViPHP | 5818 Messages

18 oct. 2010, 16:36

Je vois pas non plus pourquoi tu as pensé qu'il fallait utiliser eval. Donnes nous un exemple un peu plus complet ...

Petit nouveau ! | 5 Messages

20 oct. 2010, 12:58

salut !

j'ai voulu faire :

$string1 = "date('d/M/Y') ;" ;
$string2 = "date('Y/M/d') ;" ;

et dans un test
if ( strcmp( $lang , "fr" ) ) eval $string1 ;
else
eval $string2 ;

bon, finalement, j'ai mis la chaine de la date dans un tableau indicé par le langage et ca marche bien : ok

par contre , je ne comprends par pourquoi eval ne marche pas !

A++

jean-philippe

ViPHP
ViPHP | 3607 Messages

21 oct. 2010, 10:30

Et pourquoi ne pas faire:
$formats_date = array(
'fr'=>'d/M/Y',
'en'=>'Y/M/d'
);

$lang = 'fr';

echo date($formats_date[$lang]);

Petit nouveau ! | 5 Messages

21 oct. 2010, 11:06

oui , finalement c'est ce que j'ai fait mais je ne comprends pas pourquoi l'eval ne marche pas
A+

JP

ViPHP
ViPHP | 5462 Messages

21 oct. 2010, 11:10

oui , finalement c'est ce que j'ai fait mais je ne comprends pas pourquoi l'eval ne marche pas
A+

JP
$chaine = "return date('d/M/Y Hms') ; " ;
echo "<p>[".eval($chaine)."]</p>" ;
echo "<p>.[".date( 'd/M/Y Hms' )."].</p>" ;

Petit nouveau ! | 5 Messages

21 oct. 2010, 12:03

ok, merci, je n'avais pas compris le return!
a+

JP

ViPHP
AB
ViPHP | 5818 Messages

21 oct. 2010, 17:01

Inutile de préciser qu'il faut éviter d'employer eval puisqu'une chaine sera interprétée... à n'utiliser donc que pour des cas exceptionnels (et c'est pour cette raison que ta question nous étonnait dans ce contexte).