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 :

problème de vérification


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Points : 7
    Points
    7
    Par défaut problème de vérification
    bonjour tout le monde,

    je suis actuellement en train de développer un site web. je dois gérer une connexion administrateur. le code correspondant à cette page est:
    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
     
    <?php
    // Definition des constantes et variables
    define('LOGIN','admin');
    define('PASSWORD','admin');
     
    $errorMessage = '';
     
    // Test de l'envoi du formulaire
    if(!empty($_POST)){
    	// Les identifiants sont transmis ?
    	if(!empty($_POST['login']) && !empty($_POST['password'])){
    		// Sont-ils les mêmes que les constantes ?
    			if($_POST['login'] !== LOGIN){
    				$errorMessage = 'Mauvais login !';
    			}
    			elseif($_POST['password'] !== PASSWORD){
    				$errorMessage = 'Mauvais password !';
    			}
    			else{
    				// On ouvre la session
    				session_start();
    				// On enregistre le login en session
    				$_SESSION['login'] = LOGIN;
    				// On redirige vers le fichier admin.php
    				header('Location: http://mathieufere.fr/cakephp/admin/manageProduct');
    				exit();
    			}
    	}
    	else{
    		$errorMessage = 'Veuillez inscrire vos identifiants svp !';
    	}
    }
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
    <title>Formulaire d'authentification</title>
    </head>
    <body>
    <form action="./admin/manageProduct" method="post">
    <fieldset>
    <legend>Identifiez-vous</legend>
    <?php
    if(!empty($errorMessage))
    {
    echo '<p>', htmlspecialchars($errorMessage) ,'</p>';
    }
    ?>
           <p>
    <label for="login">Login :</label>
    <input type="text" name="login" id="login" value="" />
    </p>
    <p>
    <label for="password">Password :</label>
    <input type="password" name="password" id="password" value="" />
    <input type="submit" name="submit" value="Se logguer" />
    </p>
    </fieldset>
    </form>
    </body>
    </html>
    voici mon problème; peut importe le login et le password que je tape, je suis toujours connecté. quelqu'un pourrait-il m'aider a fixer ce probleme?

  2. #2
    Membre confirmé Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Points : 578
    Points
    578
    Par défaut
    Bonjour,

    Comment gère tu la connexion dans le temps d'un utilisateur ?

    J'entends par la ce que tu fait pour décider si l'utilisateur à accès à la page ?

    Si tu utilise le fait que la variable $_SESSION['login'] doit être renseigné dans ce cas tu doit simplement détruire la session pour déconnecter l'utilisateur.

  3. #3
    Membre averti Avatar de Doopeijii
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 215
    Points : 323
    Points
    323
    Par défaut
    Juste une remarque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if($_POST['login'] !== LOGIN){
    	$errorMessage = 'Mauvais login !';
    }
    Je sais pas ce que ça fait, parce que l'opérateur !== n'éxiste pas, pour la différence c'est!=. Je sais pas si ça joue mais on sait jamais (idem pour $_POST['password'] d'ailleurs).

  4. #4
    Membre confirmé Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Points : 578
    Points
    578
    Par défaut
    Tu est sûr qu'en PHP l'opérateur !== n'existe pas ?

    • = : affectation
    • == : comparaison de valeur
    • === : comparaison de valeur et de type


    Edit : Si l'opérateur existe, tu m'as fait douter de ma mémoire
    Code php : 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
    <?php
    $var1 = "1";
    $var2 = 1;
    $var3 = "1";
     
    if($var1 == $var2)
        echo "ok";
    else
        echo "pas ok";
     
    echo '<br />';
     
    if($var1 === $var2)
        echo "ok";
    else
        echo "pas ok";
     
    echo '<br />';
     
    if($var1 === $var3)
        echo "ok";
    else
        echo "pas ok";
    ?>
    En exécutant ce code on obtient :
    ok
    pas ok
    ok

  5. #5
    Membre averti Avatar de Doopeijii
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 215
    Points : 323
    Points
    323
    Par défaut
    Oui, mais là t'as pas prouvé que !== existe
    Tu peux remplacer ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_POST['login'] !== LOGIN
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    !($_POST['login'] == LOGIN)
    et là tu seras sur que c'est correcte.
    Enfin après c'est juste mon avis personnel, voyant aujourd'hui pour la première fois dans ma vie de (très) jeune développeur l'opérateur !==

    Et je rajoute comme témoin ce à quoi on aurai dû se référer directement : http://php.net/manual/fr/language.operators.php

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Mais bien sûr que si l'opérateur !== existe !

    Tu cites http://php.net/manual/fr/language.operators.php, mais pourquoi ne cliques-tu pas au bon endroit : http://www.php.net/manual/fr/languag...comparison.php et tu verras très clairement que tu as tort !

  7. #7
    Membre confirmé Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Points : 578
    Points
    578
    Par défaut
    Citation Envoyé par Doopeijii
    Oui, mais là t'as pas prouvé que !== existe
    C'est le jour et la nuit, l'un n'existe pas sans l'autre

    Mais je te rassure, moi non plus je ne l'ai jamais utilisé. Je n'ai aucune situation qui me nécessitait de tester le type pour l'instant.

    En ce qui concerne le test c'est vrai qu'il est plus "coutumier" de mettre un espace en moins.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    !($_POST['login'] == LOGIN)
    //où
    ($_POST['loggin'] != LOGIN)
    Edit : D'ailleurs y a t'il une différence au niveau temps d'exécution / mémoire entre le == et le === ?

  8. #8
    Membre averti Avatar de Doopeijii
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 215
    Points : 323
    Points
    323
    Par défaut
    Merci de m'avoir donné la preuve et l'explication, ça me dérange pas d'avoir tord au contraire j'en apprends ! Mais avec une source, là chui convaincu

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par humitake Voir le message
    Mais je te rassure, moi non plus je ne l'ai jamais utilisé. Je n'ai aucune situation qui me nécessitait de tester le type pour l'instant.[/code]
    Ah bon, tu n'as jamais utilisé une fonction qui pouvait te renvoyer par exemple zéro ?
    Personnellement j'utilise énormément le ===, généralement mes fonctions renvoient false quand elles ont échoué et tout ce que l'on veut quand elles passent (parfois elles renvoient 0) qui est interprété comme un false avec un test comme celui-là : if (func() == false) { } alors que c'est le retour normal de la fonction.
    Avec un test explicite : if (func() === false) { } je suis sûr qu'elle a échoué.

    Voici la doc qui explique les conversions automatiques et équivalences : ici
    A bien connaitre pour éviter des heures de débogage...

  10. #10
    Membre confirmé Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Points : 578
    Points
    578
    Par défaut
    En général lors qu'une fonction échoue je renvoie une valeur négative. L'avantage c'est que cela me permet de situer l'erreur dans le déroulement de la fonction, par exemple :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    function userConnection($login, $password){
    if(empty($login))
        return "-1";
    if(empty($password))
        return "-2";
    }
    ?>
    Ainsi sur la page de connexion lors de la tentative de connexion de l'utilisateur au lieux de préparer un message spécifique pour chaque erreur je peux utiliser une fonction qui affiche un div sur ma page avec l'erreur correspondante :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    function divAlert($message){
    //affiche une div avec le message d'erreur
    }
     
    $test = userConnection($_POST['login'], $_POST['password']);
    if($test > 0)
        divAlert($text[$test]);
    ?>
    Du coup en cas de non présence du login ou du password un message l'indiquera.

  11. #11
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Exemple typique d'utilisation de ===(ou !==) : strpos. D'ailleurs, c'est même écrit dans la doc

    Maintenant, pour revenir au problème d'origine, question bête :
    <form action="./admin/manageProduct" method="post"> et header('Location: http://mathieufere.fr/cakephp/admin/manageProduct');, ça ne pointerait pas vers la même page par hasard ?
    Vu la structure de ton script, le formulaire devrait logiquement pointer vers lui-même via $_SERVER['PHP_SELF'] par exemple. Là, j'ai l'impression que tu va directement à la page de destination sans passer par la vérification...

    Tu peux aussi tenter d'inverser ta condition pour tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if($_POST['login'] === LOGIN && $_POST['password'] === PASSWORD){
    	// On ouvre la session
    	session_start();
    	// On enregistre le login en session
    	$_SESSION['login'] = LOGIN;
    	// On redirige vers le fichier admin.php
    	header('Location: http://mathieufere.fr/cakephp/admin/manageProduct');
    	exit();
    } else {
    	$errorMessage = 'login/mot de passe incorrects';
    }

  12. #12
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    @humitake oui mais ton exemple est spécifique, c'est une commodité pour un script en particulier (dans certains cas des fonctions peuvent valablement retourner des valeurs négatives) alors que l'exemple de rawsrc est générique : en général une fonction retourne false en cas d'échec et donc le retour nécessite une comparaison stricte si l'on veut faire la différence entre false et la valeur 0.

    C'est important à souligner car c'est le comportement de la plupart des fonctions natives php. Le cas typique étant l'utilisation de la fonction strpos comme indiqué plus haut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $mystring = 'abc';
    $findme   = 'a';
    $pos = strpos($mystring, $findme);
     
    // Notez notre utilisation de !==.  != ne fonctionnerait pas comme attendu
    // car la position de 'a' est la 0-ième (premier) caractère.
    if ($pos !== false) {
        echo "La chaine '$findme' a été trouvée dans la chaîne '$mystring'";
        echo " et débute à la position $pos";
    } else {
        echo "La chaîne '$findme' ne se trouve pas dans la chaîne '$mystring'";
    }
    ?>

  13. #13
    Membre confirmé Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Points : 578
    Points
    578
    Par défaut
    Citation Envoyé par ABCIWEB
    alors que l'exemple de rawsrc est générique : en général une fonction retourne false en cas d'échec et donc le retour nécessite une comparaison stricte si l'on veut faire la différence entre false et la valeur 0.
    Exact, je n'avais pas du tout pensé à ça

    Lundi Ctrl + F m'attends

  14. #14
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par Doopeijii Voir le message
    ... parce que l'opérateur !== n'éxiste pas ... voyant aujourd'hui pour la première fois dans ma vie de (très) jeune développeur l'opérateur !==
    Pour passer de "très jeune développeur" à "jeune développeur" une étape à franchir est d'éviter de penser à priori que ce que l'on ne connait pas, n'existe pas. Te voilà donc maintenant "jeune développeur". Tu verras aussi avec l'expérience que ce principe reste valable même pour les vieux développeurs ... et n'est d'ailleurs pas spécifique au développement informatique

Discussions similaires

  1. problème de vérification de POST
    Par teen6517 dans le forum Langage
    Réponses: 4
    Dernier message: 02/03/2007, 10h32
  2. Réponses: 4
    Dernier message: 09/01/2007, 22h28
  3. MD5 problème de vérification
    Par nicotine002 dans le forum Langage
    Réponses: 9
    Dernier message: 21/08/2006, 17h35
  4. problème de vérification formulaire (non bloquante)
    Par Florent08800 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/05/2006, 12h02
  5. problème de vérification formulaire
    Par Le Rebel dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/03/2006, 13h10

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