accès multiple à une bdd
Hors ligneAsquel Le 18/04/2006 à 14:03 Profil de Asquel Configuration de Asquel

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 } ?>
Hors ligneAnthony Le 18/04/2006 à 15:48 Profil de Anthony Configuration de Anthony

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 +
--

Hors ligneAsquel Le 18/04/2006 à 17:07 Profil de Asquel Configuration de Asquel

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
Hors ligneAnthony Le 18/04/2006 à 18:44 Profil de Anthony Configuration de Anthony

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 +
--

Hors ligneAsquel Le 19/04/2006 à 10:17 Profil de Asquel Configuration de Asquel

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
Hors ligneAnthony Le 19/04/2006 à 13:32 Profil de Anthony Configuration de Anthony

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 :-)
--

Hors ligneAsquel Le 19/04/2006 à 13:54 Profil de Asquel Configuration de Asquel

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 ?
Hors ligneAnthony Le 19/04/2006 à 13:56 Profil de Anthony Configuration de Anthony

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 :)
--

Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels