Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2245 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Erreur dans une variable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Erreur dans une variable

n°1850321
tete278
Posté le 12-02-2009 à 13:38:18  profilanswer
 

Bonjour,
 
Je cherche à simplifier mon code en remplaçant :

Code :
  1. $rep10=htmlentities(trim($_POST['rep10']));
  2. $rep11=htmlentities(trim($_POST['rep11']));
  3. $rep12=htmlentities(trim($_POST['rep12']));
  4. $rep20=htmlentities(trim($_POST['rep20']));
  5. $rep21=htmlentities(trim($_POST['rep21']));
  6. $rep22=htmlentities(trim($_POST['rep22']));


 
par :
 

Code :
  1. $cpt = 0 ;
  2. for ($cpt = 0 ; $cpt < 3 ;$cpt ++)
  3. {
  4.  ${rep1.$cpt} = htmlentities(trim($_POST['rep1.$cpt']));
  5.  ${rep2.$cpt} = htmlentities(trim($_POST['rep2.$cpt']));
  6. }


mais j'obtiens l'erreur suivante :Notice: Use of undefined constant rep1 - assumed 'rep1'
 
Quelqu'un pourrait-il me dire où je me trompe ?
Merci
tete278

mood
Publicité
Posté le 12-02-2009 à 13:38:18  profilanswer
 

n°1850324
aspirateur
Posté le 12-02-2009 à 13:45:10  profilanswer
 

Salut,

 


Code :
  1. $cpt = 0 ;
  2. for ($cpt = 0 ; $cpt < 3 ;$cpt ++)
  3.     {
  4.            $rep = "rep".$cpt;
  5.  
  6.         $rep = htmlentities(trim($_POST[$rep]));
  7.  
  8.     }
 

je dis pas que c'est la meilleure solution mais c'est ce que je ferai. A tester si ca marche

Message cité 1 fois
Message édité par aspirateur le 12-02-2009 à 13:45:54
n°1850325
fluminis
Posté le 12-02-2009 à 13:45:55  profilanswer
 

${'rep1'.$cpt}


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
n°1850327
fluminis
Posté le 12-02-2009 à 13:46:59  profilanswer
 

aspirateur a écrit :

Code :
  1. $cpt = 0 ;
  2. for ($cpt = 0 ; $cpt < 3 ;$cpt ++)
  3.     {
  4.            $rep = "rep".$cpt;
  5.  
  6.         $rep = htmlentities(trim($_POST[$rep]));
  7.  
  8.     }



 
=> il faut deux $ :
$$rep = htmlentities(trim($_POST[$rep]));
 


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
n°1850389
vhAnton
Posté le 12-02-2009 à 14:59:21  profilanswer
 

Ton $_POST est un tableau, si tu souhaite appliquer une fonction (dans ton cas htmlentities) a TOUS LES ELEMENTS (je ne sais pas si c'est ton cas) de ton tableau $_POST, tu peut utiliser array_map. Puis un petit extract.
 
Qq chose du genre :
$_POST=array_map(htmlentities,$_POST);
$_POST=array_map(trim,$_POST);
extract($_POST);
 
Encore une fois, cela te convient si tu souhaite effectuer ce traitement pour tous les elements de ton tableau.
edit: Si ca n'est pas le cas, tu peut tjr faire un sous tableau, je pense que ce seras quand meme le plus "simplifié"
 
Cdlmt

Message cité 1 fois
Message édité par vhAnton le 12-02-2009 à 15:02:43
n°1850395
Profil sup​primé
Posté le 12-02-2009 à 15:08:28  answer
 

vhAnton a écrit :


$_POST=array_map(htmlentities,$_POST);
$_POST=array_map(trim,$_POST);
extract($_POST);


 [:ciler]  
Déjà c'est :  

Code :
  1. $_POST = array_map('htmlentities', $_POST);

Pas grave, surement un petit oubli, par contre :

Code :
  1. extract($_POST);

Tu simules le fonctionnement de register_globals, tu peux donc écraser des variables. Ça apporte plein de problèmes de sécurité :jap:

n°1850400
vhAnton
Posté le 12-02-2009 à 15:14:05  profilanswer
 

Tient, chez moi  
$_POST=array_map(htmlentities,$_POST);  
Fonctionne parfaitement.. En tout cas avec addslashes.
 
Apres pour le extract effectivement, on peut ecraser des variables, il faut esperer qu'il n'a pas de variable utiles s'apellant repX, vu qu'il souhaite les créer. Point de vue sécurité, c'est vrai, tout dépend du contexte de son script.

n°1850404
Profil sup​primé
Posté le 12-02-2009 à 15:17:36  answer
 

vhAnton a écrit :

Tient, chez moi  
$_POST=array_map(htmlentities,$_POST);  
Fonctionne parfaitement.. En tout cas avec addslashes.


Oui sans guillemets, htmlentities est considéré comme une constante, seulement elle n'est pas déclarée. Alors quand PHP rencontre une constante non déclarée, il lui donne comme valeur son propre nom. Tu n'as qu'à essayer çà, tu verras :

Code :
  1. <?php
  2. $_POST = array_map(htmlentities,$_POST);
  3. ?>

n°1850406
vhAnton
Posté le 12-02-2009 à 15:20:42  profilanswer
 

Je te crois sur parole =)

