Aller au contenu

Problème dans ma boucle foreach


Pybou

Sujets conseillés

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

Lien vers le commentaire
Partager sur d’autres sites

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);
}
}

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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é par Ifmy
Lien vers le commentaire
Partager sur d’autres sites

Alors :D 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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...