Deux questions à propos des tableaux de variable

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

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

    J'utilise un checkbox, comme suit :
    Code:
    <input type="checkbox" name="site[]" value="1">
    <input type="checkbox" name="site[]" value="2">
    Je filtre ensuite avec une remarquable composition personnelle, qui a l'extrême mérite de ne renvoyer aucun message d'erreur, n'en déplaise aux jaloux :
    Code:
    foreach ($_POST['site'] as $site)
    {$site=FILTER_VAR($site, FILTER_SANITIZE_NUMBER_INT);}
    Néanmoins, le résultat a ceci d'éclectique, qu'il ne m'affiche que la dernière seconde checkbox de la liste. Histoire d'enquiquiner le peuple, quoi.

    Donc déjà, si vous avez une idée pour raisonner la bestiole, je vous en remercie par avance.

    QUI PLUS EST, le challenge ne s'arrête pas là. Il s'agit ensuite d'effectuer une requête SQL qui va aller chercher tous les titres correspondants au tableau site[] précédemment filtré, en théorie du moins.
    La question est donc de savoir comment faire (en deux mots, juste pour la clause where). Je viens d'essayer avec une fonction implode(), mais OVH m'a envoyé un fax m'expliquant que l'erreur ainsi générée risquait de faire griller l'intégralité de son parc de serveurs, donc j'ai pas insisté.


    Encore merci hein...
     
  2. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 003
    J'aime reçus:
    128
    Code:
    <input type="checkbox" name="site[]" value="1">
    <input type="checkbox" name="site[]" value="2">
    Il manque le [] dans l'attribut name du 2e champ.
     
  3. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Salut UsagiYojimbo !


    Hem... Oui enfin là non, c'eut été trop facile. J'ai seulement fait une erreur en écrivant le sujet.

    Déjà, avant de préciser le code informatique, en bon français ça donne quoi ?
    1) Je récupère le tableau de variable retourné par les champs checkbox name="site[]".
    2) Je filtre chacune de ces variables avec la fonction SANITIZE_
    3) Je récupère chacune de ces variables filtrées dans un nouveau tableau.
    4) Je crée une requête SQL qui va afficher le titre de chaque valeur du tableau[]

    C'est ça ?
     
  4. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Je n'en reviens pas de ne pas trouver sur internet, la réponse toute faite à une question correspondant à un usage aussi courant des formulaires.
     
  5. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 003
    J'aime reçus:
    128
    Code:
    foreach ($_POST['site'] as $site)
    {$site=FILTER_VAR($site, FILTER_SANITIZE_NUMBER_INT);}
    Avec ça, tu ne gardes en effet que la valeur de la dernière checkbox. Tu dis que tu crées un tableau où tu stockes les différentes valeur, je ne le vois pas vraiment dans ton bout de code.
     
  6. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Bah justement, je suis en train de chercher comment faire.
    Quand tu dis "Avec ça, tu ne gardes en effet que la valeur de la dernière checkbox", tu signifies que seule la valeur de la dernière checkbox est filtrée, ou alors que seule la valeur de la dernière checbock peut être affichée ?
    Et je ne vois pas pourquoi je devrais recréer un tableau à partir des variables précédemment filtrées, au lieu de conserver tout bonnement ce même tableau dorénavant filtré.
     
  7. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    137
    J'aime reçus:
    0
    Mais... tu utilise le même nom pour tes case à cocher ?
    Si oui, tu dois leur donner des nom différents, sinon ton tableau $_POST ne pourra contenir que la dernière checkbox. Les clés d'un tableau sont uniques.

    Code:
    <input type="checkbox" name="checkbox1" value="bim" />
    <input type="checkbox" name="checkbox2" value="bam" />
    <input type="checkbox" name="checkbox3" value="boum" />
    
     
  8. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 169
    J'aime reçus:
    346
    @niap: non on px faire un name="foo[]" et $_POST['foo'] sera un array avec toutes les values ;)

    @Alorsladaccord: tu n'as pas vraiment besoin de faire de filter_var si tu utilises bien les requêtes préparées :
    http://stackoverflow.com/a/920523/1656355
     
  9. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    137
    J'aime reçus:
    0
    Ah, je connaissais pas, merci.
     
  10. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Ah, la syntaxe nom_checkbox[] n'est valable que pour les tableaux générées dynamiquement à partir d'un while ou d'un foreach ? Sans quoi il faut écrire nom_checkbox[1], nom_checkbox[2] ? Je ne me rappelle pas de cela.
    Il me semble que je stipule au formulaire que je crée un tableau de checkbox et c'est la valeur de chaque checkbox que je change via value="".
    Donc
    <input type="checkbox" name="nom_checkbox[]" value="1">


    Bah oui, mais les clefs ce sont les valeurs retournées via value="", non ?

    Effectivement, pour les requêtes préparées, je n'y avais pas pensé. Serait-ce pour cette raison que nulle part dans le W W W on ne trouve la réponse à ma question ?

    Et concrètement, quelle serait la version correcte du bout de code donné par UsagiYojimbo ?


    NB : pour être honnête, je vais régler le problème au coup par coup, via une page spéciale. Mais bon, la solution reste intéressante à connaître.
     
  11. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 169
    J'aime reçus:
    346
    PHP:
    <span class="syntaxdefault"></span><span class="syntaxkeyword"><?</span><span class="syntaxdefault">php<br />$sites </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> array_map</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">function </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$val</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    return filter_var</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$val</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> FILTER_SANITIZE_NUMBER_INT</span><span class="syntaxkeyword">);<br />},</span><span class="syntaxdefault"> $_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'site'</span><span class="syntaxkeyword">]);&nbsp;</span><span class="syntaxdefault"></span>
    https://3v4l.org/D14bS
     
  12. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Salut spout, merci pour ta réponse, comme d'hab' (reco au passage, of course). Et pour les autres aussi. Ah bah c'est pas possible, c'est limité à une, désolé.

    Ce qui m'intrigue dans le bout de code que tu nous proposes, spout, c'est la présence de cette $val.
    Si je traduis en français ton bout de code, est-ce que ça donne ça :
    J'ai bon ? Si oui, pourquoi ne pas appliquer la fonction array_map directement sur la variable $sites, elle aussi créée (instanciée ?) à la volée ?

    Ah hem...
     
  13. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 169
    J'aime reçus:
    346
    Heu je sais bien que tu n'aimes pas la doc, mais c'est clairement expliqué:
    http://php.net/manual/fr/function.array-map.php
    il y avait moyen aussi avec un foreach (en utilisant l'index, ou par référence, cfr. doc).
     
  14. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Bah justement je suis en train d'essayer cela, avec un foreach (fonction que j'utilise en général fort peu) :

    Code:
    $attribution_site = array_map(function ($val) 
    {
    return filter_var($val, FILTER_SANITIZE_NUMBER_INT);
    }, $_POST['attribution_site']); 
     
     
      foreach($attribution_site as $attribution)
        { 
     $sql = "UPDATE perso_auteur SET attribution_site=1 WHERE id='.$attribution.'";
     $stmt = $dbh->prepare ($sql); /* On prépare la requête */
     $stmt->execute();
     ;}//ferme foreach
    ;}//ferme isset premiere_attribution
    
    La logique générale me semble bonne :
    1) Je récupère un tableau de checkbox name="attribution_site[]" dont je filtre chaque ligne grâce à la fonction array_map que tu nous indiques.
    Puis pour chaque entrée, je fais l'update dans le tuple correspondant à l'id de cette entrée.

    Après, doit y'avoir quelques erreurs de syntaxe, parce que code est d'une efficience grandiose, on se comprend... Encore qu'il ne génère aucune erreur spécifique, juste un résultat nul.
     
  15. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Y'a de toute façon un problème, puisque si j'essaie d'afficher :
    Code:
    echo''.$attribution_site.''; 
    juste avant la ligne
    Code:
      foreach($attribution_dicopsy as $attribution) 
    ça affiche "array".

    Pfouuu les tableaux, va falloir que je me farcisse un tuto' de a à z.
     
  16. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    J'obtiens toutefois un résultat un peu moins lamentable avec vardump().


    Ne pas se moquer, merci.
     
  17. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    481
    J'aime reçus:
    0
    Ah ah ah ! ça vient de sauvagement marcher ! J'ai juste changer les ' ' pour des "" dans les paramètres de la requête.

    Hin hin, je suis trop bon, même pas besoin de vous, allez salut @plus les noob.





    Non je plaisante, partez pas, on sait jamais...
     
