Boucle while dans ldap
gmartine
-
gmartine -
gmartine -
Bonjour,
j'ai un problème avec ma boucle while dans mon code php . le problème c'est que mon tableau s'affiche bien correctement mais les lignes se génèrent à l'infini. ce qui fait que ma page se charge en permanence.
en sql je sait qu'il faut utiliser mysql fetch array dans la boucle while mais en ldap aucune idée
voici mon code :
<?
// Fichier de configuration pour l'interface PHP
// de notre annuaire LDAP
$server = "ldap.gi.utc";
$ds=ldap_connect($server);
if ($ds) {
$r=ldap_bind($ds);
$dn = "ou=people, dc=gi, dc=utc";
$filtre="(|(ou=$heudiasyc*)(cn=$person*))";
$restriction = array( "cn", "sn", "mail", "title", "telephonenumber", "postofficebox" );
$sr=ldap_search($ds, $dn, $filtre, $restriction);
$nombre = ldap_count_entries($ds, $sr);
print $nombre." enregistrements trouves
";
// echo "Répétion des entré ...";
//echo "<br><br>";
$info = ldap_get_entries($ds, $sr);
// echo "Affichage des donné des ".$info["count"]. " entré trouvé :";
$i = 0;
echo "<table border=0 cellpadding=9>";
echo "<tr bgcolor=#4F707D>";
echo "<td width=200><font color=#FFFFFF>NOM PRENOM</font></td>";
echo "<td width=170><font color=#FFFFFF>FONCTION</font></td>";
echo "<td width=300><font color=#FFFFFF>TELEPHONE</font></td>";
echo "<td width=70><font color=#FFFFFF>EMAIL</font></td>";
echo "<td width=50><font color=#FFFFFF>BUREAU</font></td>";
echo "<tr>";
while($infos)
{
$i = $i + 1;
if ($i%2 == 0) echo '<tr bgcolor = "#FFFFFF">';
else echo '<tr bgcolor = "#eaf1f9">';
echo "<td>". $info[$i]["cn"][0] . "</td>";
echo "<td>". $info[$i]["title"][0] . "</td>";
echo "<td>". $info[$i]["telephonenumber"][0] . "</td>";
for($j=0;$j<$info[$i]["mail"]["count"];$j++) {
echo "<td>". $info[$i]["mail"][$j] ."</td>";
}
echo "<td>". $info[$i]["postofficebox"][0] . "</td>";
echo "</tr>";
}
ldap_close($ds);
echo "</table>";
}
else {
echo "Connexion au serveur LDAP impossible";
}
?>
merci ;)
j'ai un problème avec ma boucle while dans mon code php . le problème c'est que mon tableau s'affiche bien correctement mais les lignes se génèrent à l'infini. ce qui fait que ma page se charge en permanence.
en sql je sait qu'il faut utiliser mysql fetch array dans la boucle while mais en ldap aucune idée
voici mon code :
<?
// Fichier de configuration pour l'interface PHP
// de notre annuaire LDAP
$server = "ldap.gi.utc";
$ds=ldap_connect($server);
if ($ds) {
$r=ldap_bind($ds);
$dn = "ou=people, dc=gi, dc=utc";
$filtre="(|(ou=$heudiasyc*)(cn=$person*))";
$restriction = array( "cn", "sn", "mail", "title", "telephonenumber", "postofficebox" );
$sr=ldap_search($ds, $dn, $filtre, $restriction);
$nombre = ldap_count_entries($ds, $sr);
print $nombre." enregistrements trouves
";
// echo "Répétion des entré ...";
//echo "<br><br>";
$info = ldap_get_entries($ds, $sr);
// echo "Affichage des donné des ".$info["count"]. " entré trouvé :";
$i = 0;
echo "<table border=0 cellpadding=9>";
echo "<tr bgcolor=#4F707D>";
echo "<td width=200><font color=#FFFFFF>NOM PRENOM</font></td>";
echo "<td width=170><font color=#FFFFFF>FONCTION</font></td>";
echo "<td width=300><font color=#FFFFFF>TELEPHONE</font></td>";
echo "<td width=70><font color=#FFFFFF>EMAIL</font></td>";
echo "<td width=50><font color=#FFFFFF>BUREAU</font></td>";
echo "<tr>";
while($infos)
{
$i = $i + 1;
if ($i%2 == 0) echo '<tr bgcolor = "#FFFFFF">';
else echo '<tr bgcolor = "#eaf1f9">';
echo "<td>". $info[$i]["cn"][0] . "</td>";
echo "<td>". $info[$i]["title"][0] . "</td>";
echo "<td>". $info[$i]["telephonenumber"][0] . "</td>";
for($j=0;$j<$info[$i]["mail"]["count"];$j++) {
echo "<td>". $info[$i]["mail"][$j] ."</td>";
}
echo "<td>". $info[$i]["postofficebox"][0] . "</td>";
echo "</tr>";
}
ldap_close($ds);
echo "</table>";
}
else {
echo "Connexion au serveur LDAP impossible";
}
?>
merci ;)
Configuration: Windows 7 google chrome
4 réponses
-
Bonjour
Ben oui, le problème est ton :
while($info) { }
Si tu ne le modifies pas, il garde la même valeur donc la boucle est infinie.
La solution est donc :$info = ldap_get_entries($ds, $sr); while($info) { // Tout ton code // Puis à la fin $info = ldap_get_entries($ds, $sr); }-
merci mais
j'ai essayé ce que tu viens de me donner et sa me fait toujours la même chose
$info = ldap_get_entries($ds, $sr);
while($info) {
// Tout ton code
// Puis à la fin
$info = ldap_get_entries($ds, $sr); // cette partie se met bien dans la boucle while? car je l'ai mis dans la boucle while et il se passe rien
}
que mettre dans while(?) ?
merci
-
-
Ah, correction: peux-tu essayer ça :
while(($info = ldap_get_entries($ds, $sr)) { } -
Bonjour
Il ne faut pas répéter le ldap_get_entries($ds, $sr) dans le while ni dans la boucle, ça n'a rien à voir avec le parcours d'une liste.
Ton programme initial était presque bon, mais la condition while ($info) était mauvaise. En fait, il faut boucler sur toutes les lignes du tableau $info, il fallait donc faire:
while ($i<count($info)-1) // -1 parce que tu incrémentes $i au début de ta boucle -
ton $info = ldap_get_entries($ds, $sr), il renvoie un tableau non?
Pas besoin de while alors. :)$info = ldap_get_entries($ds, $sr); $size = length($info) for($i=0;$i<$size;$i++) { if ($i%2 == 0) echo '<tr bgcolor = "#FFFFFF">'; else echo '<tr bgcolor = "#eaf1f9">'; echo "<td>". $info[$i]["cn"][0] . "</td>"; echo "<td>". $info[$i]["title"][0] . "</td>"; echo "<td>". $info[$i]["telephonenumber"][0] . "</td>"; for($j=0;$j<$info[$i]["mail"]["count"];$j++) { echo "<td>". $info[$i]["mail"][$j] ."</td>"; } echo "<td>". $info[$i]["postofficebox"][0] . "</td>"; echo "</tr>"; } ldap_close($ds); echo "</table>"; }