PHP/MySql: requete sur plusieurs tables

tonguim -  
 zouzou -
Le code suivant ne genere aucune erreur.

1- Je fais une requete sur 2 tables; chacune des tables contient un champ "matricule". Il me
semble qu'il y'a une confusion a l'affichage du matricule. Comment puis preciser le matricule
que je voudrai afficher en fonction de la table qui le contient?

2- J'affiche ensuite les enregistrements sous forme de tableau: le tableau est affiche 4 fois
de suite; je ne sais pourquoi.

Merci a ceux qui voudront bien m'aider.

<?php // ligne 1
{

$host = "localhost"; // ligne 4
$user = "root"; // ligne 5
$passwd = ""; // ligne 6
$dataB = "annuaireUo"; //ligne 7: chemin de la base de donnees
// ligne 8
$connBD = mysql_connect ($host, $user, $passwd); //ligne 9: connection au serveur MySql or die("Erreur de connection ".mysql_error())

mysql_select_db ($dataB, $connBD); // ligne 11: connection a la BD or die("Erreur de selection ".mysql_error())
$InsertionPersonnel = "insert into personnel (matricule, nom, prenom, sexe, profession, email, adresse, telDomicile, telMobile, grade ) VALUES ('".$_POST['matricule']."', '".$_POST['nom']."', '".$_POST['prenom']."', '".$_POST['sexe']."', '".$_POST['profession']."', '".$_POST['email']."', '".$_POST['adresse']."', '".$_POST['telDomicile']."', '".$_POST['telMobile']."', '".$_POST['grade']."')"; // insertion des donnes dans la BD personnel

$varcodePoste = $_POST['matricule'].$_POST['telPoste'];
$InsertionPosteTravail = "insert into postedetravail (codePoste, telPoste, codeService, matricule) values ('".$varcodePoste."', '".$_POST['telPoste']."', '".$_POST['codeServ']."', '".$_POST['matricule']."')"; // insertion des donnes dans la BD poste de travail

mysql_query ($InsertionPersonnel);
mysql_query ($InsertionPosteTravail);
//mysql_close(); // ligne 19
}
//////////////////////////////////////// affichage des enregistrements dans un tableau ////////////////////////////////

//$requete = "select * from personnel"; //selection de tous les enregistrements de la table personnel
//$sql_query2 = "select * from postedetravail"; //selection de tous les enregistrements de la table postedetravail ligne 24

$requete ="select
personnel.matricule,
personnel.grade,
personnel.nom,
personnel.prenom,
personnel.sexe,
personnel.profession,
personnel.email,
personnel.telDomicile,
personnel.telMobile,
postedetravail.codePoste,
postedetravail.telPoste,
postedetravail.codeService,
postedetravail.matricule

from personnel, postedetravail";

$result = mysql_query($requete); //ligne 42

//<!--<table> -->// ligne 44
echo "<table border = '1' bordercolor = '#000080'>";
echo '<tr>
<td><b>Matricule</b></td>
<td><b>Grade</b></td>
<td><b>Nom</b></td>
<td><b>Prenom</b></td>
<td><b>Sexe</b></td>
<td><b>Profession</b></td>
<td><b>E-mail</b></td>
<td><b>Téléphone dom</b></td>
<td><b>Téléphone mob</b></td>
<td><b>CodePoste</b></td>
</tr>';
$i=0;
While($row=mysql_fetch_array($result)) //ligne 59
{
if ($i%2==0)
$couleur='#dfdfdf';
else
$couleur='#ebebeb';
$i++; //ligne 65
echo'
<tr>
<td bgcolor="'.$couleur.'">'.$row['matricule'].' </td>
<td bgcolor="'.$couleur.'">'.$row['grade'].' </td>
<td bgcolor="'.$couleur.'">'.$row['nom'].'</td>
<td bgcolor="'.$couleur.'">'.$row['prenom'].' </td>
<td bgcolor="'.$couleur.'">'.$row['sexe'].'</td>
<td bgcolor="'.$couleur.'">'.$row['profession'].'</td>
<td bgcolor="'.$couleur.'">'.$row['email'].'</td>
<td bgcolor="'.$couleur.'">'.$row['telDomicile'].'</td>
<td bgcolor="'.$couleur.'">'.$row['telMobile'].'</td>
<td bgcolor="'.$couleur.'">'.$row['codePoste'].'</td>
</tr>';
}
echo "</table>";
mysql_close(); //ligne 81
?>