Chargement...
Similar Threads - questions propos tableaux Forum Date
Questions à propos d'AMP et du carrousel Référencement Google 27 Mai 2019
Questions à propos des modèles de pages "responsives" ? Développement d'un site Web ou d'une appli mobile 7 Novembre 2016
Quelques questions à propos des fonctions Administration d'un site Web 30 Mars 2015
Quelques questions à propos du Responsive Débuter en référencement 4 Mars 2014
Plusieurs questions à propos des forums Référencement Google 9 Octobre 2012
3 questions pièges à propos de comptes/campagnes similaires AdWords 31 Mars 2012
Questions à propos de fonctions sur les chaînes de caractères Développement d'un site Web ou d'une appli mobile 16 Novembre 2010
Questions à propos des outils de référencement yagoort Débuter en référencement 6 Février 2009
2 questions à propos des noms de domaine Noms de domaine et référencement 1 Août 2008
Questions à propos d'un site Demandes d'avis et de conseils sur vos sites 11 Novembre 2007
Questions diverses a propos de sitemap Crawl et indexation Google, sitemaps 5 Décembre 2006
Quelques questions à propos de Google Problèmes de référencement spécifiques à vos sites 5 Août 2005
Quelques questions à propos de Google Google : l'entreprise, les sites web, les services 10 Mai 2005
2 questions à propos du caractère "|" Débuter en référencement 12 Avril 2005
A propos de la CNIL - questions - Problèmes de référencement spécifiques à vos sites 25 Septembre 2004
Plusieurs questions avant de proposer mes pages à google Problèmes de référencement spécifiques à vos sites 9 Janvier 2004
SEO questions Référencement Google 9 Juin 2022
Questions SEO technique (pagination) Netlinking, backlinks, liens et redirections 1 Mai 2022
Questions URL canonique, crawl et indexation Débuter en référencement 25 Mars 2022
Questions Keyword dans domaine URL Demandes d'avis et de conseils sur vos sites 10 Décembre 2021