Erreur dans une variable - PHP - Programmation
Marsh Posté le 12-02-2009 à 13:45:10
Salut,
Code :
|
je dis pas que c'est la meilleure solution mais c'est ce que je ferai. A tester si ca marche
Marsh Posté le 12-02-2009 à 13:45:55
ReplyMarsh Posté le 12-02-2009 à 13:46:59
aspirateur a écrit :
|
=> il faut deux $ :
$$rep = htmlentities(trim($_POST[$rep]));
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
Marsh Posté le 12-02-2009 à 15:08:28
vhAnton a écrit : |
Déjà c'est :
Code : |
Pas grave, surement un petit oubli, par contre :
Code : |
Tu simules le fonctionnement de register_globals, tu peux donc écraser des variables. Ça apporte plein de problèmes de sécurité
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.
Marsh Posté le 12-02-2009 à 15:17:36
vhAnton a écrit : Tient, chez moi |
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 :
|
Marsh Posté le 12-02-2009 à 16:11:45
vhAnton a écrit : Tient, chez moi |
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.
Marsh Posté le 13-02-2009 à 09:38:17
Code :
|
Je m'enfonce ?
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
Marsh Posté le 13-02-2009 à 11:52:43
tete278 a écrit : Bonjour,
|
Je cherche la simplification, sinon bien sur il y a d'autres moyens..
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"].
Marsh Posté le 14-02-2009 à 09:38:25
Ca marche,
Un gros merci collégial à tous les contributeurs.
tete278
Marsh Posté le 12-02-2009 à 13:38:18
Bonjour,
Je cherche à simplifier mon code en remplaçant :
par :
mais j'obtiens l'erreur suivante Use of undefined constant rep1 - assumed 'rep1'
Quelqu'un pourrait-il me dire où je me trompe ?
Merci
tete278