Asquel |
Le 18/04/2006 à 14:03 |
|
|
Bonjour tout le monde,
voilà je développe en ce moment une interface de gestion d'un parc informatique dans le cadre de mon stage . La base de donnée est composée de plusieurs tables (computer, user, place ...) Il y a un moment dans une page je dois remplir un tableau avec les données de la base, donc je fais une boucle while pour remplir le tableau, mais pour chaque ligne du tableau je dois chercher dans autre table l'utilisateur ou la salle qui correspond à l'ordinateur en question.
Alors, la question c'est que j'ai accès à la base de donnée en haut de la page, et après j'en ouvre deux autres ... y a t il moyen de faire autrement ?
merci bien à ceux qui m'aideront
$base = new bd();
$base->connectBase($serveur_z, $login_z, $pass_z, $base_z);
$base2 = new bd();
$base2->connectBase($serveur_z, $login_z, $pass_z, $base_z);
$sql = 'SELECT * FROM Computer ORDER BY IP';
$base->executeRequete($sql);
?>
<br/>
<body>
<table border="1" align="center" width="95%" style="text-align:center ">
<tr>
<td>IP</td>
<td>RechnerName</td>
<td>Inventar Name</td>
<td>Benutzer Name</td>
<td>Modify</td>
</tr>
<?php
while($m = $base->getLigneResultatSuivante()){ ?>
<tr><?php
echo '<td>' . $m['IP'] . '</td>';
echo '<td>' . $m['Rechnername'] . '</td>';
echo '<td>' . $m['InventarName'] . '</td>';
// Recherche de l'utilisateur associé
$sql2 = 'SELECT BenutzerName FROM comp_user WHERE IP="'.$m['IP'].'"';
$base2->executeRequete($sql2);
$b=$base2->getLigneResultatSuivante();
echo '<td>' . $b['BenutzerName'] . '</td>';
?>
<td><a href="index.php?page=modifyied_computer&IP=<?php echo ($m['IP']);?>">Modify this</a> </td>
</tr>
<?php }
$base->deconnectServeur();
$base2->deconnectServeur();
?>
</table>
</body>
<?php } ?>
|
Anthony |
Le 18/04/2006 à 15:48 |
|
 Admin |
Salut,
quelles sont les structures de tes deux tables ? car il y a moyen de torcher ça en une seule requête via jointure à mon avis, ça t'éviterai plein de problèmes d'optimisation notamment.
a + -- 
|
Asquel |
Le 18/04/2006 à 17:07 |
|
|
a mais oui trop jsuis trop bête j'y avais même pas pensé !! mais j'ai néanmoins une question ... lorsque l'on fait une jointure sur deux ou trois tables, le résultat se met aussi dans un array() dans le cas de mysql_fetch_assoc et on peut accéder à chaque champs des trois tables comme dans le cas d'un résultat normal ?? du type $resultat['nom_du_champ']; ??
merci encore bon jmets la structure de mes tables au cas quand même...
Computer idComputer int(11) IP varchar(15) Rechnername varchar(50) MacAdress varchar(50) InventarName varchar(50) DHCP char(3) idPlace int(11) jahr int(11) idOS int(11) biOS char(3) privateComp char(3) notuse char(3) caract varchar(100) SAV char(3) ntp char(3) bemerkungen varchar(100)
User : Comp_idUser int(11) Benutzername varchar(50) IP varchar(15)
OS : idOS int(11) OSName varchar(50)
Place : idPlace int(11) Ort varchar(10)
Sur chaque affichage il doit y avoir toutes les caractèristiques de l'ordinateur y compris son "user" son "os" et sa "place"
merci beaucoup |
Anthony |
Le 18/04/2006 à 18:44 |
|
 Admin |
La requête serait du style :
SELECT c.idComputer,c.IP,c.Rechnername,c.MacAdress,c.InventarName,c.DHCP,c.idPlace,c.jahr,c.idOS,c.biOS, c.privateComp,c.notuse,c.caract,c.SAV,c.ntp, c.bemerkungen,u.Benutzername,o.OSName,p.Ort FROM User u LEFT JOIN Computer c ON u.IP=c.IP LEFT JOIN OS o ON o.idOS=c.idOS LEFT JOIN Place p ON p.idPlace=c.idPlace ORDER BY c.IP ASC
bref après tu n'as plus qu'à récupérer les champs.
N'oublie pas le mysql_close(); après le mysql_query.
a + -- 
|
Asquel |
Le 19/04/2006 à 10:17 |
|
|
merci bien, vraiment, j'avoue que je ne sais même pas pourquoi j'y avais pas pensé plus tot ...
en tout cas merci beaucoup d'avoir répondu et ne t'inquiètes pas je ferme toujours ma connection à la bdd après l'avoir ouvert :D
Voilà, je viens d'essayer ca marche beaucoup tout de suite :)
Mais maintenant je me demandais est ce que il est plus sécurisé de faire cette accès à la base de donnée une fois et de réutiliser l'objet en le passant en variable de session ou alors est ce que c'est mieux de réaccéder sur chaque page à la base pour en extraire les élèments.
Par exemple il y a dans le liste une page "list all computer" et une page "modify computer", dans les deux j'affiche la liste complète des ordinateurs classés par page mais je n'affiche pas les mêmes champs ...
merci d'avance |
Anthony |
Le 19/04/2006 à 13:32 |
|
 Admin |
Salut,
les sessions sont largement assez sécurisées pour faire ce genre de choses :) inutile de refaire la même chose la page suivante :-) -- 
|
Asquel |
Le 19/04/2006 à 13:54 |
|
|
et donc jpeux passer le résultat de ma requete sql dans la session et comme j'ai plus besoin d'accèder à la base après ... pas mal pas mal ! mais résultat d'une requete sql est un type byzarre ... c'est pas trop un objet alors est ce que je dois le serializer quand même tu penses ? |
Anthony |
Le 19/04/2006 à 13:56 |
|
 Admin |
En fait non faut pas passer une ressource en session, faut dérouler tout le tableau de la requête que tu vas ajouter en session :) -- 
|