Deux questions à propos des tableaux de variable

Consultez la formation SEO spéciale Wordpress
par WebRankInfo / Ranking Metrics

Alorsladaccord
WRInaute impliqué
WRInaute impliqué
 
Messages: 502
Enregistré le: 30 Juil 2014

Deux questions à propos des tableaux de variable

Message le Lun Mar 13, 2017 17:16

Bonjour,

J'utilise un checkbox, comme suit :
Code: Tout sélectionner
<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: Tout sélectionner
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...
Modifié en dernier par Alorsladaccord le Lun Mar 13, 2017 17:35, modifié 1 fois.


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 12067
Enregistré le: 23 Nov 2005

Re: Deux questions à propos des tableaux de variable

Message le Lun Mar 13, 2017 17:29

Code: Tout sélectionner
<input type="checkbox" name="site[]" value="1">
<input type="checkbox" name="site[]" value="2">


Il manque le [] dans l'attribut name du 2e champ.

Alorsladaccord
WRInaute impliqué
WRInaute impliqué
 
Messages: 502
Enregistré le: 30 Juil 2014

Re: Deux questions à propos des tableaux de variable

Message le Lun Mar 13, 2017 17:37

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 ?

Alorsladaccord
WRInaute impliqué
WRInaute impliqué
 
Messages: 502
Enregistré le: 30 Juil 2014

Re: Deux questions à propos des tableaux de variable

Message le Lun Mar 13, 2017 17:44

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.


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 12067
Enregistré le: 23 Nov 2005

Re: Deux questions à propos des tableaux de variable

Message le Lun Mar 13, 2017 17:50

Code: Tout sélectionner
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.

Alorsladaccord
WRInaute impliqué
WRInaute impliqué
 
Messages: 502
Enregistré le: 30 Juil 2014

Re: Deux questions à propos des tableaux de variable

Message le Lun Mar 13, 2017 17:57

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


niap
WRInaute discret
WRInaute discret
 
Messages: 137
Enregistré le: 17 Oct 2009

Re: Deux questions à propos des tableaux de variable

Message le Lun Mar 13, 2017 18:15

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: Tout sélectionner
<input type="checkbox" name="checkbox1" value="bim" />
<input type="checkbox" name="checkbox2" value="bam" />
<input type="checkbox" name="checkbox3" value="boum" />


spout
WRInaute accro
WRInaute accro
 
Messages: 8331
Enregistré le: 14 Mai 2003

Re: Deux questions à propos des tableaux de variable

Message le Lun Mar 13, 2017 18:18

@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


niap
WRInaute discret
WRInaute discret
 
Messages: 137
Enregistré le: 17 Oct 2009

Re: Deux questions à propos des tableaux de variable

Message le Lun Mar 13, 2017 18:45

spout a écrit:@niap: non on px faire un name="foo[]" et $_POST['foo'] sera un array avec toutes les values ;)

Ah, je connaissais pas, merci.

Alorsladaccord
WRInaute impliqué
WRInaute impliqué
 
Messages: 502
Enregistré le: 30 Juil 2014

Re: Deux questions à propos des tableaux de variable

Message le Lun Mar 13, 2017 18:52

niap a écrit:Mais... tu utilise le même nom pour tes case à cocher ?]

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


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.

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

spout a écrit:@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

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.


spout
WRInaute accro
WRInaute accro
 
Messages: 8331
Enregistré le: 14 Mai 2003

Re: Deux questions à propos des tableaux de variable

Message le Lun Mar 13, 2017 19:35

Code: Tout sélectionner
<?php
$sites 
= array_map(function ($val) {
    return filter_var($val, FILTER_SANITIZE_NUMBER_INT);
},
 $_POST['site']); 

https://3v4l.org/D14bS

Alorsladaccord
WRInaute impliqué
WRInaute impliqué
 
Messages: 502
Enregistré le: 30 Juil 2014

Re: Deux questions à propos des tableaux de variable

Message le Mar Mar 14, 2017 13:00

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 :
Je crée une variable $sites, à partir de la fonction array_map qui nécessite la création "à la volée" d'une variable $val réceptionnant le contenu de $_POST['site'] sur lequel la fonction Sanitize vient d'être appliquée.


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


spout
WRInaute accro
WRInaute accro
 
Messages: 8331
Enregistré le: 14 Mai 2003

Re: Deux questions à propos des tableaux de variable

Message le Mar Mar 14, 2017 13:48

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
array_map — Applique une fonction sur les éléments d'un tableau


il y avait moyen aussi avec un foreach (en utilisant l'index, ou par référence, cfr. doc).

Alorsladaccord
WRInaute impliqué
WRInaute impliqué
 
Messages: 502
Enregistré le: 30 Juil 2014

Re: Deux questions à propos des tableaux de variable

Message le Mar Mar 14, 2017 14:37

Bah justement je suis en train d'essayer cela, avec un foreach (fonction que j'utilise en général fort peu) :

Code: Tout sélectionner
$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.

Alorsladaccord
WRInaute impliqué
WRInaute impliqué
 
Messages: 502
Enregistré le: 30 Juil 2014

Re: Deux questions à propos des tableaux de variable

Message le Mar Mar 14, 2017 14:44

Y'a de toute façon un problème, puisque si j'essaie d'afficher :
Code: Tout sélectionner
echo''.$attribution_site.'';

juste avant la ligne
Code: Tout sélectionner
  foreach($attribution_dicopsy as $attribution)


ça affiche "array".

Pfouuu les tableaux, va falloir que je me farcisse un tuto' de a à z.

Alorsladaccord
WRInaute impliqué
WRInaute impliqué
 
Messages: 502
Enregistré le: 30 Juil 2014

Re: Deux questions à propos des tableaux de variable

Message le Mar Mar 14, 2017 15:02

J'obtiens toutefois un résultat un peu moins lamentable avec vardump().


Ne pas se moquer, merci.

Alorsladaccord
WRInaute impliqué
WRInaute impliqué
 
Messages: 502
Enregistré le: 30 Juil 2014

Re: Deux questions à propos des tableaux de variable

Message le Mar Mar 14, 2017 15:14

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


Formation recommandée sur ce thème :

Formation SEO spéciale Wordpress : apprenez à optimiser le référencement naturel d'un site fait avec Wordpress... Formation Ranking Metrics animée par un expert SEO / Wordpress.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :