I am having trouble retrieving some data out of an LDAP attribute in PHP.
I connect to LDAP, perform my query, and store the results in a var like so:
$info = ldap_get_entries($connect, $sr);
Now, I can store most of the LDAP attributes I need in sessions vars, like so:
$_SESSION['accountFirstName'] = $info[0]['givenname'][0];
$_SESSION['accountLastName'] = $info[0]['sn'][0];
$_SESSION['accountEmail'] = $info[0]['mail'][0];
These work fine.. No problems. However, there is another var I need to store. I believe It is an associative array. For some reason, no matter what I do, I am getting an NOTICE: Undefined index warning for that specific attribute. I have tried storing it like the above demonstration, but to be honest I'm not entirely sure what the [0] indices on either ends of the attribute name mean.. I'm not familiar with LDAP and frankly the setup is very confusing.
So I guess my questions are:
how do you access associative arrays that are returned from an LDAP query?
what does 'undefined index' mean? Does it mean that that attribute does not exist, or it does not exist at the index provided?
How can I test my LDAP query to see if the variable even exists?
There is a possibility that the account performing the query does not have adequate LDAP access privileges (the project is for a university and there is a lot of red tape). Is there any way for me to verify that through code?
Thank you! And my apologies for the vagueness of the information provided, I can't be too open-mouthed right now.
The issue doesn't reside with the ldap_get_entries() method, or LDAP at all - it's the data that's being returned.
The NOTICE: Undefined index error is stating that an index in your array doesn't exist. In this case, it is most likely that the data you're receiving doesn't have a value such as givenname or mail, but it could also be the [0] (or, "first record") in one of those arrays.
The textual/string index value, such as givenname or sn, is what would be defined as the "associative array". You are correctly accessing that data with $info[0]['givenname'];
To check if an index exists in PHP, you can use isset(), such as:
if (isset($info[0]['givenname'])) {
// process data here
}
As a quick way to do your assignments, you can use something like this:
if (count($info) > 0) {
$_SESSION['accountFirstName'] = (isset($info[0]['givenname']) && isset($info[0]['givenname'][0])) ? $info[0]['givenname'][0] : '';
}
If you have a long list of values you need, I would suggest writing something similar to the following to auto-process it for you:
$fields = array(
'accountFirstName' => 'givenname',
'accountLastName' => 'sn',
'accountEmail' => 'mail'
);
$info = $info[0];
foreach ($fields as $field => $ldapField) {
// check if the value exists; otherwise set it to an empty-string
$_SESSION[$field] = (isset($info[$ldapField]) && isset($info[$ldapField][0])) ? $info[$ldapField][0] : '';
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With