1. ✅ Apprenez une METHODE qui marche pour votre SEO ! Formation à distance avec Olivier Duffez et Fabien Facériès + aide pour prise en charge du financement
    Rejeter la notice

Problème pour passer un tableau en paramètre d'une requêtet SELECT.

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

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

    Je poursuis mes pérégrinations en PDO, en guise de remise à niveau par trop tardive, avec votre aide.
    Ici, j'essaie de passer un tableau en paramètre d'une requête SELECT.

    Le code s'exécute donc classiquement en deux étapes :

    1) Premièrement, on filtre le tableau à réception de la variable $_POST[]
    Code:
    if(!empty($_POST['id_tuple']))
    {
    $id_tuple = array_map(function ($val) 
    {
    return filter_var($val, FILTER_SANITIZE_NUMBER_INT);
    }, $_POST['id_tuple']); 
    ;}
    2) Puis on utilise ce tableau comme paramètre de la requête SELECT.
    Code:
    $stmt = $dbh->prepare("SELECT nom, prenom FROM auteur WHERE id = ?");
    if ($stmt->execute(array($id_tuple))) {
      while ($recherche= $stmt->fetch()) {
     $nom=$recherche->nom;
    $prenom=$recherche->prenom;
    echo' '.$nom.' '.$prenom.' <br>'
     ; }   
    }  
    A l'affichage sur la page, le résultat produit par mon code ressemble à l'antarctique. C'est beau, très blanc, mais un peu froid.

    Nonobstant l'exotisme certain de ma requête, je me dis que la première partie du code présente le problème de ne pas récupérer un tableau à partir de la variable $_POST[] réceptionnée et filtrée. Me trompe-je ?

    Merci d'avance pour vos réponses !
     
  2. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    138
    J'aime reçus:
    0
    Je ne connais pas PDO mais tu devrais faire une requête du type "WHERE id IN ()" plutôt que "WHERE id = "
     
  3. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    485
    J'aime reçus:
    0
    Salut Niap,

    Bah j'essaie différents trucs avec ta soluce qui paraît la bonne au vue de mes quelques recherches sur le net. Mais ça n'affiche rien de plus.
    Exemple :

    Code:
    $id_auteur=$_POST['id_auteur'];
     $sql = "
    SELECT
    nom,
    prenom
    FROM
    auteur
    WHERE id IN ('$id_auteur')
    ";
    $stmt = $dbh->prepare ($sql); 
    $stmt->execute();
    while($lettre= $stmt->fetch(PDO::FETCH_OBJ))
    {
     $nom=$lettre->nom;
    $prenom=$lettre->prenom;
    echo' '.$nom.' '.$prenom.' <br>'
     ; }    
    
    L'erreur ne parait pas se trouver dans la première partie du code (cf. premier message), puisque si j'enlève ces quelques lignes, ça ne change rien (ni affichage, ni message d'erreur).

    Faire un select à partir d'un tableau ne doit tout de même pas être sorcier. Il s'agit d'afficher tous les auteurs d'un même livre, je ne vais pas faire x select unique de suite, c'est ridicule.
     
  4. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    485
    J'aime reçus:
    0
    Je vais essayer avec un foreach et un select simple.
    J'reviens vous dire le résult'.

    Suspense
     
  5. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    485
    J'aime reçus:
    0
    Eh bah ça fonctionne, hein !

    Mais bougez pas, je reviens bientôt avec une nouvelle question improbable. De quoi vous causer des nuits blanches.
     
  6. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 885
    J'aime reçus:
    74
    Faudrait peut-être activer l'affichage des messages d'erreurs aussi. http://php.net/manual/fr/function.error-reporting.php
     
  7. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    485
    J'aime reçus:
    0
    J'ai activé cette fonction dès le début de ce nouveau projet. Mais je te remercie pour le lien, UsagiYojimbo.

    Tiens, puisque tu es là, tu pourras peut-être nous expliquer ce petit point de détail qui m'intrigue :
    Ca c'est le bout de code du premier message. Je récupère un tableau et je le filtre. Rien d'extraordinaire.
    Code:
    if(!empty($_POST['id']))
    {
    $id = array_map(function ($val) 
    {
    return filter_var($val, FILTER_SANITIZE_NUMBER_INT);
    }, $_POST['id]); 
    ;}
    
    Ce que je ne pige, c'est que pour envoyer un tableau, j'ai dû écrire name="id[]" dans les attributs du champ select text.

    Mais comment se fait-il qu'à réception de ce tableau par $_POST[], je puisse le récupérer dans une variable $id et non pas $id[] ? Comment PHP sait-il qu'il a toujours affaire à un tableau ?
     
  8. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    138
    J'aime reçus:
    0
    Si id_auteur est un array ça ne peut pas fonctionner, il faut utiliser implode().
    Code:
     $sql = "
    SELECT
    nom,
    prenom
    FROM
    auteur
    WHERE id IN ('".implode(',', $id_auteur)."')
    ";
    Oui c'est ridicule et niveau optimisation on repassera :mrgreen:
     
  9. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    485
    J'aime reçus:
    0
    Ouaip, j'ai tenté avec un implode, mais j'ai eu une erreur de code et finalement.

    Et finalement si, je fais x selects de suite, à l'intérieur d'un foreach qui lit le tableau et ma foi, le résultat est bon.
    Ca pose un problème selon vous ?

    A part ça, si quelqu'un peut répondre à la question posée juste avant la dernière réponse de niap,je suis preneur.
    Pourquoi donc un tableau de variable expédié via un input name="variable[]" se récupère-t'elle dans une variable $variable et non $variable[] ?
     
  10. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 057
    J'aime reçus:
    294
  11. Alorsladaccord
    Alorsladaccord WRInaute occasionnel
    Inscrit:
    30 Juillet 2014
    Messages:
    485
    J'aime reçus:
    0
    C'est étrange, mais bon, la programmation informatique a ses raisons que la raison ignore...
     
Chargement...
Similar Threads - Problème passer tableau Forum Date
Problème passerelle sur Prestashop e-commerce 8 Septembre 2020
Probleme pour passer mes annuaires freeglobes sur Arfooo Annuaires et moteurs 13 Janvier 2013
passer une var $_GET['page'] ou non [Probleme] URL Rewriting et .htaccess 23 Décembre 2009
Search Console Probleme redirection nom de domaine et indexation google Crawl et indexation Google, sitemaps 16 Septembre 2020
Problème indexation Google desktop/mobile Problèmes de référencement spécifiques à vos sites 3 Septembre 2020
Search Console Problèmes chargements images Crawl et indexation Google, sitemaps 3 Septembre 2020
Problème de position sur 1 mot-clé (effet yo-yo) Problèmes de référencement spécifiques à vos sites 21 Août 2020
WordPress Problème Filtre Demandes d'avis et de conseils sur vos sites 15 Août 2020
Problème déploiement nouvelle version app sur Android Développement d'un site Web ou d'une appli mobile 5 Août 2020
Problème organisation Array Développement d'un site Web ou d'une appli mobile 4 Août 2020