Version complète: sur le forum Webmaster Hub : Problème dans ma boucle foreach
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Pybou
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 :

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
Peut être que :
CODE
$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
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
oui au temps pour moi.

CODE
<?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 happy.gif
Pybou
Alors biggrin.gif 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 smile.gif

Merci beaucoup.

pybou
Ifmy
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
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.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.