Bonjour,
Je cherche à lister tous les auteurs (table auteur) de chaque article (table article) grâce à une jointure avec une table de relation (t_article_auteur).
Mon code actuel n'est sans doute pas idéal, mais il fonctionne.
Maintenant, je tente d'utiliser les requêtes préparées, mais je sèche sur 2 boucles while imbriquées : la première boucle ne "boucle pas" (elle ne récupère que le premier article) alors que la deuxième boucle fonctionne comme attendu (elle récupère bien tous les auteurs de l'article retourné par la première).
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 $sql_data = <<<SQL SELECT t_article.Titre, t_article.Page, t_article.Numero, t_article.id_article FROM t_article, ... WHERE conditions sur plusieurs tables GROUP BY id_article ORDER BY Numero, Page, Titre; SQL; $stmt_data=mysqli_prepare($db, $sql_data); mysqli_stmt_execute($stmt_data); mysqli_stmt_bind_result($stmt_data, $res_titre, $res_page, $res_numero, $id_parution, $id_article); $data = array(); // BOUCLE PRIMAIRE (LES ARTICLES) while (mysqli_stmt_fetch($stmt_data)){ //AUTEURS $sql_auteur = <<<SQL SELECT t_auteur.auteur FROM t_article, t_auteur INNER JOIN t_article_auteur ON t_article_auteur.auteur = t_auteur.auteur WHERE t_article_auteur.id_article = ? GROUP BY t_auteur.auteur; SQL; //BOUCLE SECONDAIRE (AUTEURS) $stmt_auteur=mysqli_prepare($db, $sql_auteur); mysqli_stmt_bind_param($stmt_auteur, 'i', $id_article); mysqli_stmt_execute($stmt_auteur); mysqli_stmt_bind_result($stmt_auteur, $res_auteur); $cell_auteur = array(); while (mysqli_stmt_fetch($stmt_auteur)) { $cell_auteur[]=$res_auteur; } $cell_val_auteur= implode("\n", $cell_auteur); $data[] = <<<HTML <tr> <td class="alignc"> {$res_numero} </td> <td class="alignr"> {$res_page} </td> <td> <a href="http://localhost/articles-criteres-croises-tableau-details-secu-pour-ddk3_prep/pdf/{$id_parution}/{$id_article}.pdf" target='_blank'>{$res_titre}</a> </td> <td> {$cell_val_auteur} </td> </tr> HTML; } ?>
Je ne suis pas sûr d'avoir saisi toutes les subtilités de la classe stmt, mais pas sûr non plus de mon php...
Une idée sur mon erreur ?
Merci!
Si ça peut aider, le code qui fonctionne :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 $sql = <<<SQL SELECT t_article.Titre, t_article.Page, t_article.Numero, t_article.id_article FROM t_article, ... WHERE conditions sur plusieurs tables GROUP BY id_article ORDER BY Numero, Page, Titre; SQL; $data = array(); // BOUCLE PRIMAIRE (LES ARTICLES) $qry = mysqli_query($db, $sql); while($row = mysqli_fetch_assoc ($qry)) { $article = mysqli_escape_string ($db, $row['id_article']); //BOUCLE SECONDAIRE (AUTEURS) $sql_auteur = <<<SQL SELECT t_auteur.auteur FROM t_article, t_auteur INNER JOIN t_article_auteur ON t_article_auteur.auteur = t_auteur.auteur WHERE t_article_auteur.id_article = $article GROUP BY t_auteur.auteur; SQL; $qry_auteur=mysqli_query($db, $sql_auteur); while($row_auteur = mysqli_fetch_row($qry_auteur)) { $data_auteur[] = $row_auteur; } $cell_auteur = implode ("\n", $data_auteur); $data[] = <<<HTML <tr> <td class="alignc"> {$row['Numero']} </td> <td class="alignr"> {$row['Page']} </td> <td> <a href="pdf/{$row['ref_parution']}/{$row['id_article']}.pdf" target='_blank'>{$row['Titre']}</a> </td> <td> {$cell_auteur} </td> </tr> HTML; }
Partager