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

Alorsladaccord

WRInaute occasionnel
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 !
 

niap

WRInaute discret
Je ne connais pas PDO mais tu devrais faire une requête du type "WHERE id IN ()" plutôt que "WHERE id = "
 

Alorsladaccord

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

Alorsladaccord

WRInaute occasionnel
Eh bah ça fonctionne, hein !

Mais bougez pas, je reviens bientôt avec une nouvelle question improbable. De quoi vous causer des nuits blanches.
 

Alorsladaccord

WRInaute occasionnel
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 ?
 

niap

WRInaute discret
Alorsladaccord a dit:
Code:
 $sql = "
SELECT
nom,
prenom
FROM
auteur
WHERE id IN ('$id_auteur')
";
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)."')
";

Alorsladaccord a dit:
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.
Oui c'est ridicule et niveau optimisation on repassera :mrgreen:
 

Alorsladaccord

WRInaute occasionnel
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[] ?
 

Discussions similaires

Haut