IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

php - ldap - modification d'un attribut de type 'array'


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Points : 9
    Points
    9
    Par défaut php - ldap - modification d'un attribut de type 'array'
    bonjour,
    puisque j'ai eu du succès avec la 1ère partie de mon script, je reviens avec la suite...
    Je dois ajouter un contact dans un groupe. Je pensais faire ça de la manière suivante, je fais une recherche sur mon groupe via la 'class=group', je lui modifie la valeur de l'attribut 'member' pour lui en rajouter 1.
    Mais c'est là que ça se complique parce que member est un array et que je ne vois pas comment lui ajouter un élément. Ma solution fonctionne pour ajouter un mail mais si l'élément est un array ça cassse....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    <?php
    // Structure d'une commande simple :
    // connexion, lien, recherche, interpretation de la recherche
    // résultat, déconnexion
    echo "<h3>LDAP query test</h3><br>";
     
      $ldap_user ="CN=Administrateur";
      $ldap_pass = "XXX";
     
    echo "Connexion ...";
    $ds=ldap_connect("XXX.XXX.XXX.XXX"); // Doit être un serveur LDAP valide!
    echo "Résultat de la connexion : ".$ds."<p>";
    if ($ds) {
    echo "Lien ...";
     
      $$r= ldap_bind($ds, $ldap_user, $ldap_pass);
     
     
    echo "Lien résultat est ".$r."<p>";
    echo "Recherche de (cn=Testtaires*) ...";
    // Recherche dans les noms
    $sr=ldap_search($ds,"DC=win,DC=info,DC=pcf", "cn=Testtaires");
    echo "Résultat : ".$sr."<p>";
    echo "Nombre d'entrée retournée : ".ldap_count_entries($ds,$sr)."<p>";
    echo "Lecture des entrées...<p>";
    $info = ldap_get_entries($ds, $sr);
     
    echo "Data for ".$info["count"]." items returned:<p>";
    for ($i=0; $i<$info["count"]; $i++)
      {
        echo "dn vaut : ". $info[$i]["dn"] ."<br>";
        echo "première entrée cn vaut : ". $info[$i]["cn"][0] ."<br>";
        echo "premièr membre vaut: ". $info[$i]["member"][0] ."<p>";
        echo "tot en info: " . $info[$i]["member"]["count"];
     
        $TotMember = $info[$i]["member"]["count"];
        for ($j=0; $j<$info[$i]["member"]["count"]; $j++)
          {
          echo "<br>J: " .$j;
           echo $info[$i]["member"][$j]."<br>";
           $modif["add"]["member"][$j]="1";
     
          }
      }
      echo "<br>tot: ".$TotMember."<br>";
     
     $modif["add"]["member"][$TotMember]="CN=eich her,OU=ouParlementairesTest,OU=ouContacts,DC=win,DC=info,DC=toto";
    $result=ldap_modify($ds,"CN=TestParlementaires,OU=ouMail,OU=ouGroups,DC=win,DC=info,DC=toto",$modif);
     
      echo "<br>Déconnexion ";
      ldap_close($ds);
    }
    else
     
    {
      echo "<h4>Impossible de se connecter à un serveur LDAP </h4>";
    }
    ?>
    j'essaie de compter le nombre d'élément de l'array member, ça c'est ok
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      echo "<br>tot: ".$TotMember."<br>";
    et pour rajouter mon élément je prends l'indice
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $modif["add"]["member"][1]="CN=eich her,OU=ouParlementairesTest,OU=ouContacts,DC=win,DC=info,DC=toto";
    mais il me donne ceci...
    LDAP query test

    Connexion ...Résultat de la connexion : Resource id #2

    Lien ...Lien résultat est

    Recherche de (cn=TestParlementaires*) ...Résultat : Resource id #3

    Nombre d'entrée retournée : 1

    Lecture des entrées...

    Data for 1 items returned:

    dn vaut : CN=TestParlementaires,OU=ouMail,OU=ouGroups,DC=win,DC=info,DC=pcf
    première entrée cn vaut : TestParlementaires
    premièr membre vaut:

    tot en info:
    tot:

    Warning: ldap_modify() [function.ldap-modify]: Value array must have consecutive indices 0, 1, ... in /var/www/test/ldap0.php on line 53

    Déconnexion


    et je sèche sur ce "Value array must have consecutive indices 0, 1, ..."

    merci et bon we !

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si je suis bien, tu devrais avoir $modif["member"][$j] = ....
    La premiere dimension est l'attribut que tu modifies, la deuxieme contient une valeur seule ou un tableau de valeur indexé numériquement en série.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    au fait il ne faut pas utiliser le LDAP_MODIFY mais ldap_mod_add comme par exemple ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      $group_info['member'] = utf8_decode($newMember); // User's DN is added to group's 'member'array
     
      $r=ldap_mod_add($connect,$group_name,$group_info);
    et par exemple pour remplacer le champ proxyadresses qui est un array:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    function ModUserMail($connect, $dnToEdit, $mail)
    {
          $attrs["proxyAddresses"] = array();
        $r=ldap_mod_del($connect,$dnToEdit,$attrs);
        if ($r)
              {
              $entry[mail] = $mail;
              $entry[proxyAddresses] ='SMTP:'.$mail;
              $r = ldap_mod_replace($connect,$dnToEdit, $entry);
     
              }
              else
              {
              echo "del PAS ok";
              }
     
     
         if ($r)
              {
              echo "ok";
              }
     
    }
    voilà ça peut peut-être aider qqun un jour...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme avec les attributs de type ID
    Par ben83 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 01/01/2006, 21h49
  2. [LDAP]modification du mot de passe - ligne de commande
    Par sangei dans le forum API standards et tierces
    Réponses: 24
    Dernier message: 01/12/2005, 14h49
  3. [Sécurité] PHP LDAP
    Par ripou dans le forum Langage
    Réponses: 2
    Dernier message: 24/10/2005, 18h00
  4. Réponses: 3
    Dernier message: 20/09/2005, 08h59
  5. Réponses: 8
    Dernier message: 28/04/2004, 16h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo