Erreur dans une variable

Erreur dans une variable - PHP - Programmation

Marsh Posté le 12-02-2009 à 13:38:18    

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

Reply

Marsh Posté le 12-02-2009 à 13:38:18   

Reply

Marsh Posté le 12-02-2009 à 13:45:10    

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
Reply

Marsh Posté le 12-02-2009 à 13:45:55    

${'rep1'.$cpt}


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 12-02-2009 à 13:46:59    

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
Reply

Marsh Posté le 12-02-2009 à 14:59:21    

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
Reply

Marsh Posté le 12-02-2009 à 15:08:28    

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:

Reply

Marsh Posté le 12-02-2009 à 15:14:05    

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.

Reply

Marsh Posté le 12-02-2009 à 15:17:36    

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. ?>

Reply

Marsh Posté le 12-02-2009 à 15:20:42    

Je te crois sur parole =)

Reply

Marsh Posté le 12-02-2009 à 16:11:45    

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.

Reply

Marsh Posté le 12-02-2009 à 16:11:45   

Reply

Marsh Posté le 13-02-2009 à 09:38:17    

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
Reply

Marsh Posté le 13-02-2009 à 11:47:25    

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
Reply

Marsh Posté le 13-02-2009 à 11:52:43    

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..

Reply

Marsh Posté le 13-02-2009 à 11:59:38    

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"].

Reply

Marsh Posté le 14-02-2009 à 09:38:25    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed