Comment transformer ce bout de code en fonction ?

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par Alorsladaccord, 28 Mars 2017.

  1. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Bonjour,

    Je viens de me rendre compte que j'utilise x fois le même petit script dans différentes pages.
    Ca alourdit vraiment le code et ça fait très amateur. Chose normale me direz-vous, puisque j'en suis un. Mais enfin... Voilà l'engin :
    Code:
    if(!empty($_POST['attribution_']))
    {
    $attribution = array_map(function ($val) 
    {
    return filter_var($val, FILTER_SANITIZE_NUMBER_INT);
    }, $_POST['attribution']); 
    Comme vous l'avez compris, il s'agit de filtrer un tableau de variable retourné par $_post[].

    J'ai donc essayé cela (c'est la première fois que j'utilise les fonctions...) :
    Code:
    function filtre_tableau($variable_qui_change_selon_la_page)
    {
      if(!empty($variable_qui_change_selon_la_page))
    {
    $variable_qui_change_selon_la_page = array_map(function ($val) 
    {
    return filter_var($val, FILTER_SANITIZE_NUMBER_INT);
    }, $variable_qui_change_selon_la_page);
    }
    
    Mais quand j'appelle la fonction comme suit : filtre_tableau($_POST['attribution']) et bien ça ne me retourne tout simplement rien.
    Je me dis que dans ma fonction, je ne prends pas en compte le fait que la variable est retournée par $_POST[]. Mais alors, quelle serait la syntaxe correcte ?

    Merci d'avance pour vos réponses, chers wrinautes !
     
  2. klp
    klp WRInaute discret
    Inscrit:
    19 Octobre 2016
    Messages:
    157
    J'aime reçus:
    5
    Bonjour,

    J'ai une question bête :
    Pourquoi pas un include php ?
     
  3. MikeR
    MikeR WRInaute passionné
    Inscrit:
    9 Janvier 2010
    Messages:
    1 416
    J'aime reçus:
    0
    Tu passes ton argument à la fonction "par valeur" (défaut en php). Ca veut dire que la fonction ne travaille pas sur ta variable, mais sur une copie, et que la variable de départ est inchangée.

    Pour que ça marche, il faut passer ta variable "par référence" en modifiant l'argument de la fonction :
    Le "&" (ampersand) avant le nom de variable indique le passage par référence.
    Voir http://php.net/manual/fr/functions.arguments.php
     
  4. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Salut à vous,

    Hum... A quoi va me servir un include.php, s'il n'appelle pas une fonction à son tour ?

    Le "&" (ampersand) avant le nom de variable indique le passage par référence.
    Voir http://php.net/manual/fr/functions.arguments.php[/quote]
    Si j'a bien compris, mon code est bon et j'ai pigé le principe (à peu près du moins). C'est seulement l'absence de ce & qui l'empêche de fonctionner ? Une erreur de "syntaxe" donc ?

    J'ai quand même un peu de mal avec cette explication :
    La valeur est transmise à la fonction par une variable. Quel est donc l'intérêt de passer un argument à une fonction si c'est pour n'en point changer la valeur au final ?
    Et si donc je passe une variable $_POST[] en argument pour y appliquer une fonction de filtrage, on considère donc que la valeur de ladite variable a été modifiée, puisque filtrée ?

    C'est confus....
     
  5. klp
    klp WRInaute discret
    Inscrit:
    19 Octobre 2016
    Messages:
    157
    J'aime reçus:
    5
    Ma question était vraiment bête et j'avais cru comprendre que tu incluais toujours le même bout de code php alors ça ma fait penser aux includes.
     
  6. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Bah, je te remercie quand même pour ta réponse klp. Et puis à ma connaissance, mieux vaut faire un require_once().


    Ceci dit, le code ci-dessus ne fonctionne toujours pas, même en ajoutant &, comme l'indique MikeR.
    Si quelqu'un peut le corriger et m'expliquer un peu, je devrais pouvoir me débrouiller pour les suivants...
    Je rappelle qu'il s'agit donc de filtrer différentes variables $_GET[] au moyen d'une même fonction utilisateur appelant la fonction Sanitize int.

    Merci d'avance
     
  7. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 874
    J'aime reçus:
    71
    Tu affectes bien le résultat de ta fonction à une variable ?
     
  8. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Salut Usagi',

    En fait, à partir de la fonction du premier post, à laquelle j'ai donc rajouté le & comme l'indique MikeR, je fais ensuite ainsi :

    Code:
    filtre_tableau($_GET['rubrique']) 
    Et c'est tout.
    Et le script ne détecte rien.
    Par exemple, j'ai une condition if isset $rubrique qui inclut une page php et bien cette page n'est pas incluse.
     
  9. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 874
    J'aime reçus:
    71
    Si tu veux afficher le résultat, il manque un echo...
     
  10. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Mais je ne veux pas afficher de résultat, donc je n'ai pas besoin d'echo. Je replace le bout de code :
    Code:
    1) LA FONCTION :
    
        function filtre_tableau(&$variable_qui_change_selon_la_page)
        {
          if(!empty($variable_qui_change_selon_la_page))
        {
        $variable_qui_change_selon_la_page = array_map(function ($val)
        {
        return filter_var($val, FILTER_SANITIZE_NUMBER_INT);
        }, $variable_qui_change_selon_la_page);
        }
    ------------------------------------------------
    2) L'UTILISATION DE LA FONCTION : 
    
    filtre_tableau($_GET['rubrique']) ;
    
    if isset($rubrique) {require_once....;}
    
    Je veux récupérer la variable désormais filtrée, pour l'utiliser plus bas dans le script. Mais apparemment la variable s'évapore en chemin, puisque la condition if isset n'est pas exécutée.
     
  11. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Ah, peut-être dois-je faire :
    Code:
    $rubrique=filtre_tableau($_GET['rubrique']) ;
    :?: :idea:
     
  12. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Non plus.

    Bon, j'ai essayé un code plus simple.

    Code:
    FONCTION DE DEPART (testé avec et sans &) : 
    function filtre_numerique(&$variable_qui_change_selon_la_page)
    {
    //$variable_qui_change_selon_la_page=$_GET['variable_qui_change_selon_la_page'];
    $variable_qui_change_selon_la_page=filter_var ( $variable_qui_change_selon_la_page, FILTER_SANITIZE_NUMBER_INT);
    }
    Code:
    APPEL DE LA FONCTION :
    if(isset($_GET['rubrique']))
    {
    $rubrique=filtre_numerique($_GET['rubrique']);
    }
    
    Résultat nul. Plus bas dans le script, la condition if isset($rubrique) { require;} n'est pas exécutée. La variable a disparu en route.
     
  13. MikeR
    MikeR WRInaute passionné
    Inscrit:
    9 Janvier 2010
    Messages:
    1 416
    J'aime reçus:
    0
    Tu n'apelles pas la fonction avec une variable, mais avec un élément de $_GET. Je ^pense que tu ne peux pas modifier
    $_GET['rubrique'] ....
    Il faut donc passer par une variable temporaire

    Code:
    APPEL DE LA FONCTION :
    if(isset($_GET['rubrique']))
    {
    $temp = $_GET['rubrique'];
    $rubrique=filtre_numerique(&$temp);
    }
    
     
  14. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Merci MIkeR, je vais essayer cela.

    Quand tu dis "une variable temporaire", je n'ai jamais lu qu'il existe des "variables temporaires". C'est juste une expression de ta part, ou alors il existe vraiment des "variables temporaires" avec des fonctions spécifiques ?

    Ta remarque sur l'appelle de fonction par $_GET[''] est intéressante, même si je n'ai pas encore vérifié que c'est le problème. Finalement, $_GET[''], c'est quoi ? Vu la présence du $ comme pour toutes les déclarations de variable, je m'étais laissé dire que $_GET[''] était une variable à part entière, mais transmise par l'URL. Or, ta réponse laisse entre qu'il y a la variable $rubrique + une autre chose qui s'appelle $_GET[''].

    Je ne sais pas si je suis clair...
     
  15. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Non, ça ne fonctionne pas non plus.
    Par ailleurs ton $ dans ($temp) déclenche une erreur php, MikeR.


    En fait, la variable $rubrique parait bel et bien filtrée par la fonction. Mais elle est perdu dans le courant du script lol, puisque par la suite la fonction if(!isset $ rubrique) (require...) est exécutée.

    Bon bon, ça avance quand même un peu, faut persévérer...
     
  16. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Bon alors,

    j'ai donc essayé cela, pour appeler la fonction :
    Code:
    if(isset($_GET['rubrique']))
    {
    $rubrique = $_GET['rubrique'];
    $rubrique=filtre_numerique($rubrique);
    echo'<h1>'.$_GET['rubrique'].'</h1>';
    }
    
    Le truc curieux, c'est que $_GET['rubrique'] s'affiche bien. Par contre, si je veux faire un echo de vérification avec $rubrique, alors ça n'affiche plus rien.
     
  17. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    La fonction est pourtant bien exécutée, puisque si j'y ajoute echo"test", cela s'affiche sur la page où elle est appelée.

    Le problème doit donc être quelque part entre $rubrique et $_GET['rubrique'].

    Je monologue, mais ça repose.
     
  18. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Soyons précis. Si je fais ça :

    Code:
    if(isset($_GET['rubrique']))
    {
    $temp = $_GET['rubrique'];
    $rubrique=filtre_numerique($temp);
    echo'<h1>'.$_GET['rubrique'].' - '.$temp.' - '.$rubrique.'</h1>';
    }
    $_GET[rubrique] s'affiche.
    $temp s'affiche.
    $rubrique n'affiche rien.

    Au moins, le problème est localisé.
     
  19. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Pfff, z'êtes pas doués les gars, manquait le return...
     
Chargement...
Similar Threads - transformer bout code Forum Date
Transformer visiteur en client Demandes d'avis et de conseils sur vos sites 15 Novembre 2017
transformer le lien du site au nom ... Administration d'un site Web 25 Janvier 2016
comment garder son compte personnel Facebook sans le transformer en page Facebook 27 Novembre 2015
Transformer un blog WP avec WooCommerce e-commerce 21 Août 2015
FB m'oblige à transformer mon profil en page Facebook 15 Octobre 2014
Comment transformer les accents dans les urls URL Rewriting et .htaccess 28 Août 2014
Facebook bloque et oblige à transformer les comptes privés en page ! Facebook 20 Août 2014
Transformer page G+ en Google Adresse Google+ 11 Mars 2014
Php transformer un email en image Développement d'un site Web ou d'une appli mobile 24 Janvier 2014
Transformer compte Google+ classique en page Google+ Google+ 10 Octobre 2013
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice