Probleme de test sur un $_SERVER["LOGON_USER"] [Résolu]

Signaler
Messages postés
11
Date d'inscription
jeudi 26 janvier 2006
Statut
Membre
Dernière intervention
8 août 2006
-
Messages postés
11
Date d'inscription
jeudi 26 janvier 2006
Statut
Membre
Dernière intervention
8 août 2006
-
Bonjour tout le monde,

Voila mon probleme, je souhaite faire un test sur le login de la session windows de l'utilisateur. Pour faire simple je souhaite afficher un menu (jusque la pas de probleme) avec un choix de plus pour une personne bien précise de mon réseau, je test donc si la variable du login de session correspond à la personne en question. Voici en gros mon test actuel:

<?


  $NomSession = $_SERVER["LOGON_USER"];


   if ($NomSession == "  le login de la personne ")
      {
        $ListeNom = array("Accueil","MAJ Telephone","Liste Telephone);
        $ListeLien = array("acceuil.asp","./Telephone/upload.asp","./Telephone/Liste/Telephone.htm);
        $nbListe = 3;
      }
       else
     {
       $ListeNom = array("Accueil","Liste Telephone);
       $ListeLien = array ("acceuil.htm","./Telephone/Liste/Telephone.htm);      
       $nbListe = 2;
      }
?>

je recupère donc le login de l'utilisateur avec  $_SERVER["LOGON_USER"] et je test SI il est égale ( avec un double = ) au nom voulu. Je génère ensuite le menu avec les listeNom et ListeLien.

Mais malheureusement ca ne marche pas et ca m'affiche le deuxieme menu avec les deux options.
Il doit donc surrement y avoir un probleme au niveau de mon test. Je developpe normalement en asp, mais pour ce menu j'ai comme contrainte le PHP, et n'etant pas un expérimenté dans se langage, j'ai semble t'il quelque lacune .

Merci d'avance pour votre aide ...

 

7 réponses

Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
5
Aaaaaaaaaaaaaaah *idée*


Le backslash \ sert en PHP à "échapper" le caractère suivant.

Exemple :

Tu veux faire une chaine contenant un double guillemet, tout en te servant des doubles guillemets pour l'entourer, tu feras :

$var = "blabla"blabla"; //ce qui donne la chaine blabla"blabla


Par conséquent, le backslash est un caractère particulier dans les
chaines PHP : si tu veux insérer un backslash au milieu d'une chaine,
il faudra en mettre 2, le premier dit à PHP "le caractère suivant est à
prendre à la lettre", ou "échapper".


Donc donc donc : quand tu fais $NomSession == "domaine\\utilisateur",
PHP va essayer de comparer $NomSession à la chaine domaine\utilisateur,
et non pas domaine\\utilisateur.

Tu dois donc mettre ceci :

if ($NomSession == 'domaine\\\\utilisateur') { blabla }

4 backslashes sont nécessaires pour "signifier" 2 backslashes en réalité..

PaDa
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Salut, essaie déjà avec ça :
$NomSession $_SERVER["LOGON_USER"];    if ($NomSession "  le login de la personne ")
      {
        $ListeNom = array("Accueil","MAJ Telephone","Liste Telephone");
        $ListeLien = array("acceuil.asp","./Telephone/upload.asp","./Telephone/Liste/Telephone.htm");
        $nbListe = 3;
      }
       else
     {
       $ListeNom = array("Accueil","Liste Telephone");
       $ListeLien = array ("acceuil.htm","./Telephone/Liste/Telephone.htm");      
       $nbListe = 2;
      }
Messages postés
11
Date d'inscription
jeudi 26 janvier 2006
Statut
Membre
Dernière intervention
8 août 2006

Eratum, bien vue Evangun mais ce n'est pas ca.
Désolé c'etait une erreur de copié/collé en voulant allégé l'exemple et ne prendre que 2 et 3 option de mon menu (les menus ayant beaucoup plus d'options), j'ai sans faire expres oublier de copier les " a la fin, mais sur mon code elles y sont bien.

J'ai donc toujours le meme probleme ...
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
5
- Essaie déjà de faire un "echo $_SERVER["LOGON_USER"];" pour voir déja
s'il y a une chance que ton test aboutisse (i.e. si la variable est
bien celle à laquelle tu t'attends).

- Ensuite, vérifie bien que la casse est la même pour les deux chaines, l'opérateur "==" ne validera pas la condition sinon.

- Enfin, il est possible que tu aies des espaces autour d'une de tes
chaines, ou des caractères non imprimables : utilise "trim()" pour les
éliminer (c'est improbable ici mais bon) :

if (trim($NomSession) == trim('LoginUserASP')) { ... }

PaDa
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
5
(à noter que dans mon exemple ca n'a pas de sens de mettre trim()
autour d'une chaine fixe, mais peut être récupère tu ce login spécial
depuis une variable autre ? héhé)

PaDa
Messages postés
11
Date d'inscription
jeudi 26 janvier 2006
Statut
Membre
Dernière intervention
8 août 2006

Merci pour tes reponses PaDa,
Alors pour ma variable $NomSession elle renvois bien la chaine voulu ( domaine\\utilisateur ), je l'avais deja tester avec un echo, j'ai d'ailleurs copier la valeur renvoyer par l'echo pour faire mon test histoire d'etre sur que j'ai bien la meme.
Pour les trim j'ai essayer mais sans succes.

Juste une question, ca ne viendrait pas du faite que les variables $_SERVER ne renvoi pas une chaine mais plutot un tableau? Vue que je suis une quiche en Php j'en ai aucune idée, mais bon.
Messages postés
11
Date d'inscription
jeudi 26 janvier 2006
Statut
Membre
Dernière intervention
8 août 2006

PaDa t'es une perle!!!


Bien trouvé ^^, ca marche en effet niquel avec les 4 backslashes.


Merci beaucoup pour ton aide plus que précieuse, et merci aussi Evangun pour ta reponse.