Probleme de test sur un $_SERVER["LOGON_USER"]

Résolu
pakito_77 Messages postés 11 Date d'inscription jeudi 26 janvier 2006 Statut Membre Dernière intervention 8 août 2006 - 8 août 2006 à 11:38
pakito_77 Messages postés 11 Date d'inscription jeudi 26 janvier 2006 Statut Membre Dernière intervention 8 août 2006 - 8 août 2006 à 14:45
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

cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
8 août 2006 à 14:37
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
3
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
8 août 2006 à 13:37
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;
      }
0
pakito_77 Messages postés 11 Date d'inscription jeudi 26 janvier 2006 Statut Membre Dernière intervention 8 août 2006
8 août 2006 à 13:59
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 ...
0
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
8 août 2006 à 14:09
- 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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
8 août 2006 à 14:11
(à 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
0
pakito_77 Messages postés 11 Date d'inscription jeudi 26 janvier 2006 Statut Membre Dernière intervention 8 août 2006
8 août 2006 à 14:19
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.
0
pakito_77 Messages postés 11 Date d'inscription jeudi 26 janvier 2006 Statut Membre Dernière intervention 8 août 2006
8 août 2006 à 14:45
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.
0
Rejoignez-nous