13 réponses

  1. tonguim
     
    Bonjour,

    merci pour tous vos conseils, que j'ai applique. Maintenant, le code ne genere aucune erreur;
    toutefois, il ne produit pas le resultat escompte: l'affichage des enregistrements.

    Pouvez-vous s'il vous plait me dire pourquoi, et comment puis je resoudre ce probleme?

    ======

    <?php // ligne 1
    {

    $host = "localhost"; // ligne 4
    $user = "root"; // ligne 5
    $passwd = ""; // ligne 6
    $dataB = "annuaireUo"; //ligne 7: chemin de la base de donnees
    // ligne 8
    $connBD = mysql_connect ($host, $user, $passwd); //ligne 9: connection au serveur MySql or die("Erreur de connection ".mysql_error())

    mysql_select_db ($dataB, $connBD); // ligne 11: connection a la BD or die("Erreur de selection ".mysql_error())
    $InsertionPersonnel = "insert into personnel (matricule, nom, prenom, sexe, profession, email, adresse, telDomicile, telMobile, grade) VALUES ('".$_POST['matricule']."', '".$_POST['nom']."', '".$_POST['prenom']."', '".$_POST['sexe']."', '".$_POST['profession']."', '".$_POST['email']."', '".$_POST['adresse']."', '".$_POST['telDomicile']."', '".$_POST['telMobile']."', '".$_POST['grade']."')"; // insertion des donnes dans la BD personnel

    $varcodePoste = $_POST['matricule'].$_POST['telPoste']; //concatenation du matricule et du num de tel du poste de travail

    $InsertionPosteTravail = "insert into postedetravail (codePoste, telPoste, codeService, matricule) values ('".$varcodePoste."', '".$_POST['telPoste']."', '".$_POST['codeServ']."', '".$_POST['matricule']."')"; // insertion des donnes dans la BD poste de travail

    $InsertionDirection = "insert into direction (codeDir, nomDir) values ('".$_POST['codeDir']."', '".$_POST['nomDir']."')"; // insertion des donnes dans la BD direction ligne 18
    $InsertionService = "insert into service (codeService, nomService, codeDir, matricule) values ('".$_POST['codeServ']."', '".$_POST['nomServ']."', '".$_POST['matricule']."')"; // insertion des donnes dans la BD direction

    mysql_query ($InsertionPersonnel);
    mysql_query ($InsertionPosteTravail);
    mysql_query ($InsertionDirection);
    mysql_query ($InsertionService);

    //mysql_close(); // ligne 26
    }
    //////////////////////////////////////// affichage des enregistrements dans un tableau ////////////////////////////////

    //$requete = "select * from personnel"; //selection de tous les enregistrements de la table personnel
    //$sql_query2 = "select * from postedetravail"; //selection de tous les enregistrements de la table postedetravail ligne 31

    $requete ="SELECT
    personnel.matricule,
    personnel.grade,
    personnel.nom,
    personnel.prenom,
    personnel.sexe,
    personnel.profession,
    personnel.email,
    personnel.telDomicile,
    personnel.telMobile,
    postedetravail.codePoste,
    postedetravail.telPoste,
    postedetravail.codeService,
    postedetravail.matricule,
    direction.nomDir,
    service.nomService

    FROM personnel

    INNER JOIN postedetravail ON postedetravail.matricule = personnel.matricule
    INNER JOIN service ON service.codeService = postedetravail.codeService
    INNER JOIN direction ON direction.codeDir = service.codeDir";

    $result = mysql_query($requete) or die (mysql_error()); //ligne 56

    //<!--<table> -->// ligne 58
    echo "<table border = '1' bordercolor = '#000080'>";
    echo '<tr>
    <td><b>Matricule</b></td>
    <td><b>Grade</b></td>
    <td><b>Nom</b></td>
    <td><b>Prenom</b></td>
    <td><b>Sexe</b></td>
    <td><b>Profession</b></td>
    <td><b>E-mail</b></td>
    <td><b>Téléphone dom</b></td>
    <td><b>Téléphone mob</b></td>
    <td><b>CodePoste</b></td>
    <td><b>Direction</b></td>
    <td><b>Service</b></td>
    </tr>';
    $i=0;
    While($row=mysql_fetch_array($result)) //ligne 73
    {
    if ($i%2==0)
    $couleur='#dfdfdf';
    else
    $couleur='#ebebeb';
    $i++; //ligne 79
    echo'
    <tr>
    <td bgcolor="'.$couleur.'">'.$row['matricule'].' </td>
    <td bgcolor="'.$couleur.'">'.$row['grade'].' </td>
    <td bgcolor="'.$couleur.'">'.$row['nom'].'</td>
    <td bgcolor="'.$couleur.'">'.$row['prenom'].' </td>
    <td bgcolor="'.$couleur.'">'.$row['sexe'].'</td>
    <td bgcolor="'.$couleur.'">'.$row['profession'].'</td>
    <td bgcolor="'.$couleur.'">'.$row['email'].'</td>
    <td bgcolor="'.$couleur.'">'.$row['telDomicile'].'</td>
    <td bgcolor="'.$couleur.'">'.$row['telMobile'].'</td>
    <td bgcolor="'.$couleur.'">'.$row['codePoste'].'</td>
    <td bgcolor="'.$couleur.'">'.$row['nomDir'].'</td>
    <td bgcolor="'.$couleur.'">'.$row['nomService'].'</td>
    </tr>';
    }
    echo "</table>";
    //mysql_free_result($result);
    mysql_close(); //ligne 96
    ?>
    3
  2. tonguim
     
    Bonjour,

    je voudrais effectuer une requete sur 4 tables, et voudrai afficher le resultat de la
    requete dans un seul tableaux.

    J'ai pu realiser une jointure avec 2 tables, mais ait des problemes pour realiser une
    jointure entre 4 differentes tables.

    Mes tables

    table personnel(matricule varchar (10) not null,
    nom varchar (30) not null,
    prenom varchar (30) not null,
    sexe varchar (30) not null,
    profession varchar (40) not null,
    email varchar (20) not null,
    adresse varchar (40),
    telDomicile varchar (16),
    telPhoto varchar (16),
    grade varchar (20), primary key(matricule))

    table postedetravail(codePoste varchar(10),
    telPoste varchar(10),
    codeService varchar(10),
    matricule(5),
    primary key (codePoste))

    table direction (codeDir varchar (10) not null,
    nomDir varchar (50) primary key (codeDir))

    table service (codeService varchar (10) not null,
    nomService varchar (50) not null,
    codeDir varchar (10),
    primary key (codeService))

    mon code

    <?php // ligne 1
    {

    $host = "localhost"; // ligne 4
    $user = "root"; // ligne 5
    $passwd = ""; // ligne 6
    $dataB = "annuaireUo"; //ligne 7: chemin de la base de donnees
    // ligne 8
    $connBD = mysql_connect ($host, $user, $passwd); //ligne 9: connection au serveur MySql or die("Erreur de connection ".mysql_error())

    mysql_select_db ($dataB, $connBD); // ligne 11: connection a la BD or die("Erreur de selection ".mysql_error())
    $InsertionPersonnel = "insert into personnel (matricule, nom, prenom, sexe, profession, email, adresse, telDomicile, telMobile, grade ) VALUES ('".$_POST['matricule']."', '".$_POST['nom']."', '".$_POST['prenom']."', '".$_POST['sexe']."', '".$_POST['profession']."', '".$_POST['email']."', '".$_POST['adresse']."', '".$_POST['telDomicile']."', '".$_POST['telMobile']."', '".$_POST['grade']."')"; // insertion des donnes dans la BD personnel

    $varcodePoste = $_POST['matricule'].$_POST['telPoste'];
    $InsertionPosteTravail = "insert into postedetravail (codePoste, telPoste, codeService, matricule) values ('".$varcodePoste."', '".$_POST['telPoste']."', '".$_POST['codeServ']."', '".$_POST['matricule']."')"; // insertion des donnes dans la BD poste de travail

    $InsertionDirection = "insert into direction (codedir, nomdir) values ('".$_POST['codeDir']."', '".$_POST['nomDir']."')"; // insertion des donnes dans la BD direction
    $InsertionService = "insert into service (codeService, nomService, codeDir, matricule) values ('".$_POST['codeServ']."', '".$_POST['nomServ']."', '".$_POST['matricule']."')"; // insertion des donnes dans la BD direction

    mysql_query ($InsertionPersonnel);
    mysql_query ($InsertionPosteTravail);
    mysql_query ($InsertionDirection);
    mysql_query ($InsertionService);

    //mysql_close(); // ligne 19
    }
    //////////////////////////////////////// affichage des enregistrements dans un tableau ////////////////////////////////

    //$requete = "select * from personnel"; //selection de tous les enregistrements de la table personnel
    //$sql_query2 = "select * from postedetravail"; //selection de tous les enregistrements de la table postedetravail ligne 30

    $requete ="select
    personnel.matricule,
    personnel.grade,
    personnel.nom,
    personnel.prenom,
    personnel.sexe,
    personnel.profession,
    personnel.email,
    personnel.telDomicile,
    personnel.telMobile,
    postedetravail.codePoste,
    postedetravail.telPoste,
    postedetravail.codeService,
    postedetravail.matricule
    direction.nomDir,
    service.nomService,

    from personnel, postedetravail, direction, service where postedetravail.matricule = personnel.matricule AND service.matricule = personnel.matricule AND direction.codeDir = service.codeDir";

    $result = mysql_query($requete); //ligne 51

    //<!--<table> -->// ligne 53
    echo "<table border = '1' bordercolor = '#000080'>";
    echo '<tr>
    <td><b>Matricule</b></td>
    <td><b>Grade</b></td>
    <td><b>Nom</b></td>
    <td><b>Prenom</b></td>
    <td><b>Sexe</b></td>
    <td><b>Profession</b></td>
    <td><b>E-mail</b></td>
    <td><b>Téléphone dom</b></td>
    <td><b>Téléphone mob</b></td>
    <td><b>CodePoste</b></td>
    </tr>';
    $i=0;
    While($row=mysql_fetch_array($result)) //ligne 68
    {
    if ($i%2==0)
    $couleur='#dfdfdf';
    else
    $couleur='#ebebeb';
    $i++; //ligne 74
    echo'
    <tr>
    <td bgcolor="'.$couleur.'">'.$row['matricule'].' </td>
    <td bgcolor="'.$couleur.'">'.$row['grade'].' </td>
    <td bgcolor="'.$couleur.'">'.$row['nom'].'</td>
    <td bgcolor="'.$couleur.'">'.$row['prenom'].' </td>
    <td bgcolor="'.$couleur.'">'.$row['sexe'].'</td>
    <td bgcolor="'.$couleur.'">'.$row['profession'].'</td>
    <td bgcolor="'.$couleur.'">'.$row['email'].'</td>
    <td bgcolor="'.$couleur.'">'.$row['telDomicile'].'</td>
    <td bgcolor="'.$couleur.'">'.$row['telMobile'].'</td>
    <td bgcolor="'.$couleur.'">'.$row['codePoste'].'</td>
    </tr>';
    }
    echo "</table>";
    mysql_close(); //ligne 91
    ?>
    2
  3. JSS Messages postés 3743 Date d'inscription   Statut Contributeur 32
     
    bonjour,

    d'apres moi pour 1 et 2 :

    from personnel, postedetravail";

    un peu avant la ligne 42

    ajoute where postedetravail.matricule = personnel.matricule

    JSS.j'ai.bon.la?
    1
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. tonguim
     
    Merci Jss; j'ai testé et ça marche.
    0
  6. JSS Messages postés 3743 Date d'inscription   Statut Contributeur 32
     
    Mais De Rien

    JSS.oui.j'ai.bon.là.:-)
    0
  7. tonguim
     
    L'exécution du code renvoie l'erreur suivante:

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-7\www\annuaireuo\enregbd11.php on line 71

    la ligne 71 est celle ci:

    While($row=mysql_fetch_array($result))

    ce qui signifie que l'erreur est générée par la requête qui se fait plus haut.
    0
  8. ric
     
    Pour maximiser vos chances d'obtenir des réponses à votre message veuillez s'il vous plaît :
    Faire usage de formules de politesse (Bonjour, merci, SVP)

    Bonjour
    Prends l'habitude quand tu as ce message d'afficher la requête pour vérifier sa syntaxe et essaie là dans PhpMyAdmin.
    0
  9. ric
     
    Bonjour
    $requete ="SELECT 
    personnel.matricule, personnel.grade, personnel.nom, personnel.prenom, 
    personnel.sexe, personnel.profession, personnel.email, personnel.telDomicile, personnel.telMobile, 
    postedetravail.codePoste, postedetravail.telPoste, postedetravail.codeService, postedetravail.matricule, 
    direction.nomDir, 
    service.nomService 
    FROM personnel, postedetravail, direction, service
    WHERE postedetravail.matricule = personnel.matricule 
    AND service.codeService = postedetravail.codeService 
    AND direction.codeDir = service.codeDir"; 
    C'est comme cela que je vois ta requête, d'après tes tables.
    Mais explique exactement ce que tu veux extraire de ta base.
    <td bgcolor="'.$couleur.'">'.$row[matricule].' </td> 
    <td bgcolor="'.$couleur.'">'.$row[grade].' </td> 
    <td bgcolor="'.$couleur.'">'.$row[nom].'</td> 
    <td bgcolor="'.$couleur.'">'.$row[prenom].' </td> 
    <td bgcolor="'.$couleur.'">'.$row[sexe].'</td> 
    <td bgcolor="'.$couleur.'">'.$row[profession].'</td> 
    <td bgcolor="'.$couleur.'">'.$row[email].'</td> 
    <td bgcolor="'.$couleur.'">'.$row[telDomicile].'</td> 
    <td bgcolor="'.$couleur.'">'.$row[telMobile].'</td> 
    <td bgcolor="'.$couleur.'">'.$row[codePoste].'</td> 
    <td bgcolor="'.$couleur.'">'.$row[nomDir].'</td> 
    <td bgcolor="'.$couleur.'">'.$row[nomService].'</td> 
    
    J'ai enlevé les quotes dans les variables $row.
    0
  10. tonguim
     
    Bonjour,
    voici la structure de mes tables:

    table personnel
    (matricule varchar (5) not null,
    nom varchar (30) not null,
    prenom varchar (30) not null,
    sexe varchar (30) not null,
    profession varchar (40) not null,
    email varchar (20) not null,
    adresse varchar (40),
    telDomicile varchar (16),
    telMobile varchar (16),
    grade varchar (20), primary key(matricule))

    table postedetravail
    (codePoste varchar(10),
    telPoste varchar(10),
    codeService varchar(10),
    matricule(5),
    primary key (codePoste))

    table direction
    (codeDir varchar (10) not null,
    nomDir varchar (50) primary key (codeDir))

    table service
    (codeService varchar (10) not null,
    nomService varchar (50) not null,
    codeDir varchar (10),
    primary key (codeService))

    Je voudrais afficher dans le meme tableau,

    personnel.matricule, personnel.grade, personnel.nom, personnel.prenom, personnel.sexe, personnel.profession, personnel.email,
    personnel.adresse, personnel.telDomicile, personnel.Mobile,
    direction.nomDir,
    service.nomService,
    postedetravail.telPoste

    mais je n'y arrive pas depuis. Merci de votre aide.
    0
  11. ric
     
    Salut
    Essaie déjà cette requête
    SELECT personnel.matricule, personnel.grade, personnel.nom, personnel.prenom, personnel.sexe, personnel.profession, personnel.email, personnel.telDomicile, personnel.telMobile, postedetravail.codePoste, postedetravail.telPoste, postedetravail.codeService, direction.nomDir, service.nomService 
    FROM personnel, postedetravail, direction, service 
    WHERE postedetravail.matricule = personnel.matricule 
    AND service.codeService = postedetravail.codeService 
    AND direction.codeDir = service.codeDir;
    
    et affiche la simplement
    echo "<tr><td>$row[matricule]</td>
    <td>$row[grade]</td>
    <td>$row[nom]</td>
    <td>$row[prenom]</td>
    <td>$row[sexe]</td>
    <td>$row[profession]</td>
    <td>$row[email]</td>
    <td>$row[telDomicile]</td>
    <td>$row[telMobile]</td>
    <td>$row[codePoste]</td>
    <td>$row[nomDir]</td>
    <td>$row[nomService]</td></tr>
    
    Quand cela marchera, tu pourras mettre l'habillage
    0
  12. zouzou
     
    moi aussi j'ai une probleme comme ça
    aprés la remplissage de formulaire j'aurrai envies d'enregistrer dans une table
    0
  13. ric
     
    Je suppose que personnel.matricule est identique à postedetravail.matricule. Si oui, attention à la cohérence des types VARCHAR(10) et (5)
    $requete ="SELECT
    personnel.matricule,
    personnel.grade,
    personnel.nom,
    personnel.prenom,
    personnel.sexe,
    personnel.profession,
    personnel.email,
    personnel.telDomicile,
    personnel.telMobile,
    postedetravail.codePoste,
    postedetravail.telPoste,
    postedetravail.codeService,
    postedetravail.matricule ??? identique à personnel.matricule
    direction.nomDir,
    service.nomService,

    FROM personnel, postedetravail, direction, service
    WHERE personnel.matricule = postedetravail.matricule
    AND service.matricule = personnel.matricule ??? service.matricule n'existe pas
    AND service.codeService = postedetravail.codeService
    AND direction.codeDir = service.codeDir"
    ;
    Utilise des MAJUSCULES, cela facilite le lecture.
    -1