[RESOLU] indirection (variable variable) et valeur booléenne

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] indirection (variable variable) et valeur booléenne

Re: [RESOLU] indirection (variable variable) et valeur booléenne

par dc33 » 06 déc. 2016, 11:12

OK, je crois que j'ai compris.
Pour ce qui concerne le danger, je ne récupère rien d'un utilisateur. Tout provient d'une base de données alimentée uniquement par l'administrateur de l'appli. et est reformaté par le code en fonction de données recueillies via une API. (un peu usine à gaz mais je n'ai pas trop le choix)
Donc, sauf si l'administrateur veut introduire du code malicieux (il en a le droit, c'est son appli. :-) ) ....

Merci encore pour le temps que tu as pris et ta patience.

Re: [RESOLU] indirection (variable variable) et valeur booléenne

par Spols » 02 déc. 2016, 15:41

eval() va te permettre d'éxécuter du code qui se tranve dans une variable texte.

dans ce cas ci, j'ajoute au texte de condition une affectation à une variable et le ; en fin de ligne
ca permet donc déxécuter la variable comme ci c'était du code.

Les danger de cette fonction, sont lié à la source des données utilisées. si tu utilise un texte venant d'un utilisateur sans vérification préalable, il pourrait être en mesure d'inclure du code malicieux qui pourrait lui donner accés à beaucoup trop de chose. récupérer des mot de passe, mettre en place un code malicieux de sniffing de mdp, rendre ton site inaccessible, ...
C'est pourquoi il faut être très prudent avec cette fonction.

Re: [RESOLU] indirection (variable variable) et valeur booléenne

par dc33 » 02 déc. 2016, 15:32

Bonjour,
Effectivement, çà marche (même si je ne comprends pas tout. En particulier, le rôle de eval).
Grand merci pour ton aide et à charge de revanche (mais pas en PHP, je suis trop nul :-))
Bonne journée.

Re: indirection (variable variable) et valeur booléenne

par Spols » 01 déc. 2016, 00:06

j'ai testé ceci et ca semble marché
<?php
$tstat = array('','supker','rapide','var','char','cool','foo');
$bool = '$test = (stripos($tstat[1],"K") > 0) || ((stripos($tstat[2],"K") > 0) && (stripos($tstat[3],"K") > 0)) || ((stripos($tstat[4],"K") > 0) && (stripos($tstat[5],"K") > 0)) || (stripos($tstat[6],"K") > 0);';
eval($bool);
var_dump($test);
if ($test) {echo "oui";} else {echo "non";}
?>

Re: indirection (variable variable) et valeur booléenne

par dc33 » 30 nov. 2016, 18:58

Bonsoir,
Si je fais :
if ( stripos($tstat[1],"K") > 0) || ((stripos($tstat[2],"K") > 0) && (stripos($tstat[3],"K") > 0)) || ((stripos($tstat[4],"K") > 0) && (stripos($tstat[5],"K") > 0)) || (stripos($tstat[6],"K") > 0 ) { ....}
J'obtiens bien vrai si au moins 1 $tstat[] contient au moins un "K".
C'est quand je veux remplacer stripos($tstat[1],"K") > 0) || ((stripos($tstat[2],"K") > 0) && (stripos($tstat[3],"K") > 0)) || ((stripos($tstat[4],"K") > 0) && (stripos($tstat[5],"K") > 0)) || (stripos($tstat[6],"K") > 0 par une variable que çà coince.
J'ai pensé à l'indirection parce que c'est qqchose que j'utilise dans d'autres langages mais avec PHP, il y a qq chose que j'ai pas saisi (autour de l'absence de typage par exemple). :-(
Bonne soirée.

Re: indirection (variable variable) et valeur booléenne

par Spols » 29 nov. 2016, 17:46

tu es sur que $stat est défini et contient un tableau avec au moins si valeurs indéxé de 1 à 6 ?

Teste la valeur de retour de eval dans chaque cas, pour t'aiguiller

Re: indirection (variable variable) et valeur booléenne

par dc33 » 29 nov. 2016, 16:31

Merci pour ta réponse.
Pour l'instant, je pédale toujours dans la semoule.
J'ai essayé de passer par une fonction (cf. la doc d'eval qui parle d'un return pour avoir une valeur) mais là, je suis toujours à vrai (quel que soit le test)
Je vais essayer autre chose.
Merci pour ton aide.

Re: indirection (variable variable) et valeur booléenne

par Spols » 29 nov. 2016, 10:25

Je pense que c'est la fonction eval qu'il te faut, mais il faut être sur de ce que tu lui donne en paramètre, car elle peut faire pas mal de dégat si elle n'est pas suffisamment protégé.

essaie ceci
$a = '(stripos($tstat[1],"K") > 0) || ((stripos($tstat[2],"K") > 0) && (stripos($tstat[3],"K") > 0)) || ((stripos($tstat[4],"K") > 0) && (stripos($tstat[5],"K") > 0)) || (stripos($tstat[6],"K") > 0)';

$b = eval($a);

if ( $b) { ... }
peut être qu'il te faut
$b = eval($a.';');
ou
eval('$b = '.$a.';');
je sais pas tester ici

indirection (variable variable) et valeur booléenne

par dc33 » 28 nov. 2016, 18:10

Bonsoir,

Je n'arrive pas à tester ma variable dans le code suivant :
$a = '(stripos($tstat[1],"K") > 0) || ((stripos($tstat[2],"K") > 0) && (stripos($tstat[3],"K") > 0)) || ((stripos($tstat[4],"K") > 0) && (stripos($tstat[5],"K") > 0)) || (stripos($tstat[6],"K") > 0)';

$b = (bool) $$a;

if ( $b) { ... }
OU
if ($b === TRUE) { ... }
En fait $a est récupéré dans une base de données mais si une composante de$a est vrai, le test - qui devrait donner vrai - donne faux.
if ( (stripos($tstat[1],"K") > 0) || ((stripos($tstat[2],"K") > 0) && (stripos($tstat[3],"K") > 0)) || ((stripos($tstat[4],"K") > 0) && (stripos($tstat[5],"K") > 0)) || (stripos($tstat[6],"K") > 0) ) { ... }
marche très bien.

Quelqu'un peut-il me dire ce que je fais mal ? (NB: Je programme depuis longtemps mais très rarement en PHP. Cà se voir non ? :-)

Merci d'avance. Bonne soirée.