Eval() en php
Résolu/Fermé
123pierre
Messages postés
48
Date d'inscription
vendredi 13 mars 2009
Statut
Membre
Dernière intervention
28 janvier 2011
-
23 nov. 2009 à 14:04
123pierre Messages postés 48 Date d'inscription vendredi 13 mars 2009 Statut Membre Dernière intervention 28 janvier 2011 - 23 nov. 2009 à 16:01
123pierre Messages postés 48 Date d'inscription vendredi 13 mars 2009 Statut Membre Dernière intervention 28 janvier 2011 - 23 nov. 2009 à 16:01
15 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
23 nov. 2009 à 15:58
23 nov. 2009 à 15:58
Merci pour ton lien, c'est assez clair :)
Du coup, je te propose une autre formulation :
:)
Du coup, je te propose une autre formulation :
$condition="return (3>1)&&(5==5);"; if (eval($condition)) {echo "super ca marche";}
:)
orion999
Messages postés
23
Date d'inscription
mardi 10 novembre 2009
Statut
Membre
Dernière intervention
5 janvier 2010
23 nov. 2009 à 14:08
23 nov. 2009 à 14:08
On ne stocke pas du code php en BDD... tu dois faire tes condition dans php normalement (sans eval) avec les données qui sont en BDD...
123pierre
Messages postés
48
Date d'inscription
vendredi 13 mars 2009
Statut
Membre
Dernière intervention
28 janvier 2011
2
23 nov. 2009 à 14:16
23 nov. 2009 à 14:16
pourquoi ne stocke on pas de code en BDB??
Moi la ca m'arrangerait bien de pouvoir en stocker, en tout cas des conditions.
La function eval() est justement indiquée pour stocker du code. Elle sert a "Exécuter une chaîne comme un script PHP". cf php.net.
Donc je peux reformuler ma question sous la forme:
comment interpreter la chaine:
$condition="(3>1)&&("toto"!="titi")";
avec eval()..
Isn't it??
merci..
Pierre.
Moi la ca m'arrangerait bien de pouvoir en stocker, en tout cas des conditions.
La function eval() est justement indiquée pour stocker du code. Elle sert a "Exécuter une chaîne comme un script PHP". cf php.net.
Donc je peux reformuler ma question sous la forme:
comment interpreter la chaine:
$condition="(3>1)&&("toto"!="titi")";
avec eval()..
Isn't it??
merci..
Pierre.
orion999
Messages postés
23
Date d'inscription
mardi 10 novembre 2009
Statut
Membre
Dernière intervention
5 janvier 2010
23 nov. 2009 à 14:19
23 nov. 2009 à 14:19
Oui tu peux... techniquement rien ne te l'interdis... mais de 1 c'est très impropre et de 2 c'est une faille de sécurité que tu ouvre...
Si tu sais stocker le code en BDD qu'est ce qui t'empêche de l'écrire directement dans un fichier ?
Si tu sais stocker le code en BDD qu'est ce qui t'empêche de l'écrire directement dans un fichier ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
123pierre
Messages postés
48
Date d'inscription
vendredi 13 mars 2009
Statut
Membre
Dernière intervention
28 janvier 2011
2
23 nov. 2009 à 14:29
23 nov. 2009 à 14:29
Merci pour les conseils de sécurité. Mais je ne vais évaluer que le code rentre par moi même.
Donc a moins que le mec ai accès a ma base de donnée... mais la le navire est déjà bien coulé.
J'ai besoin comme expliqué plus haut de stocker des phrases destinées a l'utilisateur.
Aurais tu par hasard la solution a mon problème?
Je suis preneur.
A+,
Pierre.
Donc a moins que le mec ai accès a ma base de donnée... mais la le navire est déjà bien coulé.
J'ai besoin comme expliqué plus haut de stocker des phrases destinées a l'utilisateur.
Aurais tu par hasard la solution a mon problème?
Je suis preneur.
A+,
Pierre.
jvoi pas pourquoi tu devrai stocker du code, tu stock juste tes phrases comme ca :
TABLE message
id
message
sexe
...
et ensuite si il est loggé c'est qu'il est deja venu (sinon il aurai pas de compte) donc tu fais un truc du style
if (isset($_SESSION)) {
$req = mysql_query("select * from message WHERE ");
$compteur =count(mysql_num_rows($req));
$message = mysql_query("SELECT * FROM message WHERE id=".rand(1,$compteur)." AND sexe ='".$_SESSION['sexe']."' ");
}
Ca repond un peu a ta question ?
TABLE message
id
message
sexe
...
et ensuite si il est loggé c'est qu'il est deja venu (sinon il aurai pas de compte) donc tu fais un truc du style
if (isset($_SESSION)) {
$req = mysql_query("select * from message WHERE ");
$compteur =count(mysql_num_rows($req));
$message = mysql_query("SELECT * FROM message WHERE id=".rand(1,$compteur)." AND sexe ='".$_SESSION['sexe']."' ");
}
Ca repond un peu a ta question ?
123pierre
Messages postés
48
Date d'inscription
vendredi 13 mars 2009
Statut
Membre
Dernière intervention
28 janvier 2011
2
23 nov. 2009 à 14:46
23 nov. 2009 à 14:46
Merci a vous deux..
Je sais que vous essayer de me convertir a ne pas stocker mes phrases.
Je ne voulais pas faire trop compliqué, mais en fait c'est tres compliqué.
Je sais aussi que pour savoir savoir si le mec est connecté, il faut pas faire toto!=titi. C'etait juste un exemple.
Le but de stocker ces phrases et de les mettre dans une base de données c'est de pouvoir faire un rapport complet sur leur frequence d'affichage, leur nombre d'affichage journalier, etc.
Il faut donc absolument qu'elles soient stockées AVEC leur conditions.
Il y en a aujourd'hui 50 mais demain il peut y en avoir 10 000.
Merci énormément encore une fois de se préoccuper de tout ça.
MAIS la question c'est juste:
Comment utiliser eval() en php?
et comment corriger les deux ligne suivantes:
$condition="(3>1)&&("toto"!="titi")";
if (eval($condition)) {echo "super ca marche";}
Thanks a lot guys!!
Je sais que vous essayer de me convertir a ne pas stocker mes phrases.
Je ne voulais pas faire trop compliqué, mais en fait c'est tres compliqué.
Je sais aussi que pour savoir savoir si le mec est connecté, il faut pas faire toto!=titi. C'etait juste un exemple.
Le but de stocker ces phrases et de les mettre dans une base de données c'est de pouvoir faire un rapport complet sur leur frequence d'affichage, leur nombre d'affichage journalier, etc.
Il faut donc absolument qu'elles soient stockées AVEC leur conditions.
Il y en a aujourd'hui 50 mais demain il peut y en avoir 10 000.
Merci énormément encore une fois de se préoccuper de tout ça.
MAIS la question c'est juste:
Comment utiliser eval() en php?
et comment corriger les deux ligne suivantes:
$condition="(3>1)&&("toto"!="titi")";
if (eval($condition)) {echo "super ca marche";}
Thanks a lot guys!!
regarde du coté des caractères d'échappement "\" si la faute viens de là, on a pas ton vrai code donc on peut pas t'aider :)
je te renvoi a la doc de manuelphp :)
(sinon si demain tu veux rajouter une condition a tous tes message ca va etre la galere si tu gère ca comme ca ?... quoi je me tais ? bon désolé x)) j'ai jamais utilisé cette technique avec eval en tout cas, bonne chance !
je te renvoi a la doc de manuelphp :)
(sinon si demain tu veux rajouter une condition a tous tes message ca va etre la galere si tu gère ca comme ca ?... quoi je me tais ? bon désolé x)) j'ai jamais utilisé cette technique avec eval en tout cas, bonne chance !
orion999
Messages postés
23
Date d'inscription
mardi 10 novembre 2009
Statut
Membre
Dernière intervention
5 janvier 2010
23 nov. 2009 à 15:01
23 nov. 2009 à 15:01
Bon désoler de revenir à la charge hein
Mais tu peux stocker toutes ses infos sans avoir besoin de mettre des conditions directement en base de donnée
Tu veux savoir quand un utilisateur est venu, sur quel page il a été, ... ? tu fait une table log par exemple
CREATE TABLE `log` (
`id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`id_user` INT( 11 ) UNSIGNED NOT NULL ,
`time` DATETIME NOT NULL ,
`page` VARCHAR( 128 ) NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = InnoDB
Et après a toi d'exploiter comme bon te semble... une base de donnée sa stocke les informations de manière brut... après a toi avec du code a exploiter ses donnée comme tu le sens... l'avantage c'est que tu peux avec ses même données sortir 50 truc différent sans jamais y toucher.
Cordialement.
Mais tu peux stocker toutes ses infos sans avoir besoin de mettre des conditions directement en base de donnée
Tu veux savoir quand un utilisateur est venu, sur quel page il a été, ... ? tu fait une table log par exemple
CREATE TABLE `log` (
`id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`id_user` INT( 11 ) UNSIGNED NOT NULL ,
`time` DATETIME NOT NULL ,
`page` VARCHAR( 128 ) NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = InnoDB
Et après a toi d'exploiter comme bon te semble... une base de donnée sa stocke les informations de manière brut... après a toi avec du code a exploiter ses donnée comme tu le sens... l'avantage c'est que tu peux avec ses même données sortir 50 truc différent sans jamais y toucher.
Cordialement.
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
23 nov. 2009 à 15:12
23 nov. 2009 à 15:12
Bonjour,
Il faudrait que tu utilises la balise < code> (sans espace) pour mettre exactement tes lignes de code. Parce que là, on voit ça :
$condition="(3>1)&&("toto"!="titi")";
if (eval($condition)) {echo "super ca marche";}
et ça ne peut pas marcher à cause des guillemets.
Si tu mets ça plutôt :
Ça donne quoi ?
Xavier
Il faudrait que tu utilises la balise < code> (sans espace) pour mettre exactement tes lignes de code. Parce que là, on voit ça :
$condition="(3>1)&&("toto"!="titi")";
if (eval($condition)) {echo "super ca marche";}
et ça ne peut pas marcher à cause des guillemets.
Si tu mets ça plutôt :
$condition="(3>1)&&('toto'!='titi')"; if (eval($condition)) {echo "super ca marche";} // ou $condition="(3>1)&&(\"toto\"!=\"titi\")"; if (eval($condition)) {echo "super ca marche";}
Ça donne quoi ?
Xavier
123pierre
Messages postés
48
Date d'inscription
vendredi 13 mars 2009
Statut
Membre
Dernière intervention
28 janvier 2011
2
23 nov. 2009 à 15:21
23 nov. 2009 à 15:21
Ok suoer! merci de ta reponse.
Avec la reponse de Samy ca me met sur une piste avec les echapements \
Je suis peut etre pas loin.
Car en fait si je fait:
ca marche pas non plus, mais ....
si je fait
ca marche pas non plus, mais ca m'affiche un message d'erreur different...
> il comprend pas les [ ]
(unexpected T_ENCAPSED_AND_WHITESPACE)
J'ai essayer addslashes() mais niet...
Une idée?
Avec la reponse de Samy ca me met sur une piste avec les echapements \
Je suis peut etre pas loin.
Car en fait si je fait:
$condition="(3>1)&&(5==5)"; if (eval($condition)) {echo "super ca marche";}
ca marche pas non plus, mais ....
si je fait
$condition="(3>1)&&($_GET['orion'])"; if (eval($condition)) {echo "super ca marche";}
ca marche pas non plus, mais ca m'affiche un message d'erreur different...
> il comprend pas les [ ]
(unexpected T_ENCAPSED_AND_WHITESPACE)
J'ai essayer addslashes() mais niet...
Une idée?
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
23 nov. 2009 à 15:27
23 nov. 2009 à 15:27
Mmmmh, sur ce dernier point, le problème est différent : on ne peut pas faire appel à des éléments de tableaux directement dans une chaîne, même délimitée par des guillemets doubles.
Il faut soit concaténer, soit utiliser des accolades :
Xavier
Il faut soit concaténer, soit utiliser des accolades :
$condition="(3>1)&&(".$_GET['orion'].")"; // ou condition="(3>1)&&({$_GET['orion']})";
Xavier
123pierre
Messages postés
48
Date d'inscription
vendredi 13 mars 2009
Statut
Membre
Dernière intervention
28 janvier 2011
2
23 nov. 2009 à 15:45
23 nov. 2009 à 15:45
ok les gars, j'ai trouvé la solution....
j'ai aussi trouvé ca sur comment ca marche:
https://forums.commentcamarche.net/forum/affich-7435961-php-eval
En gros eval() execute le travail mais renvoie seulement true ou false.
A+,
Pierre.
$condition='if ((4>3)&&(4==4)) {$ok="orion quand tu nous tiens!!";}'; eval($condition); echo $ok;
j'ai aussi trouvé ca sur comment ca marche:
$foovar = '3 + 4'; echo '1:' . $foovar . '<br />'; echo '2:' . eval ( '$monResultat=' . $foovar . ';' ) . '<br />'; echo '3:' . $monResultat;
https://forums.commentcamarche.net/forum/affich-7435961-php-eval
En gros eval() execute le travail mais renvoie seulement true ou false.
A+,
Pierre.
123pierre
Messages postés
48
Date d'inscription
vendredi 13 mars 2009
Statut
Membre
Dernière intervention
28 janvier 2011
2
23 nov. 2009 à 15:54
23 nov. 2009 à 15:54
bon allez j'optimise meme la fonction:
A+...
$condition='((4>3)&&(4==4))'; $test='if '.$condition.'{$ok="ca marche";}'; eval($test); echo $ok;
A+...
123pierre
Messages postés
48
Date d'inscription
vendredi 13 mars 2009
Statut
Membre
Dernière intervention
28 janvier 2011
2
23 nov. 2009 à 16:01
23 nov. 2009 à 16:01
A ouais la je crois qu'on peut pas faire plus court!!!
Merci.
Pierre.
Merci.
Pierre.