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 :

Script d'authentification en PHP


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 134
    Par défaut Script d'authentification en PHP
    Bonsoir,

    Tout d'abord bonne fêtes à tous.

    La partie inscription étant terminé, je m'attaque donc à la partie authentification.

    Voilà dans un premier temps ce que j'ai fais.

    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
    96
    97
    98
    99
    100
    <?php 
    $erreur = NULL;
    	if(isset($_POST['connexion_pseudo']) || isset($_POST['connexion_mop'])){
    		$host = "localhost"; 
    		$login = "Jean"; 
    		$mdp = ""; 
    		$bdd = "xxx"; 
     
    		$pseudo = $_POST['connexion_pseudo'];
    		$motdepasse = sha1($_POST['connexion_mdp']);
     
    		if(empty($pseudo) || empty($motdepasse)){
    			$erreur = 'Les champs de connexion ne sont pas tous remplis.';
    		}
    		else{
    			$connexion_sql = mysql_connect($host,$login,$mdp); 
    			$connexion_bdd = mysql_select_db($bdd);
    			if(!$connexion_sql || !$connexion_bdd){
    				$erreur = 'Connexion impossible avec le serveur distant.';
    			}
     
    			$pseudosql = mysql_real_escape_string($pseudo);
    			$mdpsql = mysql_real_escape_string($motdepasse);
    			$result_pseudo = mysql_query('SELECT * FROM membre WHERE pseudo="'.$pseudosql.'"')
    				or exit(mysql_error());
    			$nombre_pseudo = mysql_num_rows($result_pseudo);
    			$result_mdp = mysql_query('SELECT mdp FROM membre WHERE pseudo="'.$pseudosql.'"')
    				or exit(mysql_error());
     
    			if($nombre_pseudo = 0){
    				$erreur = 'Le pseudo écrit ne correspond à aucun compte.';
    			}
    			elseif($result_mdp != $motdepasse){
    				$erreur = 'Le mot de passe n\'est pas bon.';
    			}
    			else{
    				if(isset($_POST['connexion_checkbox'])){
    					setcookie("cookieremember",$checkbox,time()+60*60*24*365*100);
    				}
    				else{
    					setcookie("cookieremember","",NULL,"/");
    				}
    				session_start();
    				$_SESSION['pseudo'] = $pseudo;
    				echo 'Ca fonctionne';
    			}
    		}
    	}
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Index</title>
    <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
    </head>
     
    <body>
    	<div id="corp"> <!-- Corp de la page -->
        	<div id="banniere"> <!-- Bannière de la page -->
            </div>
            <div id="menu"> <!-- Menu horizontal -->    
                <ul id="onglets"> <!-- Menu horizontal de la page -->
                    <li class="arrondi"><a href="index.php">Accueil</a></li>
                    <li><a href="astuces.php">Exposez !</a></li>
                    <li><a href="forum/index.php">Forum</a></li>
                </ul>
            </div>  
    		<?php 
    		if(isset($_SESSION['pseudo'])){ 
    		?>
            <div id="connexion"> <!-- Espace connection de la page -->
            	<span class="titreconnexion">C'est qui ?</span>
                <form method="post">
                	<label for="connexion_pseudo" style="font:14px calibri" maxlength="16" >Pseudo : <br/></label>
                	<input type="text" name="connexion_pseudo" /><br /><br />
                    <label for="connexion_mdp" style="font:14px calibri">Mot de passe : <br /></label>
                    <input type="password" name="connexion_mdp" /><br />
                    <a href="#" style="font:11px calibri; text-decoration:none; color:#000;" >Mot de passe oublié ?</a><br /><br/>
                    <input type="checkbox" name="connexion_checkbox" />
                    <label for="connexion_checkbox" style="font:14px calibri"> Se souvenir de moi. <br/><br/></label> 
                    <input type="submit" name="connexion_submit" Value="Connexion" /><br /><br/>
                    <a href="inscription.php" style="font:14px calibri; text-decoration:none; color:#FF9600;"><u>Pas encore inscrit ?</u></a>
                    <?php
    				if($erreur != ''){
                    echo '<span class="erreur">'.$erreur.'</span>';
    				}
    				?>
               </form>
            </div>
    		<?php
    		}
    		else{
    		echo 'KikooLOL';
    		}
    		?>
        </div>
    </body>
    </html>
    </html>
    Cependant, quelque chose ne va pas. En effet quand je rentre sur ma page je vois le message "Kikoolol" (oui je sais... ) alors que je n'ai rien renseigné dans le formulaire auparavant. :s

    De plus, j'aimerais que vous me donniez vos avis sur ce bout de script. Ce qui pourrait être perfectible etc...

    Merci bien.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Attention aux égalités :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($nombre_pseudo == 0){
    Et tu as oublié l'étape mysql_fetch_assoc() sur tes lectures de la base de données, ce n'est pas $result_mdp qui contient le mot de passe.

    Sinon pour le code :
    - a mon avis sur la premiere condition, il te faut un ET et pas un OU.
    - tu continues le traitement même si la connexion a echoué.
    - tes variables pseudosql et mdpsql sont une étape inutile, tu aurais pu faire l'echappement dés le début ; pour le mot de passe l'echappement sur une donnée passée par SHA1() est je pense inutile.
    - je ne comprends pas pourquoi tu fais deux le SELECT
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 134
    Par défaut
    Plop et merci de ta réactivité.

    Tout d'abord, j'ai rectifié l'égalité avec deux ==

    Et tu as oublié l'étape mysql_fetch_assoc() sur tes lectures de la base de données, ce n'est pas $result_mdp qui contient le mot de passe.
    mysql_fetch_assoc() ?? Cela voudrait dire que je dois utiliser un tableau ?
    En effet, $result_mdp ne contient pas le mdp, j'ai donc ajouter ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $echo_mdp = mysql_result($result_mdp);
    et modifié ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    			elseif($echo_mdp != $motdepasse){
    				$erreur = 'Le mot de passe n\'est pas bon.';
    			}
    - a mon avis sur la premiere condition, il te faut un ET et pas un OU.
    C'est fait. j'avais un doute là dessus, mais en effet, ça me semble plus logique.

    - tu continues le traitement même si la connexion a echoué.
    Euh... tu parles de l'authentification ou bien de la connexion à la BDD ?

    - tes variables pseudosql et mdpsql sont une étape inutile, tu aurais pu faire l'echappement dés le début ; pour le mot de passe l'echappement sur une donnée passée par SHA1() est je pense inutile.
    Quelque chose comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pseudo = mysql_real_escape_string($_POST['connexion_pseudo']);
    On m'avait dit lors de la conception de mon script d'inscription que le mysql_real_escape_string() aurait pu causer certaines erreurs lors de la vérification. :s Enfin si tu me dis que c'est bon, je te crois.

    Les MDP de ma BDD sont tous cryptées en sha1(). Donc si je le laisse en claire, normalement il ne pourrait pas retrouver le mdp cryptée dans le BDD, si ?

    - je ne comprends pas pourquoi tu fais deux le SELECT
    Le premier select permet de trouver si le pseudo mis dans le champs est égal à un pseudo de la BDD. Ensuite, le second select permet de voire si le mdp correspond bien au mdp du pseudo dans la BDD. Tu m'as compris ?

    Entre temps, hier soir, j'ai modifier quelques petites chose dans le script, ce qui donne ça :

    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    <?php 
    $erreur = NULL;
    	if(isset($_POST['connexion_pseudo']) && isset($_POST['connexion_mdp'])){
    		$host = "localhost"; 
    		$login = "Jean"; 
    		$mdp = ""; 
    		$bdd = "xxx"; 
     
    		$pseudo = $_POST['connexion_pseudo'];
    		$motdepasse = sha1($_POST['connexion_mdp']);
    		$checkbox = null;
     
    		if(empty($pseudo) || empty($motdepasse)){
    			$erreur = 'Les champs de connexion ne sont pas tous remplis.';
    		}
    		else{
    			$connexion_sql = mysql_connect($host,$login,$mdp); 
    			$connexion_bdd = mysql_select_db($bdd);
    			if(!$connexion_sql || !$connexion_bdd){
    				$erreur = 'Connexion impossible avec le serveur distant.';
    			}
     
    			$pseudosql = mysql_real_escape_string($pseudo);
    			$mdpsql = mysql_real_escape_string($motdepasse);
    			$result_pseudo = mysql_query('SELECT * FROM membre WHERE pseudo="'.$pseudosql.'"')
    				or exit(mysql_error());
    			$nombre_pseudo = mysql_num_rows($result_pseudo);
    			$result_mdp = mysql_query('SELECT mdp FROM membre WHERE pseudo="'.$pseudosql.'"')
    				or exit(mysql_error());
    			$echo_mdp = mysql_result($result_mdp);	
     
    			if($nombre_pseudo == 0){
    				$erreur = 'Le pseudo écrit ne correspond à aucun compte.';
    			}
    			elseif($echo_mdp != $motdepasse){
    				$erreur = 'Le mot de passe n\'est pas bon.';
    			}
    			else{
    				if(isset($_POST['connexion_checkbox'])){
    					setcookie("cookiepseudo",$pseudo,time()+60*60*24*365*100);
    					setcookie("cookiemdp",$motdepasse,time()+60*60*24*365*100);
    				}
    				else{
    					setcookie("cookiepseudo",$pseudo,NULL,"/");
    					setcookie("cookiemdp",$motdepasse,NULL,"/");
    				}
    				session_start();
    				$_SESSION['pseudo'] = $pseudo;
    				echo 'Ca fonctionne';
    			}
    		}
    	}
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Index</title>
    <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
    </head>
     
    <body>
    	<div id="corp"> <!-- Corp de la page -->
        	<div id="banniere"> <!-- Bannière de la page -->
            </div>
            <div id="menu"> <!-- Menu horizontal -->    
                <ul id="onglets"> <!-- Menu horizontal de la page -->
                    <li class="arrondi"><a href="index.php">Accueil</a></li>
                    <li><a href="astuces.php">Exposez !</a></li>
                    <li><a href="forum/index.php">Forum</a></li>
                </ul>
            </div>  
    		<?php 
    		if(isset($_SESSION['pseudo'])){ 
    		?>
            <div id="connexion"> <!-- Espace connection de la page -->
            	<span class="titreconnexion">C'est qui ?</span>
                <form method="post">
                	<label for="connexion_pseudo" style="font:14px calibri" maxlength="16" >Pseudo : <br/></label>
                	<input type="text" name="connexion_pseudo" /><br /><br />
                    <label for="connexion_mdp" style="font:14px calibri">Mot de passe : <br /></label>
                    <input type="password" name="connexion_mdp" /><br />
                    <a href="#" style="font:11px calibri; text-decoration:none; color:#000;" >Mot de passe oublié ?</a><br /><br/>
                    <input type="checkbox" name="connexion_checkbox" />
                    <label for="connexion_checkbox" style="font:14px calibri"> Se souvenir de moi. <br/><br/></label> 
                    <input type="submit" name="connexion_submit" Value="Connexion" /><br /><br/>
                    <a href="inscription.php" style="font:14px calibri; text-decoration:none; color:#FF9600;"><u>Pas encore inscrit ?</u></a>
                    <?php
    				if($erreur != ''){
                    echo '<span class="erreur">'.$erreur.'</span>';
    				}
    				?>
               </form>
            </div>
    		<?php
    		}
    		else{
    		echo 'KikooLOL';
    		}
    		?>
        </div>
    </body>
    </html>
    </html>
    Merci.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Les MDP de ma BDD sont tous cryptées en sha1(). Donc si je le laisse en claire, normalement il ne pourrait pas retrouver le mdp cryptée dans le BDD, si ?
    Ce que je voulais dire c'est que ce n'est pas necessaire de faire un mysql_real_escape_string() sur une donnée qui viens de passer entre les mains de sha1()

    Le premier select permet de trouver si le pseudo mis dans le champs est égal à un pseudo de la BDD. Ensuite, le second select permet de voire si le mdp correspond bien au mdp du pseudo dans la BDD. Tu m'as compris ?
    si tu ne fais que la deuxieme requête, tu auras egalement l'information de l'existance du login.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 498
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 498
    Par défaut
    mysql_fetch_assoc() ?? Cela voudrait dire que je dois utiliser un tableau ?
    => oui fr.php.net/manual/fr/function.mysql-fetch-assoc.php
    en simplifie, tu lui dit "mets le resultat de <$result_mdp> dans <$echo_mdp>"
    mais apres, il ne sait pas quelle colone tu veux, ni de quelle ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $echo_mdp = mysql_result($result_mdp);
    $row=mysql_fetch_assoc($echo_mdp);
    echo $row["ta_colonne"];
    => "mets la ligne suivante (du resultat) dans <$row> et affiche la colonne <ta_colonne>"

    l'une de tes 2 requete sql est inutile
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 134
    Par défaut
    sabotage => Ah ok, d'autant plus que $mdpsql n'était pas utilisé.

    D'accord, donc le script donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    			$result_mdp = mysql_query('SELECT mdp FROM membre WHERE pseudo="'.$pseudosql.'"')
    				or exit(mysql_error());
    			$echo_mdp = mysql_result($result_mdp);	
     
    			if($echo_mdp == 0){
    				$erreur = 'Le pseudo écrit ne correspond à aucun compte.';
    			}
    			elseif($echo_mdp != $motdepasse){
    				$erreur = 'Le mot de passe n\'est pas bon.';
    			}
    _______


    Doksuri => Comme ceci ? Je suis pas très doué avec les tableaux. :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    			$pseudosql = mysql_real_escape_string($pseudo);
    			$result_mdp = mysql_query('SELECT mdp FROM membre WHERE pseudo="'.$pseudosql.'"')
    				or exit(mysql_error());
    			$echo_mdp = mysql_result($result_mdp);	
    			$row = mysql_festch_assoc($echo_mysql);
    			echo $row['mdp'];
     
    			if($echo_mdp == 0){
    				$erreur = 'Le pseudo écrit ne correspond à aucun compte.';
    			}
    			elseif($echo_mdp != $motdepasse){
    				$erreur = 'Le mot de passe n\'est pas bon.';
    			}

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu peux utiliser mysql_result :
    c'est au choix :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		$echo_mdp = mysql_result($result_mdp,0);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		$row = mysql_fetch_assoc($result_mdp);
    			$echo_mdp = $row['mdp'];
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Script d'authentification PHP / MySQL avec session
    Par king_soft dans le forum Langage
    Réponses: 6
    Dernier message: 09/07/2010, 15h00
  2. [Sécurité] Fenêtre d'authentification en php
    Par The Wretched dans le forum Langage
    Réponses: 7
    Dernier message: 05/08/2008, 16h26
  3. [MySQL] Recherche script d'authentification MsSQL en PHP
    Par dodik dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/02/2006, 09h56
  4. Réponses: 3
    Dernier message: 03/02/2006, 23h31
  5. Exécuter un script perl à partir de php
    Par ibtisss dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 10/11/2005, 11h44

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