Interface LDAP - PHP
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Interface LDAP - PHP



  1. #1
    psygnosis

    Interface LDAP - PHP


    ------

    Bonjour,



    Je souhaites créé une interface web simplifier pour mes utilisateurs, afin qu'ils puissent ajouter / modifier / supprimer des entrées.

    J'arrive très bien à me connecter à mon LDAP, j'arrive à afficher l'annuaire dans un tableau, j'arrive aussi à créé 2 liens : modifier/supprimer.

    Par contre quand je clique sur supprimer cela me renvois bien à la fonction supprimer mais cela ne supprime rien du tout !



    Pourriez-vous m'aider

    Page admin.php :

    Code:
    <?php
    // affichage du haut de la page contenu dans le fichier header.php3 
     
    include("config.php"); 
     
        echo "Les personnes suivantes sont inscrites dans l'annuaire :<p>"; 
     
     
     
        // connexion au serveur LDAP : ds est égal à 1 si la connexion est OK 
     
        $ds=ldap_connect($server); 
     
     
     
        if ($ds==1) 
     
       { 
     
             // on recherche les objet de type person à partir de la racine 
     
             // de notre serveur LDAP
     
     
     
             $sr=ldap_search($ds, $racine,'objectclass=inetOrgPerson'); 
     
             $info = ldap_get_entries($ds, $sr); 
     
     
     
             echo "<table border=1>"; 
     
             echo "<tr>
                             <th>Nom et prénom</th>
                             <th>Téléphone</th>
                   </tr>";
     
     
     
             // on affiche sous forme d'un tableau les personnes enregistrées 
     
             // dans l'annuaire avec un lien pour modifier et un lien pour supprimer
     
     
     
             for ($i=0;$i<$info["count"];$i++) 
     
             { 
     
                  $mynom = $info[$i]["cn"][0]; 
     
                  $mytel = $info[$i]["telephonenumber"][0]; 
     
                  echo" <tr><th>$cn</th><th>$mytel</th>"; 
     
                  $cn=urlencode($cn); 
     
                  echo" <th><a href=\"modifie.php?cn=$mynom\">
     
    Modifier</a></th>"; 
     
                  echo" <th><a href=\"supprime.php?cn=$mynom\">
     
    Supprimer</a></th></tr>";
     
             } 
     
             echo"</table>"; 
     
             echo "<center><br><a href=\"ajoute.php\">Ajouter une 
     
    nouvelle personne dans l'annuaire</a></center>"; 
     
       } 
     
     
     
       // on ferme la connexion au serveur LDAP 
     
        ldap_close($ds); 
     
    ?>
    Page supprime.php :
    Code:
    <?php
    include("config.php");
     
    $cn=urldecode($cn);
     
    if ($go==0) {
     
    echo "Etes-vous sur de vouloir supprimer l'utilisateur $cn<br>\n";
     
    $cn=urlencode($cn);
     
    echo "<A HREF=\"supprime.php?go=1&cn=$cn\">oui</A><BR>\n";
     
    echo "<A HREF=\"admin.php\">non</A><BR>\n";
     
    } 
     
    else {
     
    $cn=urldecode($cn);
     
     
     
    // connexion au serveur LDAP
     
    $ds=ldap_connect($server);
     
    if ($go==1) {
     
    // on s'authentifie en tant que super-utilisateur, ici, ldap_admin
     
    $r=ldap_bind($ds,$rootdn,$rootpw);
     
     
    // Suppression de l'ancien enregistrement
     
    $r=ldap_delete($ds,"cn=$cn,$racine");
     
    echo "La suppression a réussi !!!\n";
     
    echo "<P><A HREF=\"admin.php\">Retourner
      à la page d'administration</A>\n";
     
    }
     
    }
     
    ?>
    Voila pour ce qui est de supprimer si quelqu'un peut me venir en aide )))

    -----

  2. #2
    Hugo737

    Re : Interface LDAP - PHP

    Salut,
    dans supprime.php, comment est récupéré l'argument "go" que tu passes en requête GET ?
    Je ne vois pas de $go = $_GET["go"]; dans ton code, normal qu'il ne fonctionne pas, le if ($go == 1) est toujours faux car $go est vide.
    Ajoute donc
    Code:
    $go = (int) $_GET["go"];
    au début de supprime.php

    Dis moi si t'as besoin de plus d'aide.
    Cordialement, Hugo737. (le Boeing 737 est mon avion préféré)

  3. #3
    psygnosis

    Re : Interface LDAP - PHP

    Merci beaucoup ca avance mais cela ne supprime quand meme pas l'entrée sélectionné as tu une idée ?

  4. #4
    Hugo737

    Re : Interface LDAP - PHP

    Dis moi si ton code entre dans le if (si tu vois que ce qui est censé s'afficher à l'intérieur du if s'affiche bien), et essaye de faire un var_dump() de toutes tes variables afin de voir leurs valeurs respectives, comme ça tu pourras tout de suite savoir laquelle ne contient pas la valeur attendue.
    Cordialement, Hugo737. (le Boeing 737 est mon avion préféré)

  5. A voir en vidéo sur Futura
  6. #5
    psygnosis

    Re : Interface LDAP - PHP

    j ai honte mais j avoue ne pas savoir faire je vais cherché

  7. #6
    psygnosis

    Re : Interface LDAP - PHP

    Si je vais la valeur : var_dump($cn);

    il me donne ca :
    string(0) "" La suppression a réussi !!!
    Retourner à la page d'administration

    je suppose donc que je ne recupere pas le "cn"

  8. #7
    Ikhar84
    Animateur Informatique

    Re : Interface LDAP - PHP

    PHP c'est très loin pour moi mais quelques remarques :

    Au lieu d'utiliser urldecode utilises $_GET["cn"], par exemple. Et tant qu'on y est, utilises des POST:
    Regardes un peu les formulaires et ses balises.

    Dans la boucle for en particulier, si je me souviens bien, $mynom prendra la dernière valeur trouvée...
    Il faudrai une succession de formulaire avec une balise hidden mynom. (Et tant qu'on y est, evites le mélange franglais...)...
    Pour "activer" le lien de chaque formulaire, un petit bout de javascript:
    Code PHP:
    for ($i=0;$i<$info["count"];$i++) 
     
             { 
                  
    $mynom $info[$i]["cn"][0]; 
                  
    $mytel $info[$i]["telephonenumber"][0]; 
     
                  echo
    " <tr><th>$cn</th><th>$mytel</th>"
     
                  
    $cn=$_POST["cn"]; 

                  echo 
    "<form id=modifie".i."  method=post action=modifie.php>";
                 echo 
    "<input type=hidden name=cn value=mynom>";
                  echo 
    "<th><a href="#" onclick="document.getElementById('modifie".i."').submit();">Modifier</a></th>"; 
                  
    echo "</form>";

                  echo 
    "<form id=supprime".i." method=post action=supprime.php>";
                 echo 
    "<input type=hidden name=cn value=mynom>";
                  echo 
    "<th><a href="#" onclick="document.getElementById('supprime".i."').submit();">Supprimer</a></th></tr>";
                  
    echo "</form>";
             } 
    Au début de supprime.php:
    Code PHP:
        $go $_POST["go"];
        
    $cn $_POST["cn"]; 
    ensuite, remplacer :
    Code PHP:
    $cn=urlencode($cn);
     
    echo 
    "<A HREF=\"supprime.php?go=1&cn=$cn\">oui</A><BR>\n";
     
    echo 
    "<A HREF=\"admin.php\">non</A><BR>\n"
    Par:
    Code PHP:
        echo "<form id=confirm method=post action=supprime.php>";
        echo 
    "<input type=hidden name=go value=1>";
        echo 
    "<input type=hidden name=cn value=$cn>";
        echo 
    "<A HREF='#'" onclick="document.getElementById('confirme').submit();">oui</A><BR>\n";
        echo "
    </form>";
     
        echo "
    <A HREF=\"admin.php\">non</A><BR>\n"
    Il doit sûrement y avoir quelques erreurs, n'ayant plus affaire à PHP depuis longtemps et postant depuis un smartphone, mais ça donnera quelques pistes de reflexion !
    Dernière modification par Ikhar84 ; 05/02/2018 à 23h00. Motif: Corrections javascript
    J'ai glissé Chef !

  9. #8
    Ikhar84
    Animateur Informatique

    Re : Interface LDAP - PHP

    Dans la dernière ligne il y a des guillements en trop et d'autres à echapper...
    Et trop tard pour editer. Il y a sûrement d'autres erreurs, mais le but est de passer tes variables en post et d'utiliser des formulaires...

    Code PHP:
        echo "<form id=confirm method=post action=supprime.php>"
        echo 
    "<input type=hidden name=go value=1>"
        echo 
    "<input type=hidden name=cn value=$cn>"
        echo 
    "<A HREF='#'' onclick=\"document.getElementById('confirme').submit();\">oui</A><BR>"
        echo 
    "</form>"
      
        echo 
    "<A HREF="admin.php\">non</A><BR>"
    J'ai glissé Chef !

  10. #9
    psygnosis

    Re : Interface LDAP - PHP

    Merci beaucoup Ikhar84 de m'aider mais la ca n'avances pas en changeant avec ton code la page ne se charge plus du tout, je cherche

  11. #10
    Ikhar84
    Animateur Informatique

    Re : Interface LDAP - PHP

    Il y a beaucoup trop d'erreur: des guillemets en trop ou non échappés, des $ manquant devant des variables...

    Je me connecte sur pc ce soir et je propose un code nettoyé...
    J'ai glissé Chef !

  12. #11
    psygnosis

    Re : Interface LDAP - PHP

    Je te remercie par avance pour cette aide precieuse

  13. #12
    Ikhar84
    Animateur Informatique

    Re : Interface LDAP - PHP

    bon voilà le fichier admin.php (corrigé, mais pas de LDAP sous la main pour tester autre chose que les erreurs de syntaxe..):
    Code PHP:
    <?php
        
    //que représente cn? où est il initialisé ? il va être envoyé ? la page supprime.php et modifie.php sans être initialisé ?
        //cn remplacé par user pour avoir un nom de variable compréhensible !
        
    if (isset($_POST["user"]))
             
    $user=$_POST["user"];
                
        
    // affichage du haut de la page contenu dans le fichier header.php3 
        
    include("config.php"); 
     
        echo 
    "<p>Les personnes suivantes sont inscrites dans l'annuaire :</p>"
     
        
    // connexion au serveur LDAP : connexion est égal ? 1 si la connexion est OK 
        
    $connexion=ldap_connect($server) or die("<p>Impossible de se connecter au serveur LDAP !"); 
        
        if (
    $connexion){
             
    $ldapbind ldap_bind($connexion$rootdn$rootpw) or die ("<p>Une erreur s'est produite: ".ldap_error($connexion)."</p>");
             
            
    //Si binding OK
            
    if ($ldapbind) {
                
    // on recherche les objet de type person ? partir de la racine de notre serveur LDAP
                //que repr?sente $racine ? il n'est pas initialis? !
                
    $sr=ldap_search($ds$racine,'objectclass=inetOrgPerson') or die ("<p>Une erreur s'est produite lors de la recherche dans le r&eacute;pertoire: ".ldap_error($connexion)."</p>"); 
                
    $info ldap_get_entries($ds$sr);     //Que repr?sente $ds ? $sr ? il ne sont pas initilis?s ! (ou dans le fichier config.php ?)
                
                
    echo "<table border=1> <tr><th>Nom et pr&eacute;nom</th> <th>T&eacute;l&eacute;phone</th> <th>Email</th></tr>";
                
                
    // on affiche sous forme d'un tableau les personnes enregistrées 
                // dans l'annuaire avec un lien pour modifier et un lien pour supprimer
                
    for ($i=0;$i<$info["count"];$i++){  
                    
    $user $info[$i]["cn"][0];  
                    
                    echo
    " <tr><td>$user</td>"
                    
                    if(isset(
    $data[$i]["telephonenumber"][0])) {
                        echo 
    "<td>".$data[$i]["telephonenumber"][0]."</td>";
                    } else { echo 
    "<td>---</td>"; } 
                    if(isset(
    $data[$i]["mail"][0])) {
                        echo 
    "<td>".$data[$i]["mail"][0]."</td>";
                    } else { echo 
    "<td>---</td>"; } 
                    
                    echo 
    "<td><form name=modifie".i."  method=post action=modifie.php>"
                    echo 
    "<input type=hidden name=user value=$user>";
                    echo 
    "<a href='#' onclick=\"document.modifie".i.".submit();\">Modifier</a>";  
                    echo 
    "</form></td>"
                    
                    echo 
    "<td><form name=supprime".i." method=post action=supprime.php>"
                    echo 
    "<input type=hidden name=user value=$user>"
                    echo 
    "<a href='#' onclick=\"document.supprime".i.".submit();\">Supprimer</a>"
                    echo 
    "</form></td></tr>"
                }
                echo 
    "</table>"
                echo 
    "<center><br><a href=\"ajoute.php\">Ajouter une nouvelle personne dans l'annuaire</a></center>"
            } else echo 
    "Impossible de lier les donn&eacute;es utilisateurs...";
        } 
        
    // on ferme la connexion au serveur LDAP 
        
    ldap_close($connexion); 
         
        
    //"afficher" le bas de la page, footer, ... (balises fermantes </body> et </html> au moins ! --> creer un fichier footer.php par exemple !
    ?>
    </body>
    </html>
    Le fichier supprime.php:
    Code PHP:
    <?php
        
    include("config.php");
        
        if (isset(
    $_POST["user"]))
             
    $user=$_POST["user"];
        else 
    $user "";
        
        echo 
    "<p>Suppression de l'utilisateur ".$user."</p>";
        
        if (isset(
    $_POST['go'])) {
            
    // connexion au serveur LDAP
            
    $connexion=ldap_connect($server) or die("<p>Impossible de se connecter au serveur LDAP !"); 
            
            if (
    $_POST['go']==1) {
                
    // on s'authentifie en tant que super-utilisateur, ici, ldap_admin
                
    $ldapbind ldap_bind($connexion$rootdn$rootpw) or die ("<p>Une erreur s'est produite: ".ldap_error($connexion)."</p>");
                
                if (
    $ldapbind) {
                    
    // Suppression de l'ancien enregistrement
                    
    $r=ldap_delete($connexion,"cn=$user,$racine");
                    
                    echo 
    "<p>La suppression a r&eacute;ussi !!!</p>";
                    
                    echo 
    "<p><a href='admin.php'>Retourner ? la page d'administration</a></p>";
                } else echo 
    "Impossible de lier les donn?es utilisateurs...";
            }
        
            
    // on ferme la connexion au serveur LDAP 
            
    ldap_close($connexion);
        
        } else {
            echo 
    "<p><form name=confirm method=post action=supprime.php>";  
            echo 
    "<input type=hidden name=go value=1>";  
            echo 
    "<input type=hidden name=user value=$user>";  
            echo 
    "<a href='#' onclick=\"document.confirm.submit();\">oui</a>";  
            echo 
    "</form></p>";  
           
            echo 
    "<p><a href='admin.php'>non</a></p>";  
        }
        
        
    //"afficher" le bas de la page, footer, ... (balises fermantes </body> et </html> au moins ! --> creer un fichier footer.php par exemple !
    ?>
    </body>
    </html>
    et un début de fichier ajoute.php, à toi de le modifier pour avoir ton modifie.php
    Code PHP:
    <?php
        
    include("config.php");
        
        echo 
    "<h1>Nouvel utilisateur</h1>";
        
        if (isset(
    $_POST['nom'])) {
            
    $connexion=ldap_connect($server) or die("<p>Impossible de se connecter au serveur LDAP !"); 
            
            if (
    $connexion) {
                
    $ldapbind ldap_bind($connexion$rootdn$rootpw) or die ("<p>Une erreur s'est produite: ".ldap_error($connexion)."</p>");
                
                
                if (
    $ldapbind) {
                    
    // récupération des données
                    
    $cn $utilisateur["cn"] = $_POST["nom"]." ".$_POST["prenom"];
                    
    $utilisateur["sn"] = $_POST["nom"];
                    
    $utilisateur["displayname"] = $_POST["nom"]." ".$_POST["prenom"];
                    
    $utilisateur["telephonenumber"][0] = $_POST["tel"];
                    
    $utilisateur["mail"][0] = $_POST["mail"];
                    
                    
    $utilisateur["title"] = $_POST["titre"];
                    
    $utilisateur["userPassword"] = $_POST["password"];
                    
                    
    $utilisateur["objectclass"]="person";
                    
                    
    // Ajout des donn?es dans l'annuaire (je ne connais pas cette fonction ! ? verifier !)
                    
    $r=ldap_add($connexion"cn=$cn,$racine"$utilisateur);
                    
                    echo 
    "<p><a href='admin.php'>Retourner &agrave; la page d'administration</a></p>";
                } else echo 
    "Impossible de lier les donn&eacute;es utilisateurs...";
                
                
    ldap_close($connexion);
            
            } else echo 
    "Connexion au serveur LDAP impossible";
        } else {
            echo 
    "<form method=post action=ajoute.php>";
            echo 
    "<table border=0>";
            echo 
    "<tr><td><label for='nom'>Nom: </label></td><td><input type=text name=nom placeholder=Nom required></td></tr>";
            echo 
    "<tr><td><label for='prenom'>Pr&eacute;nom: </label></td><td><input type=text name=prenom placeholder=Prenom></td></tr>";
            echo 
    "<tr><td><label for='tel'>T&eacute;l&eacute;phone: </label></td><td><input type=text name=tel placeholder=Téléphone></td></tr>";
            echo 
    "<tr><td><label for='mail'>Email: </label></td><td><input type=text name=mail placeholder=Email></td></tr>";
            echo 
    "<tr><td><label for='titre'>Titre: </label></td><td><input type=text name=titre placeholder=Titre></td></tr>";
            echo 
    "<tr><td><label for='pass'>Nom: </label></td><td><input type=password name=pass></td></tr>";
            echo 
    "<tr><td><input type=reset value='Annuler'></td>";
            echo 
    "<td><input type=submit value='Creer'></td></tr>";
            echo 
    "</table>";
            echo 
    "</form>";
            
            echo 
    "<p><a href='admin.php'>Retourner à la page d'administration</a></p>";
        }
        
        
    //"afficher" le bas de la page, footer, ... (balises fermantes </body> et </html> au moins ! --> creer un fichier footer.php par exemple !
    ?>
    </body>
    </html>
    Il faut bien lire les commentaires et remarques !
    De nombreuses bases en PHP ou même en HMTL sont manquantes !
    N’hésites pas à étudier les cours en ligne, sur ces langages avant de continuer...

    La politique du forum interdit de fournir des codes tout fait, tu avais un code non fonctionnel, voilà de l'aide pour aller plus loin, si tu n'avais pas fait les efforts nécessaires, pas de chocolat!

    Note:
    Aucune sécurité, même basique n'est présente, regardes du côté des mécanismes de session de PHP, et n'hésites pas à "verrouiller" chacune de tes pages.
    Imagines que n'importe qui puisse ajouter, supprimer ou modifier tes comptes LDAP ?
    Même si ce n'est qu'un exercice, il faut implémenter un minimum de mécanismes de sécurité (sessions, cryptage, sécuriser les entrées utilisateur et même les variable: les passer en POST au lieu de GET ne suffit pas !).

    En parlant de POST, faire apparaître dans les URL en clair toutes tes données est strictement à proscrire, car (au moins) elles sont référencées par les moteurs de recherche et restent dans les historiques de tes utilisateurs, la seule raison valable de passer les données en GET serait pour moi pour des raison de SEO (encore que la réécriture des URL est mieux vu...).

    Edit: n'oublies pas d'encoder tes fichiers en utf8...
    Dernière modification par Ikhar84 ; 07/02/2018 à 00h44.
    J'ai glissé Chef !

  14. #13
    psygnosis

    Re : Interface LDAP - PHP

    OUTCH Je te remercie beaucoup pour ce taf je vais avancer avec ce que tu m'as donné

Discussions similaires

  1. Tutoriel installation postfix, dovecot, ldap et roundcube
    Par lordgodgiven dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 21/12/2015, 15h38
  2. LDAP, Samba, Kerberos, Serveur de domaime?
    Par flyingman dans le forum Internet - Réseau - Sécurité générale
    Réponses: 9
    Dernier message: 13/06/2012, 16h27
  3. sur-réseau et un peu de théorie sur LDAP
    Par invite9d4981e7 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 3
    Dernier message: 29/11/2011, 01h21
  4. passer d'une interface serie a une interface parallele ?
    Par cyber37 dans le forum Électronique
    Réponses: 8
    Dernier message: 15/04/2010, 22h01
  5. Interface
    Par invite908c6b5c dans le forum Électronique
    Réponses: 8
    Dernier message: 10/06/2009, 21h02