Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > php вывод списка юзеров ldap


Автор: ytkavtapkax 18.6.2012, 20:31
Здравствуйте! Есть следующий код:

Код

<?php
$basedn=array('dc=guap,dc=ru'); 
$filter='(&(objectClass=inetOrgPerson)(uid=*)(mail=*))'; // фильтр
$attributes=array('dn','uid','sn','mail');
$cnx = ldap_connect('localhost',389); // подключение
ldap_set_option($cnx, LDAP_OPT_PROTOCOL_VERSION, 3);

ldap_bind($cnx,'cn=ldaproot,dc=guap,dc=ru','****'); // аутентификация

$search = ldap_search(array($cnx),$basedn,$filter,$attributes); // поиск

// вывод результата
for($i=0;$i<count($search);$i++){
print_r(ldap_get_entries($cnx,$search[$i]));
print "<br>";
}
?> 


Данные по дереву ищутся, но выводятся вот в таком кривом виде:
http://s2.ipicture.ru/uploads/20120618/HF33hgqR.jpg

Что нужно добавить в цикл, чтобы данные из массива выводились в более читабельной форме? В виде таблицы к примеру? 
Прошу сильно не ругать, в программировании не силен, и с пхп знаком первый день. На гугле не забанили, но руки кривые видимо, поэтому пишу сюда. 


Автор: Aliance 19.6.2012, 15:54
Поставьте XDebug и вместо print_r используйте var_dump.

Если ставить времени нет, можно каждый вызов print_r обрамлять тегами <pre>
Код

// вывод результата
for ($i=0;$i<count($search);$i++) {
    print '<pre>';
    print_r(ldap_get_entries($cnx,$search[$i]));
    print '</pre>';
    print '<hr />';
}

Автор: ytkavtapkax 20.6.2012, 00:41
Спасибо, так гораздо лучше!)

И еще такой вопрос: как вывести отдельный элемент из моего массива, чтобы потом этот элемент поместить в таблицу?

Сейчас информация о пользователе выводится в таком виде:
array(8) {
  ["uid"]=>
  array(2) {
    ["count"]=>
    int(1)
    [0]=>
    string(4) "user"
  }
  [0]=>
  string(3) "uid"
  ["mail"]=>
  array(2) {
    ["count"]=>
    int(1)
    [0]=>
    string(12) "[email protected]"
  }
  [1]=>
  string(4) "mail"
  ["sn"]=>
  array(2) {
    ["count"]=>
    int(1)
    [0]=>
    string(4) "user"
  }
  [2]=>
  string(2) "sn"
  ["count"]=>
  int(3)
  ["dn"]=>
  string(32) "uid=user,ou=People,dc=guap,dc=ru"
}

Как выдрать отсюда значения "user" "[email protected]" "uid=user,ou=People,dc=guap,dc=ru" и выводить только их??

Автор: Aliance 20.6.2012, 09:45
Код

// вывод результата
for ($i=0;$i<count($search);$i++) {
    $data = ldap_get_entries($cnx,$search[$i]);
    printf('<p>%s = %s</p>', $data['uid'][0], $data['mail'][0], $data[2]['dn']);
    print '<pre>';
    print_r( $data );
    print '</pre>';
    print '<hr />';
}


Честно говоря очень странная структура массива, если её формируете вы - советую переделать. Если она приходит вам такая на вход - что ж, печально.

Добавлено через 25 секунд
Кстати, пользуйтесь кнопкой код - так будет всем лучше  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)