PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 08-02-2010 17:26:43

t14
Membre
Inscription : 10-09-2009
Messages : 96

boucle sur champs mysql

Bonjour,

J'ai une table nommée "infos" qui contient un champ "participant". Ce champ peut être vide ou contenir de 1 à plusieurs numéros. Les numéros correspondent à un identifiant unique "id_mb" de la table "membres", et sont sous la forme "-1-2-3-4-5-6".

Je veux extraire ce ou ces numéros, s’ils existent, et afficher leur correspondance (nom) de la table "membres".
Mais je n’arrive à afficher que le dernier nom enregistré, et moi je les veux tous !  Dans l’exemple "-1-2-3-4-5-6", je n’afficherais que le nom correspondant à 6 ?

Voici mon code

$requete="SELECT * FROM infos ORDER BY date ASC";
$result = mysql_query($requete,$link) or exit ('Erreur : '.mysql_error() );

while($row = mysql_fetch_array($result))
{
//vérification du champ participant. Si non vide, on ira rechercher la correspondance dans la table "membres".
if (!empty($row['participant']))
  {
  $part = explode("-", $row['participant']);
  $i = 0;
      foreach ($part as $part2)
      {
        $part2 = ($part[$i]);
        $i++;
      }  
  $req="SELECT * FROM membres where id_mb like '$part2'";
  $result2 = mysql_query($req,$link) or exit ('Erreur : '.mysql_error() );
  while ($row2 = mysql_fetch_array($result2))
    {
        echo '<td>'.$row['titre'].'</td>'; // issu de la base infos
        echo '<td>'.$row['texte'].'</td>'; // issu de la base infos
        echo '<td>'.$row2['nom'].'</td>'; // issu de la base membres ..............................

Merci pour votre aide

Hors ligne

#2 08-02-2010 18:54:55

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : boucle sur champs mysql

t14 a écrit :

J'ai une table nommée "infos" qui contient un champ "participant". Ce champ peut être vide ou contenir de 1 à plusieurs numéros. Les numéros correspondent à un identifiant unique "id_mb" de la table "membres", et sont sous la forme "-1-2-3-4-5-6".

Premier défaut conceptuel, les colonnes d'une table doivent être des scalaires et non des données tabulaires.

t14 a écrit :

Je veux extraire ce ou ces numéros, s’ils existent, et afficher leur correspondance (nom) de la table "membres".
Mais je n’arrive à afficher que le dernier nom enregistré, et moi je les veux tous !  Dans l’exemple "-1-2-3-4-5-6", je n’afficherais que le nom correspondant à 6 ?

Voici mon code

$requete="SELECT * FROM infos ORDER BY date ASC";
$result = mysql_query($requete,$link) or exit ('Erreur : '.mysql_error() );

while($row = mysql_fetch_array($result))
{
//vérification du champ participant. Si non vide, on ira rechercher la correspondance dans la table "membres".
if (!empty($row['participant']))
  {
  $part = explode("-", $row['participant']);
  $i = 0;
      foreach ($part as $part2)
      {
        $part2 = ($part[$i]);
        $i++;
      }  
  $req="SELECT * FROM membres where id_mb like '$part2'";
  $result2 = mysql_query($req,$link) or exit ('Erreur : '.mysql_error() );
  while ($row2 = mysql_fetch_array($result2))
    {
        echo '<td>'.$row['titre'].'</td>'; // issu de la base infos
        echo '<td>'.$row['texte'].'</td>'; // issu de la base infos
        echo '<td>'.$row2['nom'].'</td>'; // issu de la base membres ..............................

Encore un mauvais point : La guerre des étoiles.
Pourquoi utilser un compteur $i alors qu'avec foreach tu récupères déjà chaque couple clef-valeur ?
Pourquoi choisir mysql_fetch_array si c'est pour utiliser les index associatifs de mysql_fetch_assoc ?


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 10-02-2010 14:33:05

t14
Membre
Inscription : 10-09-2009
Messages : 96

Re : boucle sur champs mysql

Bonjour Maljuna Kris,

Que veux-tu dire par "les colonnes d'une table doivent être des scalaires et non des données tabulaires" ? hmm

J'ai testé et remplacé dans mon script "$row2 = mysql_fetch_array($result2);" par "$row2 = mysql_fetch_assoc($result2);", mais je n'ai pas de différence ! sad

Par contre, si j'écris

if (!empty($row['participant']))
  {
  $part = explode("-", $row['participant']);
      foreach ($part as $value)      
     
  $req="SELECT * FROM membres where id_mb like '$value'";
  $result2 = mysql_query($req,$link) or exit ('Erreur : '.mysql_error() );
  while ($row2 = mysql_fetch_array($result2))

j'obtient bien dans $value toutes mes enregistrements du champ participant.
Mais comment faire la relation avec l'autre table (id_mb), récupérer et afficher les champs correspondant et leurs valeurs ?

Merci

Dernière modification par t14 (10-02-2010 15:54:45)

Hors ligne

#4 10-02-2010 20:21:52

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : boucle sur champs mysql

Combien de fois faudra-t'il dire que SELECT * est à bannir ?
$scalaire="Ceci est une donnée scalaire";
$tabulaire=array("Ceci","est,"une","donnée","tabulaire");
Une table ne doit pas comporter de colonnes répétitives, ni de colonne à donnée tabulaire.
Quand à la différence entre mysql_fetch_array() et mysql_fetch_assoc(), si tu ne la vois pas ton serveur lui la note, la deuxième est nettement moins gourmande en ressources.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums