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 et la fonction ldap-add()


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 118
    Par défaut Php et la fonction ldap-add()
    Bonjour à tous

    voila, je suis entrain de développer une interface ldap en php ( je vous passe tout les details) et je dois maintenant ajouter un utilisateur dans le serveur, voici l'extrait de code :
    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
     
    <?php
     
    //connexion au serveur
     $connect=ldap_connect("$server"); 
     
    if ($connect==true) {    
       $ident=ldap_set_option($connect,LDAP_OPT_PROTOCOL_VERSION,3);
       $ident=ldap_bind($connect,$rootdn,$rootpw);
     
       if ($ident){  
       //initialisation des variables              
       $ajout["cn"]= $_POST["txtNom"]." ".$_POST["txtPrenom"];
       $ajout["uid"]=$_POST["txtPrenom"].".".$_POST["txtNom"];
       $ajout["mail"]=$_POST["txtMail"];
       $ajout["statut"]=$_POST["lstStatut"];
       $ajout["phone"]=$_POST["txtTelephone"];
       $ajout["etabAffec"]=$_POST["lstEtablissement"];
       $ajout["arrivalDate"]=$_POST["txtDateArrive"];
       $ajout["birthDate"]= $_POST["txtDateDepart"];
       $uid="uid=".$ajout["uid"];
       $emplacement = $uid.",ou=people,dc=fresnel,dc=fr";
       //On ajoute quelqu'un dans le serveur : c'est sur cette ligne que l'erreur apparait
       $ident = ldap_add($connect, $emplacement, $ajout);
     
      echo "Connexion au serveur réussi <br />"; 
      echo "La personne ajoutée est : ".$_POST["txtNom"]." ".$_POST["txtPrenom"];
      echo "<br />".$emplacement; 
      echo "<br />".$connect;
      echo "<br />".$ident;
      ldap_close($connect); 
    }else{
      echo "Impossible de se connecter au serveur";
    }
    }
    echo "<br />"; 
     
    ?>
    Et j'obtiens l'erreur suivante :
    Warning: ldap_add() [function.ldap-add]: Add: Invalid syntax in C:\wamp\www\Interface LDAP\traitementAjout.php on line 40

    Une bête erreur de syntaxe apparement... si quelqu'un pourrait m'aider, ce serait génial.
    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Par défaut
    Bonjour,

    Il est possible que tu doives faire un utf8_encode sur les champs que tu inseres :
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     $ajout["mail"]=utf8_encode($_POST["txtMail"]);
    et pareil pour $emplacement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $emplacement = utf8_encode($uid.",ou=people,dc=fresnel,dc=fr");
    si cela ne fonctionne pas peux-tu faire un echo de $emplacement pour voir le dn de l'entrée que tu inseres.

    Bon courage

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 118
    Par défaut
    Merci pour ta solution mais celle-ci ne marche pas.

    Voici ce que j'obtiens en faisant un echo sur $emplacement:
    uid=lePrénom.leNom,ou=people,dc=fresnel,dc=fr (sans l'encodage en utf-8)
    uid=lePrénom.leNom,ou=people,dc=fresnel,dc=fr(avec l'encodage en utf-8)
    uid=lePrenom.leNom,ou=people,dc=fresnel,dc=fr(sans accent)

    et merci d'avance.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Par défaut
    ok , le probleme vient bien de l'encodage

    lePrénom ==> tu as un encodage en utf8 qui est interprété en iso

    essaye ca mais ca m'etonnerai que ca marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     $emplacement=utf8_encode($_POST["txtPrenom"]).".".utf8_encode($_POST["txtNom"]).",ou=people,dc=fresnel,dc=fr";
    ou bien mets ce header en premiere ligne du fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header('Content-Type: text/html; charset=UTF-8');

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 118
    Par défaut
    j'ai encore un probleme sur l'encodage... je suis en iso-8859-1 comme tu l'as dit, mais apparement il ne reconnait pas l'encodage en utf8
    echo de $emplacement : lePrénom.leNom,ou=people,dc=fresnel,dc=fr

    Et voici le message d'erreur au passage : Warning: ldap_add() [function.ldap-add]: Add: Invalid DN syntax in C:\wamp\www\Interface LDAP\traitementAjout.php on line 41

    Par contre, j'aurais cru que l'erreur viendrait du code et non de l'entrée que l'on y fait (hors erreur de concaténation, car apparemment c'est ca qui pose un problème ici...)

    PS :

    Par contre en mettant le header, je n'ai pas de probleme avec l'accent sur le prénom :
    nom.prénom,ou=people,dc=fresnel,dc=fr

    Par contre, sur le reste de la page oui... :
    La personne ajout�e est : pr�nom nom

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Par défaut
    Bienvenue au club des problemes d'encodage

    Alors si tu veux coder proprement :
    dans le parametrage php.ini il faut que tu mettre l'encodage en utf8 :default_charset = "utf8" mais attention cela va impacter toutes les autres scripts php de ton serveur.

    si ce n'est pas possible utilise l'entete header dans chaque page que je t'ai donné et aussi la balise meta dans le <head> de ton document html

    <meta http-equiv='Content-Type' content='text/html;charset=UTF-8'>

    et verifie bien que les données que tu insères sont correctement encodées.


    Ensuite si tu as des caractères comme ca :� ca veut dire que tu as un caractère iso qui est interprété en utf8 (l'inverse de tout a l'heure) la il faut que tu utilise les caracteres html pour etre tranquille => &eacute;

    Dans le LDAP tu ne dois insérer que de l'UTF8 (même si en bidouillant tu peux mettre de l'iso) , tant que toutes tes données ne seront pas nickel tu aras des problèmes.


    Par contre si je peux te donner un conseil , ce n'est pas très judicieux de mettre les noms et prénoms dans un DN , il te faut un identifiant unique (autoincrement par exemple : uid=12345,...etc )
    Sinon le jour ou tu mets a jour un prénom ou un nom il te faudra renommer ton entrée en plus de modifier les attributs CN , givenName et SN et en plus ton DN que tu utilisais comme identifiant va changer (ce qui est pas cool du tout)

    bon courage et n'hésites pas si tu as des questions

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 118
    Par défaut
    Ok j'y vois plus clair maintenant, et merci de ton accueil au sein du club

    Par contre il est clair que le schéma du serveur est trés mal foutu... metre le nom et le prénom dans l'uid n'est pas une bonne chose comme tu le dis, et c'est justement pour ça que je refais l'interface... avec un tout beau schéma tout propre (le gars qui a fait le schéma du serveur actuel à du faire sa en mode brouillon )

    En tout cas merci de tes réponses et conseils, je pense que j'aurais encore d'autres questions dans pas longtemps.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 118
    Par défaut
    Est-ce bien dans cette partie du fichier que je dois mettre UTF8 à la place de l'iso ?

    ; PHP's default character set is set to empty.
    ; http://php.net/default-charset
    ;default_charset = "iso-8859-1"
    et encore merci une fois :p

    PS : j'ai compris qu'il fallait que je mette la Meta balise, par contre le header, je peux le mettre dans le head et ensuite faire un include du head sur toutes les pages pour qu'il soit integrer ? ou bien dois je mettre ce bout de code dans chaque page séparement (ce qui revient un peu au meme car l'include est un copier/coller)

    Par contre, il y a un endroit précis du positionnement de la balise Hearder ou bien je peux la mettre n'importe ou ?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 118
    Par défaut
    Je n'arrive toujours pas à encoder mes pages en UTF-8 apparement...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN""http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html>
      <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8" />
        <?php header('Content-Type: text/html; charset=UTF-8'); ?>
     
                               <!-- Suite de la balise head -->
     
    </head>
    Et sur toutes mes pages, juste aprés ce code, j'ai mi la balise suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    include ("head.php");
    header('Content-Type: text/html; charset=UTF-8');
    ?>
    Est-ce bien comme celà qu'il faut procéder afin d'encoder les pages en UTF-8 ?
    Y'as-t-il d'autres manip ou configuration à effectuer ?

    Merci d'avance !

  10. #10
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Citation Envoyé par Delack Voir le message

    Est-ce bien comme celà qu'il faut procéder afin d'encoder les pages en UTF-8 ?
    Y'as-t-il d'autres manip ou configuration à effectuer ?
    Salut,
    vérifie également que ton éditeur enregistre en utf8.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 118
    Par défaut
    Je viens de vérifier et il etait positionner sur ANSI. Je viens de le modifier et je l'ai mis sur UTF-8. ensuite j'ai enregistrer toutes mes pages.
    Est-ce que cela est bon ? ou bien dois-je tous réecris dans de nouvelles feuilles ?

    PS : je met les 2 extraits de code (le head et la page) afin que vous ne soyez pas perdues

    head.php :

    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html>
      <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8" />
        <link rel="stylesheet" type="text/css" href="./css/cssInterfaceLDAP.php" />  
         <script type="text/javascript" src="./javascript/js.js"></script>  
        <title>prémiere Interface LDAP</title>
      </head>
     
        <body>        
          <div id="divPrincipal">
            <div id="divTitre" class="petitTitre">
                  <?php echo "Bienvenue sur l'interface utilisateur LDAP <br>"; 
                        echo  date("d M o") ; 
                  ?>         
            </div>
    et la page TraitementAjout.php

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    <?php
    include ("head.php");
    header("Content-Type: text/html; charset=UTF-8");
    ?>
     
    <?php
        // Fichier de configuration pour l'interface PHP pour administrer 
       // Annuaire LDAP auquel on ajoute les Doctorants
     
       $server = "..."; 
       $port = "389";  
       $rootdn = '...'; 
       $rootpw = '...'; 
    ?>
     
    <div class=Texte style="top:65px;">
     
    <?php
     
     $connect=ldap_connect("$server"); 
     
    if ($connect) {    
       $ident=ldap_set_option($connect,LDAP_OPT_PROTOCOL_VERSION,3);
       $ident=ldap_bind($connect,$rootdn,$rootpw);
     
       if ($ident){  
     
          $ajout["cn"]=$_POST["txtNom"]." ".$_POST["txtPrenom"];
          $ajout["uid"]=$_POST["txtPrenom"].".".$_POST["txtNom"];
          $ajout["mail"]=$_POST["txtMail"];
          $ajout["statut"]=$_POST["lstStatut"];
          $ajout["phone"]="04 91 28 ".$_POST["txtTelephone"];
          $ajout["etabAffec"]=$_POST["lstEtablissement"];
          $ajout["arrivalDate"]=$_POST["txtDateArrive"];
          $ajout["birthDate"]= $_POST["txtDateDepart"];
          $uid=$ajout["uid"];
          $emplacement ="ou=people, dc=fresnel, dc=fr";
          $racine="uid=$uid, $emplacement";
     
          $ident=ldap_add($connect, $racine, $ajout);
     
          echo "Connexion au serveur réussi <br />"; 
          echo "La personne ajoutée est : ".$_POST["txtNom"]." ".$_POST["txtPrenom"];
          echo "<br />".$racine; 
          ldap_close($connect);
     
          if($ident){
              echo "<br /> <br /> Ajout effecuté !";
          }else{
              echo "<br /> <br /> Impossible d'ajouter...";
          }
        } 
    }else{
      echo "Impossible de se connecter au serveur";
    }
     
    echo "<br />"; 
     
    ?>
     
    </div>
     
     
     
        <div id="divRetour2">
        <input type="button" size="14" value="Retourner à l'accueil" id="btnAccueil" OnClick="window.location.href='index.php'"/>
        </div>
     
    <?php
    include ("foot.php");
    ?>
    Voila, et encore merci !

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 118
    Par défaut
    Voila une bonne nouvelle,

    J'ai enfin trouvé pourquoi il me disait qu'il s'agissait d'une erreur de syntaxe.
    J'ai oublié de lui donner les objectClass nécessaire, je pensais qu'il ne fallait pas les préciser mais si enfaite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $info ["objectClass"][0]="NomdelaClasse";
    Sans cette attribut, il indique une erreur de syntaxe.
    Et encore merci à tous ce qui m'ont aidés !

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

Discussions similaires

  1. Question sur la fonction LDAP de PHP
    Par yonyon dans le forum Langage
    Réponses: 1
    Dernier message: 27/08/2010, 23h31
  2. PHP et fonctions LDAP
    Par Dendrite dans le forum Langage
    Réponses: 2
    Dernier message: 04/11/2008, 14h53
  3. Réponses: 4
    Dernier message: 05/10/2005, 18h19
  4. [PHP-JS] pb lecture script php dans une fonction au démarrage
    Par jerome38000 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/02/2005, 15h07
  5. [PHP-JS] Arguments PHP d'une fonction javascript
    Par Néo-Tony dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 22/12/2004, 12h06

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