n°1850447
omega2
Posté le 12-02-2009 à 16:11:45  profilanswer
 

vhAnton a écrit :

Tient, chez moi  
$_POST=array_map(htmlentities,$_POST);  
Fonctionne parfaitement.. En tout cas avec addslashes.

Oui, ca marche. Mais si tu récupères un jour un script qui te crée une constante nommé "htmlentities" (rien n'interdit de le faire) tu te choperas un trou béant de sécurité et en fait tu ne seras plus capable de dire ce qui se passe réellement dans ton code.
 

vhAnton a écrit :

Apres pour le extract effectivement, on peut ecraser des variables, il faut esperer qu'il n'a pas de variable utiles s'apellant repX,

ou "user", ou "passwd" ou "texte" ou "message" ou "page" ou "toto" ou "bouttonOK" ou "this" (un extract dans un objet et t'as PHP qui te saute à la gueule) ou même "i". Tous les éléments de $_POST risquent d'écraser une variable, pas juste les 3 ou 4 dont il a besoin.
 

vhAnton a écrit :

vu qu'il souhaite les créer. Point de vue sécurité, c'est vrai, tout dépend du contexte de son script.

Même avec mon très bon niveau en PHP je ne me fais pas assez confiance pour prendre ce genre de risque. Pourtant je développe toujours en "E_ALL | E_STRICT" pour être sur de limiter au maximum ce genre de risque. Malgré ça, une erreur est si vite arrivé que je ne me risquerais jamais à faire comme toi.

mood
Publicité
Posté le 12-02-2009 à 16:11:45  profilanswer
 

n°1850681
vhAnton
Posté le 13-02-2009 à 09:38:17  profilanswer
 

Code :
  1. $myArrayKeys=('rep0' => '','rep1'=>''...'repX'=>'');
  2. $myArray=array_intersect_key($_POST,$myArrayKeys);
  3. $myArray=array_map('htmlentities',$myArray);
  4. $myArray=array_map('trim',$myArray);
  5. extract($myArray);


 
Je m'enfonce ?


Message édité par vhAnton le 13-02-2009 à 09:43:03
n°1850753
fluminis
Posté le 13-02-2009 à 11:47:25  profilanswer
 

pourquoi vouloir absolument faire un extract ?
tu ne pourrais pas utiliser $_POST['rep0'] quand tu en as besoin ?  
Et hop plus de faille de sécurité ?
 
j'ai dans toutes mes pages un appel a une fonction :
 
function cleanInput($array) {
    //appels a array_map pour nettoyer tout ce qu'il faut
}
 
et j'appel cleanInput($_POST); et cleanInput($_GET);
ensuite, aucun soucis j'utilise $_POST et $_GET sans soucis


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
n°1850757
vhAnton
Posté le 13-02-2009 à 11:52:43  profilanswer
 

tete278 a écrit :

Bonjour,
 
Je cherche à simplifier mon code en remplaçant :

Code :
  1. $rep10=htmlentities(trim($_POST['rep10']));
  2. $rep11=htmlentities(trim($_POST['rep11']));
  3. $rep12=htmlentities(trim($_POST['rep12']));
  4. $rep20=htmlentities(trim($_POST['rep20']));
  5. $rep21=htmlentities(trim($_POST['rep21']));
  6. $rep22=htmlentities(trim($_POST['rep22']));




 
Je cherche la simplification, sinon bien sur il y a d'autres moyens..

n°1850759
omega2
Posté le 13-02-2009 à 11:59:38  profilanswer
 

Le plus simple serait d'utiliser des noms d'éléments tels que "rep[20]" dans le formulaire ce qui te donne un beau tableau en php dans $_POST["rep"].

n°1851106
tete278
Posté le 14-02-2009 à 09:38:25  profilanswer
 

Ca marche,
 
Un gros merci collégial à tous les contributeurs.
 
tete278


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Erreur dans une variable

 

Sujets relatifs
[MySQL] erreur de syntaxe ...conserver les n premiers caractères d'une variable
Eclipse, mingw et erreur not binary foundErreur sur le serveur mais execution impec en local
[Javascript] Erreur incompréhensible [RESOLU][résolu] erreur de variable
Erreur de variable non definieErreur T_Variable
Erreur de variable !!??!!?? [résolu]passage de variable erreur de debutant??
Plus de sujets relatifs à : Erreur dans une variable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR