bayano
Goto Top

Benutzer nach PHP LDAP Abfrage sortieren

Hallo,

ich habe ein kleines Problem, ich habe über ein PHP-Script alle Benutzer aus dem LDAP abgefragt und in ein SELECT-Feld gepackt, das Problem ist, das die Einträge nicht sortiert sind. Kann mir jemand helfen?

Das Eintragen in das SELECT-Feld sieht so aus:

<select name="Benutzer" size="1">
<?php
$anzahl = ldap_count_entries($connectid,$search);
for ($i=0; $i<$anzahl; $i++) {

$name = $result[$i]["cn"];

echo '<option>'.$name.'</option>';
}
?>
</select>

MFG
Sascha

Content-Key: 57712

Url: https://administrator.de/contentid/57712

Printed on: April 16, 2024 at 17:04 o'clock

Member: SteinBeiser
SteinBeiser Apr 27, 2007 at 08:09:00 (UTC)
Goto Top
Nicht sofort in select reinhauen sonder erst in ein array, dieses sortieren und dann select aufbauen.
Member: Bayano
Bayano Apr 27, 2007 at 09:58:11 (UTC)
Goto Top
Danke für den Tipp, kannst du mir vielleicht auch mal ein Code-Beispiel geben? Weil mit Array´s und dem Sortieren kenne ich mich nicht so gut aus. Ich würde nur den Bubblesort kennen, aber der ist bestimmt zu langsam, das sind ca 2000 User.
Member: SteinBeiser
SteinBeiser Apr 27, 2007 at 10:09:18 (UTC)
Goto Top
//leeres array anlegen:
 $arr = array();

//array füttern:
array_push( $arr, $entry );
 
//array sortieren:
asort( $arr );
selfPHP und selfHTML sind für sowas ne grosse hilfe.
Member: Bayano
Bayano Apr 30, 2007 at 13:14:22 (UTC)
Goto Top
Also das hat jetzt alles bei mir geklappt, mit print_r($array) kan ich auch den Sortieren Array ausgeben. Allerdings wenn ich dein sortieren Array in einer Liste ausgeben will klappt das nicht.

Mein Programmcode sieht so aus:
for ($j=0; $j<$anzahl; $j++) 
{
  echo "<option>".$array[$j]."</option>";                     
}

Aber so gibt er mir nicht die Sortiete Liste aus, sondern die unsortierte. Kann mir jemand helfen?
Member: Dani
Dani Apr 30, 2007 at 14:35:30 (UTC)
Goto Top
Hi ihr Beide,
ich habe mir erlaubt, eure beiden Quellcodes in ein einen Codebock zustecken. So dass es übersichtlich aussieht und optisch natürlich auch. face-smile

Zu deinem Problem:
Poste doch ein bisschen mehr als deine for - Schleife, denn der Fehler muss vorher eingebaut sein.


Gruß
Dani
Member: Bayano
Bayano May 03, 2007 at 05:53:13 (UTC)
Goto Top
Ok, dann poste ich mal meine Quellcode:

                  $basedn = "CN=Users,DC=domain,DC=loc";  
                  $server = "servername";  
                  $username = "user";  
                  $password = "password";  
                  $ldap_port = "389";  
                  $filter = "(&(|(objectClass=user))(objectCategory=person)(cn=*))";  
?>
    
<?php
                  $connectid = @ldap_connect($server)or die("Keine Verbindung zum LDAP server möglich.");  
?>
    
<?php
                  $binding = @ldap_bind($connectid,$username,$password) or die("Fehler beim Anmelden des Benutzers.");  
?>
    
<?php
                  // AD auslesen
                  $search = @ldap_search($connectid,$basedn,$filter);
                  $result = ldap_get_entries($connectid,$search);
?>

<?php
                  $anzahl = ldap_count_entries($connectid,$search);
                  $arr = array();
                  for ($i=0; $i<$anzahl; $i++) {
                     $name = $result[$i]["cn"];  
                     
                     array_push( $arr,$name );
                  }
                  asort($arr);
?>                 
                  <select name="user" size="1">    
<?php                                 
                  for ($j=0; $j<$anzahl; $j++) {
                    echo '<option>'.$arr[$j].'</option>';  
                 }
?>                  
                  </select>


Das ist es. Ich hoffe ihr könnt mir dabei weiterhelfen.
Member: SteinBeiser
SteinBeiser May 03, 2007 at 11:43:36 (UTC)
Goto Top
sorry aber nachdem ich meine serverdaten fürs connect eingetragen hatte
funktioniert das script bis auf ein "?>" zuviel.
Member: Bayano
Bayano May 03, 2007 at 12:58:50 (UTC)
Goto Top
Hmm, komisch.

bei gibt er mit dem Befehl "print_r(arr);" auch die richtige Sortierung aus. Allerdings mit der Schleife wo ich die Listebox/Combobox fülle, gibt er mir immer den unsortierten Array aus.
Ich vermute das der Array nur temporär sortiert wird, und nicht die Indexwerte geändert werden. Und da ich in der Schleife über die Indexwerte gehe geht das so nicht.
Kann das möglich sein?
Ich weiss nämlich so langsam nicht mehr weiter.
Member: SteinBeiser
SteinBeiser May 03, 2007 at 14:16:13 (UTC)
Goto Top
sorry bin mit blidheit geschlagen bei mich auch unsortiert.
Mit folgender schleife wirds sortiert ausgegeben.

foreach( $arr as $j ) {
echo '<option>'.$j.'</option>';
}
Member: Bayano
Bayano May 04, 2007 at 08:53:47 (UTC)
Goto Top
Besten dank, bei mir funktioniert es jetzt auch.