Avatar billede heyn Nybegynder
09. november 2005 - 09:27 Der er 18 kommentarer og
1 løsning

Hvordan anvender man ldap_next_attribute

Hej alle
Jeg skal hente en del telefonnumre fra attributten 'telephonenumber' på en ldap-server.Jeg anvender objekternes mailadresse 'mail' som søgekriterie. Det viser sig at ikke alle objekter indeholder en attribut 'telephonenumber'. Jeg får nogle ubehagelige notice'es i stil med 'no index telephonenumber ...' når jeg.
Hvordan tjekker jeg om en entrie rent faktisk indeholder den attribut jeg ønsker?
Christian
Avatar billede jakobdo Ekspert
09. november 2005 - 10:22 #1
Tjekker du på retur værdien fra ldap_next_attribute() ?
Avatar billede heyn Nybegynder
09. november 2005 - 10:57 #2
Jeg har foretaget:
    $domæne = "ldap://ldap.XX.dk"
    $ldap = ldap_connect($domæne);
    ldap_bind($ldap);
    $attributter = array("mail","telephonenumber");
    $filter = "(mail=".$mail.")";
    $path = O=XX,C=dk;
    $result = ldap_search($ldap, $path, $filter, $attributter);
    $entries = ldap_get_entries($ldap, $result);
Jeg vil nu sikre mig at 'telephonenumber' eksisterer i den entrie jeg modtager FØR jeg udfører:
    echo "telefonnummer = ".$temp_entrie[0]["telephonenumber"][0];
Christian
Avatar billede jakobdo Ekspert
09. november 2005 - 11:35 #3
Prøv at smid lidt fejl søgning på din kode:
$domain = "ldap://ldap.XX.dk"
$ldap = ldap_connect($domain) or die("Could not connect to $domain");
$ldapbind = ldap_bind($ldap);
if ($ldapbind)
{
    echo "LDAP bind successful...";
}
else
{
    echo "LDAP bind failed...";
}
$attributter = array("mail","telephonenumber");
$filter = "(mail=".$mail.")";
$path = "O=XX,C=dk";
$result = ldap_search($ldap, $path, $filter, $attributter);
$entries = ldap_get_entries($ldap, $result);
Avatar billede jakobdo Ekspert
09. november 2005 - 11:37 #4
Og ellers så er $entries jo et array, og du kunne evt bruge:
echo "<pre>";
print_r($entries);
echo "</pre>";

En anden ting, jeg rettede din variabel: $domæne til: $domain
variabler med æøå skal helt undgåes. :o)
Avatar billede heyn Nybegynder
09. november 2005 - 12:16 #5
Jeg ser godt hvad du mener. I virkeligheden foretager jeg kaldet på forskellige mailadr, og nogle gange har objektet en attribut 'telephonenumber' altså no problems, så det er ikke forbindelsen.
Jeg nævnte at telephonenumber måske ikke eksisterer.
faktisk er kaldet:
$attributter = array("mail","telephonenumber","kontornr","institut");
og kontornr og institut er heller ikke sikre. Jeg er altså nødt til at bruge indexnavnet ("telephonenumber","kontornr" el. "institut") og hvis de nu ikke findes går det jo galt -> f.eks. "notice: no index telephonumber ..."
Avatar billede jakobdo Ekspert
09. november 2005 - 12:23 #6
Så tror jeg desværre ikke jer kan hjælpe yderligere! :o(
Avatar billede heyn Nybegynder
10. november 2005 - 09:34 #7
Det lykkedes efter det meste af en dags kamp.

for ($k=0; $k<$entrie["count"]; $k++){
  if (array_key_exists("telephonenumber", $entrie[$k]))
      echo $entrie[$k]["telephonenumber"][0]."<br>\n";
}

Som du meget rigtigt bemærkede behøver man slet ikke at orette et nyt array - $entrie kan anvendes direkte.
Tak for hintet - Christian
Avatar billede jakobdo Ekspert
10. november 2005 - 11:15 #8
Det var da så lidt!
Utroligt hvad man kan udfra php manualen! (har aldrig kigget på ldap før) :o)
Avatar billede heyn Nybegynder
10. november 2005 - 16:27 #9
Det har jeg heller ikke. Jeg syntes nu PHP-manulaen er rimelig svær at forstå.
Hvis man f.eks. har 2 arrays $arr1 og $arr2 som begge har brugernavne som nøgleværdier. Altså $arr1['cheyn'] og $arr2['cheyn']. Hvordan smelter man dem så sammen til et tredie array hvor de poster de har til fælles indgår? Årsagen er at jeg skal tjekke indholdet fra ldap med indholdet fra mysql.
Man kan selvfølgelig lave en lang tidskrævende løkke hvor man tager et element af gangen og bruger , array_key_exists(), men findes der en simpel kommando?
Kan man slette poster i et array?
Mvh Christian
Avatar billede jakobdo Ekspert
10. november 2005 - 16:29 #10
Jeg tror du skal kigge på denne: array_merge()
Avatar billede heyn Nybegynder
10. november 2005 - 16:52 #11
Du har ret - den 'klistrer' $arr2 bag på arr1. Så kan en asort klare resten. Problemet var bare at jeg løb fuldstændig vild i manualen. Har du et SVAR?
Christian
P.s. Kender du noget til den med en slaks 'delete'.
Avatar billede jakobdo Ekspert
10. november 2005 - 16:56 #12
Et svar!
Avatar billede jakobdo Ekspert
10. november 2005 - 16:56 #13
Hvad mener du med: Kender du noget til den med en slags 'delete'.
Avatar billede heyn Nybegynder
10. november 2005 - 17:06 #14
Man har en post i arrayet - f.eks. arr['cheyn'] - Om man kan slette posten således at kaldet arr['cheyn'] vil medføre noget i retning af 'notice: no index cheyn'?
Avatar billede jakobdo Ekspert
10. november 2005 - 17:12 #15
Du kan ikke rigtigt slette i et array.
Men det man kan gøre at at flytte alle array-elementer over i et nyt array, undtagen cheyn.

Og takker for point!
Avatar billede heyn Nybegynder
10. november 2005 - 17:14 #16
Selv tak - du er virkelig en ekspert! Jeg er selv kun novice, og har for første gang fået en stor opgave - uha.
Mvh Christian - ps: Husk at stemme.
Avatar billede jakobdo Ekspert
10. november 2005 - 18:33 #17
Stemme?
Avatar billede heyn Nybegynder
11. november 2005 - 11:59 #18
Kommunevalget - i år er det mindst lige så svært som ldap - og der er ingen manual!
Avatar billede jakobdo Ekspert
11. november 2005 - 12:25 #19
Hehe!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester