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-ID: 57712

Url: https://administrator.de/forum/benutzer-nach-php-ldap-abfrage-sortieren-57712.html

Ausgedruckt am: 24.12.2024 um 18:12 Uhr

SteinBeiser
SteinBeiser 27.04.2007 um 10:09:00 Uhr
Goto Top
Nicht sofort in select reinhauen sonder erst in ein array, dieses sortieren und dann select aufbauen.
Bayano
Bayano 27.04.2007 um 11:58:11 Uhr
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.
SteinBeiser
SteinBeiser 27.04.2007 um 12:09:18 Uhr
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.
Bayano
Bayano 30.04.2007 um 15:14:22 Uhr
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?
Dani
Dani 30.04.2007 um 16:35:30 Uhr
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
Bayano
Bayano 03.05.2007 um 07:53:13 Uhr
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.
SteinBeiser
SteinBeiser 03.05.2007 um 13:43:36 Uhr
Goto Top
sorry aber nachdem ich meine serverdaten fürs connect eingetragen hatte
funktioniert das script bis auf ein "?>" zuviel.
Bayano
Bayano 03.05.2007 um 14:58:50 Uhr
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.
SteinBeiser
SteinBeiser 03.05.2007 um 16:16:13 Uhr
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>';
}
Bayano
Bayano 04.05.2007 um 10:53:47 Uhr
Goto Top
Besten dank, bei mir funktioniert es jetzt auch.