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

PHP & Base de données Discussion :

Identification en PHP


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Développeur
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut Identification en PHP
    Bonjour,

    Je voudrais limiter l'accès de certaines pages d'un site en php. Pour cela je veux interroger une base de données SQL server dans laquelle j'ai entré deux login(login) et deux mots de passes (pwd). J'arrive à les afficher, donc à lire la table. Par contre, mon programme qui demande à l'utilisateur de s'identifier ne fonctionne pas comme je le veux. Il envoit bien les données, par contre il sort du if sachant que je tape le bon mot de passe.

    Voici mon 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
    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
    73
    74
    75
     
    <HTML>
        <HEAD>
     
            <TITLE>
            </TITLE>
        </HEAD>
        <BODY>
    <?
    if( $id = mssql_connect('ESMAIL_AHOUZI','','') ) 
                {
                    if( $id_db = mssql_select_db('BDTR') )
                        {
     
                printf("la connexion a bien été effectué");
     
     
     
                        }    
                    else 
                        {
                        printf("Echec de connexion à la base");
                        }
     
                } 
        else 
                {
                    printf("Echec de connexion au serveur de base de données");
                }
     
     
     
     
     
     
    if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password'])) 
        {
     
     
            $requete = "SELECT pwd FROM identification WHERE login='".$_POST['login']."'";
     
     
     
            $req = mssql_query($requete) or die('Erreur SQL !<br>'.$mysql.'<br>'.mssql_error());
     
            $data = mssql_fetch_assoc($req);
     
            if($data['pwd'] !=$_POST['password']) 
                { 
     
                    echo "Ton Pass ne correspond pas à celui de la BDD"; 
     
                }
            else 
                {
                    session_start();
                    $_SESSION['login'] = $_POST['login']; 
     
                    echo "Tu es bien connecté";
     
                } 
        }
    else 
        { 
     
        echo "Tu as oublié de remplir un champ";
     
        }
     
     
    ?>
     
     
        </BODY>    
    </HTML>

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 661
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 661
    Par défaut
    quel est le message qui s'affiche quand tu tapes un bon mot de passe ?

  3. #3
    Membre averti
    Profil pro
    Développeur
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    Voici le message que j'ai dans tous les cas : "la connexion a bien été effectuéTon Pass ne correspond pas à celui de la BDD ".

  4. #4
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Tu as bien mis les mots de passes en clair dans la base de données?
    Essaie ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $req = mssql_query($requete) or die('Erreur SQL !<br>' . $mysql . '<br>' . mssql_error());
     
    $data = mssql_fetch_assoc($req);
    echo "password tape : " . $_POST['password'] . "<br/>";
    echo "password dans bdd : " . $data['pwd'] . "<br/>"; 
            if($data['pwd'] !=$_POST['password']) 
                { 
     
                    echo "Ton Pass ne correspond pas à celui de la BDD"; 
     
                }
    et regardes si ce sont bien les memes.

  5. #5
    Membre averti
    Profil pro
    Développeur
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    la connexion a bien été effectué

    password tape dans le cadre: inpt
    password dans bdd : inpt

    Ton Pass ne correspond pas à celui de la BDD

    Les mots de passes sont effectivement bien les mêmes. Il y a donc un pb dans le if. C'est comme s'il n'arrivait pas à comparer les deux chaines de caractères. Peut être que la syntaxe du if n'est pas bonne.
    Je les ai déclaré tous les deux en temps que VARCHAR taille 10. Peut être qu'il y a d'autres choses à déclarer.

  6. #6
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Autre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $req = mssql_query($requete) or die('Erreur SQL !<br>' . $mysql . '<br>' . mssql_error());
     
    $data = mssql_fetch_assoc($req);
    echo "password tape : " . var_dump($_POST['password']) . "<br/>";
    echo "password dans bdd : " . var_dump($data['pwd']) . "<br/>"; 
            if($data['pwd'] !=$_POST['password']) 
                { 
     
                    echo "Ton Pass ne correspond pas à celui de la BDD"; 
     
                }
    je pense que tu as un probleme d'espace avant ou apres le mot de passe, montres nous le résultat avec var_dump()

  7. #7
    Membre averti
    Profil pro
    Développeur
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    la connexion a bien été effectué
    string(4) "inpt" password tape :
    string(4) "inpt" password dans bdd :
    Ton Pass ne correspond pas à celui de la BDD

  8. #8
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Ouh la...
    Y a eu un probleme identique il y a une heure et la personne s'était trompée en copiant son script dans le forum (en fait il modifiait son erreur de frappe du coup on voyait pas l'erreur)

    Peux-tu remettre le code exact (juste copier coller) ici (avec les var_dump) ?

  9. #9
    Membre averti
    Profil pro
    Développeur
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    voici mon code php : exemple1.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
    <HTML>
    	<HEAD>
    		<TITLE>
    		</TITLE>
    	</HEAD>
    	<BODY>
    <?
    if( $id = mssql_connect('ESMAIL_AHOUZI','','') ) 
    			{
    				if( $id_db = mssql_select_db('BDTR') )
    					{	
    			printf("la connexion a bien été effectué");
                		}	
    				else 
    					{
    					printf("Echec de connexion à la base");
    					}
    			} 
    	else 
    			{
    				printf("Echec de connexion au serveur de base de données");
    			}
     
    if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password'])) 
    	{
    		$requete = "SELECT pwd FROM identification WHERE login='".$_POST['login']."'";
     
    		$req = mssql_query($requete) or die('Erreur SQL !<br>'.$mysql.'<br>'.mssql_error());
     
     $data = mssql_fetch_assoc($req);
     echo "password tape : " . var_dump($_POST['password']) . "<br/>";
     echo "password dans bdd : " . var_dump($data['pwd']) . "<br/>";
     if($data['pwd'] !=$_POST['password']) 
    	{ 
    	echo "Ton Pass ne correspond pas à celui de la BDD"; 
    	}
     
    		$data = mssql_fetch_assoc($req);
     
    		if($data['pwd'] !=$_POST['password']) 
    			{ 
    				echo "Ton Pass ne correspond pas à celui de la BDD"; 
    			}
    		else 
    			{
    				session_start();
    				$_SESSION['login'] = $_POST['login']; 
    				echo "Tu es bien connecté";
    			} 
    	}
    else 
    	{ 
    	echo "Tu as oublié de remplir un champ";
    	}
    ?>
     
    	</BODY>	
    </HTML>

    Voici la page html créée précédemment :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <HTML>
    	<BODY>
    <form method="post" action="exemple1.php">
     <label>Nom d utilisateur : <input type="text" name="login" /></label><br />
     <label>Mot de passe : <input type="password" name="password" /></label><br /><br />
     <input type="submit" value="Envoyer" />
     <input type="reset" value="Rétablir" />
    	</form>
     
    	</BODY>
    </HTML>

  10. #10
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    C'est bizarre tu as deux mssql_fetch_assoc()

    l'exemple que je te donnais avec les var_dump il ne fallait pas le copier/coller entièrement, tu te retrouves à faire un fetch deux fois de suite, du coup la seconde fois tes variables sont bel et bien différentes. Fais ca:
    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
    <HTML>
    <HEAD>
     
    <TITLE>
    </TITLE>
    </HEAD>
    <BODY>
    <?
    if( $id = mssql_connect('ESMAIL_AHOUZI','','') )
    {
    if( $id_db = mssql_select_db('BDTR') )
    {
    printf("la connexion a bien été effectué");
    }
    else
    {
    printf("Echec de connexion à la base");
    }
     
    }
    else
    {
    printf("Echec de connexion au serveur de base de données");
    }
     
    if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password']))
    {
    $requete = "SELECT pwd FROM identification WHERE login='".$_POST['login']."'";
     
    $req = mssql_query($requete) or die('Erreur SQL !<br>'.$mysql.'<br>'.mssql_error());
     
    $data = mssql_fetch_assoc($req);
    echo "password tape : " . var_dump($_POST['password']) . "<br/>";
    echo "password dans bdd : " . var_dump($data['pwd']) . "<br/>";
    if($data['pwd'] !=$_POST['password'])
    {
    echo "Ton Pass ne correspond pas à celui de la BDD";
    }
    else
    {
    session_start();
    $_SESSION['login'] = $_POST['login'];
     
    echo "Tu es bien connecté";
     
    }
    }
    else
    {
    echo "Tu as oublié de remplir un champ";
    }
     
    ?>
     
    </BODY>
    </HTML>
    Il ne devrait pas te mettre Ton Pass ne correspond pas à celui de la BDD cette fois ci.
    Il devrait meme te mettre une erreur a propos des header() already sent

  11. #11
    Membre averti
    Profil pro
    Développeur
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    Ca a l'air de fonctionner cette fois. Il me mets ça :

    la connexion a bien été effectuéstring(8) "hnhpytnz" password tape :
    string(8) "hnhpytnz" password dans bdd :

    Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\program files\easyphp1-8\www\essai login\new folder\exemple1.php:8) in c:\program files\easyphp1-8\www\essai login\new folder\exemple1.php on line 41

    Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\essai login\new folder\exemple1.php:8) in c:\program files\easyphp1-8\www\essai login\new folder\exemple1.php on line 41

    Tu es bien connecté
    Ce sont des cookies envoyer à l'utilisateur j'imagine ça ?. En tout cas je vous remercie !!!

  12. #12
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    De rien !
    mais je ne comprends pas pourquoi ca ne marchait pas avant puisqu'on n'a rien changé

    Autrement, tu utilises mal les sessions. Il ne faut rien envoyer au navigateur avant d'utiliser un session_start()
    Pour ca, il faut donc faire tous tes tests en php d'abord, et ensuite, quand tu as tout réussi tu crées la page html. Il faut donc retirer tous le html avant tes tests en php, et ne faire aucun echo avant de faire un session_start().

    Bon courage

  13. #13
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 70
    Par défaut
    si ta un probleme ac tes sessions_start() c juste ke tu doi les placer tt en haut de ta page avant tout le reste mm le html en gro tu rentre : <? session_start() ?>

  14. #14
    Membre éclairé Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Par défaut
    Il y a quelque chose qui m'intrigue dans le code......

    Je sais je débute dans ce langage aussi mais au lieu de mssql_connect, ce n'est pas mysql_connect ?

    Juste par curiosité....

  15. #15
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    mysql_connect() permet de se connecter au SGBD MySQL
    mssql_connect() permet de se connecter au SGBD MS SQL Server

  16. #16
    Membre averti
    Profil pro
    Développeur
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    Bonjour,
    J'ai juste changé d'ordinateur, je suis toujours sur SQL Server, c'est juste le nom qui as changé. Mais la reconnaissance du mot de passe ne marche pas cette fois !!! Si qq voit d'où peut venir l'erreur, je suis preneur.
    Merci.

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    <link rel="stylesheet" type="text/css" href="indexcss.css"/>
    <HTML>
    <HEAD>
    <TITLE>
    </TITLE>
    </HEAD>
    <BODY>
    <?
      	if( $id = mssql_connect('PC-AHOUZI','','') )
    			{
    				if( $id_db = mssql_select_db('BDTR') )
    					{
    					echo "connexion à la base de données";
    					}
    				else
    					{
    					printf("Echec de connexion à la base");
    					}
     
    			}
    	else
    			{
    				printf("Echec de connexion au serveur de base de données");
    			}
     
    		if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password']))
    			{
    				$requete = "SELECT pwd FROM identification WHERE login='".$_POST['login']."'";
     
    				$req = mssql_query($requete) or die('Erreur SQL !<br>'.$mysql.'<br>'.mssql_error());
     
    				$data = mssql_fetch_assoc($req);
    			echo "password tape : " . var_dump($_POST['password']) . "<br/>";
     
    			echo "password dans bdd : " . var_dump($data['pwd']) . "<br/>"; 
     
     
    				if($data['pwd'] !=$_POST['password'])
    					{
    					?>
    					<div align="center"><br><br><br><big>
    					<?
     
    				echo "Désolé, le mot de passe : " . $_POST['password'] . "<br/>"; 
    				echo "et le login : " . $_POST['login'] . "<br/>"; 
    				echo " ne correspondent pas "
     
     
    			?>		<br><br><br>
    				Cliquer <a href="login.htm">ici</a> pour recommencer
    					</big></div>
     
     
    				 </big></div>
    					<?
     
     
    					}
    				else
    					{
    					?>
    					<div align="center"><br><br><br><big>
    					<?
    					echo " Bienvenue";
    					?> <br><?
     
    					echo $data['nom'];
    					?> <br><br><br><?
    					echo" vous êtes maintenant connecté à la base de données";
    					?> <br><br><br>
    					Cliquer <a href="page_carte_maroc.htm">ici</a> pour continuer
    					</big></div>
    					<?
    					}
    		}
     
     
     
    		else
    			{
    			?> <div align="center"><br><br><br><big><?
    				echo "Vous avez oublié de remplir un champ";
    				?> <br><br><br>
    					Cliquer <a href="login.htm">ici</a> pour recommencer
    					</big></div>
    					<?
     
    			}
     
     
     
    ?>
     
    </BODY>
    </HTML>
    connexion à la base de données
    string(4) "inpt" password tape :
    string(8) " inpt " password dans bdd :

    Désolé, le mot de passe : inpt
    et le login : i.ahouzi
    ne correspondent pas

    Cliquer ici pour recommencer

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 115
    Par défaut
    string(4) "inpt" password tape :
    string(8) " inpt " password dans bdd :
    Ce ne sont pas les mêmes string c'est tout :p il y a deux espaces de trop

  18. #18
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Je dirai même qu'il y en a quatre en trop (deux avants, deux apres) mais cette erreur tu l'avais déjà eue un peu plus haut dans ton message, tu aurais pu t'en rendre compte (c'était le but des var_dump() que je t'avais fait mettre!)

Discussions similaires

  1. Identification en php
    Par potterharry dans le forum Langage
    Réponses: 1
    Dernier message: 27/01/2013, 20h22
  2. Réponses: 2
    Dernier message: 16/07/2010, 11h34
  3. [Sécurité] PHP, identification unique ?
    Par speedev dans le forum Langage
    Réponses: 12
    Dernier message: 19/05/2006, 14h19
  4. Réponses: 5
    Dernier message: 12/02/2006, 22h00
  5. Probleme d'identification avec sessions PHP
    Par bontbont dans le forum Langage
    Réponses: 5
    Dernier message: 09/12/2005, 19h15

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