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

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

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

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

Message le Ven Mar 24, 2017 16:41

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: Tout sélectionner
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: Tout sélectionner
$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
WRInaute discret
 
Messages: 137
Enregistré le: 17 Oct 2009

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

Message le Sam Mar 25, 2017 10:04

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

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

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

Message le Sam Mar 25, 2017 14:28

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: Tout sélectionner
$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 impliqué
WRInaute impliqué
 
Messages: 505
Enregistré le: 30 Juil 2014

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

Message le Sam Mar 25, 2017 14:32

Je vais essayer avec un foreach et un select simple.
J'reviens vous dire le résult'.

Suspense

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

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

Message le Sam Mar 25, 2017 14:38

Eh bah ça fonctionne, hein !

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


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

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

Message le Sam Mar 25, 2017 14:39

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.


Faudrait peut-être activer l'affichage des messages d'erreurs aussi. http://php.net/manual/fr/function.error-reporting.php

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

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

Message le Sam Mar 25, 2017 14:51

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: Tout sélectionner
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
WRInaute discret
 
Messages: 137
Enregistré le: 17 Oct 2009

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

Message le Sam Mar 25, 2017 17:10

Alorsladaccord a écrit:
Code: Tout sélectionner
 $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: Tout sélectionner
 $sql = "
SELECT
nom,
prenom
FROM
auteur
WHERE id IN ('".implode(',', $id_auteur)."')
";


Alorsladaccord a écrit: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 impliqué
WRInaute impliqué
 
Messages: 505
Enregistré le: 30 Juil 2014

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

Message le Lun Mar 27, 2017 16:09

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


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

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

Message le Lun Mar 27, 2017 20:37

http://stackoverflow.com/questions/15854017/what-rfc-defines-arrays-tr ... -over-http
Dans les autres langages de programmation c'est pareil, donc surement plus lié à HTTP qu'au langage.
Tu peux même faire: name="data[foo][bar][baz]"

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

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

Message le Mar Mar 28, 2017 12:39

C'est étrange, mais bon, la programmation informatique a ses raisons que la raison ignore...


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 :