PHP/MySql: requete sur plusieurs tables

Fermé
tonguim - 22 juil. 2004 à 17:43
 zouzou - 12 oct. 2007 à 10:31
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
?>
A voir également:

13 réponses

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
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
JSS Messages postés 3745 Date d'inscription jeudi 22 avril 2004 Statut Contributeur Dernière intervention 17 décembre 2004 32
22 juil. 2004 à 18:21
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
J'essaie, et je te fais le rapport.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci Jss; j'ai testé et ça marche.
0
JSS Messages postés 3745 Date d'inscription jeudi 22 avril 2004 Statut Contributeur Dernière intervention 17 décembre 2004 32
23 juil. 2004 à 10:56
Mais De Rien

JSS.oui.j'ai.bon.là.:-)
0
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
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
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
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
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
moi aussi j'ai une probleme comme ça
aprés la remplissage de formulaire j'aurrai envies d'enregistrer dans une table
0
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