Pybou Posté 24 Avril 2008 Posté 24 Avril 2008 Bonjour à tous, je reviens avec un petit problème lors de l'exécution d'une boucle foreach. Je m'explique, je cherche à protéger mes $_GET et pour cela je distingue ceux qui prenne des valeurs numériques et ceux qui n'en prenne pas. Mais je dois mal m'y prendre puisque ça ne fonctionne pas. Voici mon code : // Variables qui sont et doivent rester numériques$variables_numeriques = array('numepreuve','idphoto','flagform');foreach($_GET as $key => $value){ foreach ($variables_numeriques as $valeur) { if ($key == $valeur) { $$key = intval($value); } else {$$key = mysql_real_escape_string($value);} }} Merci d'avance Pybou
Ifmy Posté 24 Avril 2008 Posté 24 Avril 2008 Peut être que : $vNum = array('numepreuve','idphoto','flagform');foreach($_GET as $keyGet){ foreach ($vNum as $keyIsNum) { $keyGet == $keyIsNum ? $keyFormated = intval($keyGet) : $keyFormated = mysql_real_escape_string($keyGet); }}
Pybou Posté 24 Avril 2008 Auteur Posté 24 Avril 2008 J'ai testé tel quel mais ça ne fonctionne pas. Ce que je ne comprends pas dans ce que tu fais c'est que tu appliques intval et mysq_real_escape_string à $KeyGet et non pas à la valeur que prend $keyGet.
Ifmy Posté 24 Avril 2008 Posté 24 Avril 2008 (modifié) oui au temps pour moi. <?php $numVar = array('v1','v2','v3'); foreach($_GET as $key => $getValue) { foreach ($numVar as $numVarValue) { $key == $numVarValue ? $valueFormated = intval($getValue) : $valueFormated = mysql_real_escape_string($getValue); } }?> Néanmoins si je peux me permettre de vous conseiller. Le problème de cette méthode est que la valeur formatée sera reassignée autant de fois qu'il y a d'entrées numVar. Pas très optimisé ... faites un simple echo de $valueFormated dans le second foreach pour voir ce que je veux dire. EDIT: hum je viens de relire votre boucle hors elle est identique et chez moi ça fonctionne parfaitement Modifié 24 Avril 2008 par Ifmy
Pybou Posté 24 Avril 2008 Auteur Posté 24 Avril 2008 Alors Tout d'abord merci de ton aide. Quelques points : - quand je dis que mon script ne marche pas c'est pas exactement ça. En fait c'est le intval() qui ne fonctionne pas car quand je rajoute par exemple du texte après ma valeur numérique et bien la page ne s'affiche plus. Je m'explique avec un exemple : mon url : index.php?id=12 ---> il m'affiche une certaine page url modifié par un malveillant : index.php?id=12testdevalint ---> il ne m'affiche plus la page qui correspond à id=12 alors que la fonction intval() devrait me le permettre. C'est pour ça que je pensais que mon script ne fonctionnait pas. - concernant la dernière version de ton script. En fait j'ai un problème car les $_Get ne s'extraient pas automatique. C'est à dire, en reprenant un exemple : je suis sur Index.php, je clique sur un lien qui doit m'emmener vers id=12 mais je reste sur index.php Merci beaucoup. pybou
Ifmy Posté 24 Avril 2008 Posté 24 Avril 2008 non intval ne permet pas ça regardez http://www.php.net/manual/fr/function.intval.php testez plutôt si la variable est numérique ou non avec is_numeric http://www.php.net/manual/fr/function.is-numeric.php ou sinon via expreg vous pouvez retirez tout les caractères non numériques de la chaîne pour le second point, je n'ai pas compris ...
Pybou Posté 24 Avril 2008 Auteur Posté 24 Avril 2008 Je vais voir avec la fonction is_numeric. Concernant le deuxième, je vais essayer d'être plus clair : en gros il ne se passe rien, une fois cliquez sur le lien, je reste sur la page où j'étais. Les $_Get ne sont pas exécutés. Merci de ton aide.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant