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 :

Page identifiant login [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut Page identifiant login
    Bonjour

    Niveau débutant

    J'ai inséré une page d'identification index.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
    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
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
     <?
    // --------------------- 
    // Initialisation des variables
    $login		= '';
    $pass		= '';
    $validForm_lo	= true;
    $MsgErreur	= '';
     
    // ---------------------
    // TRAITEMENT SI FORMULAIRE SOUMIS
    if(isset($_POST['Form_id_Submit'], $_POST['antiF5'], $_SESSION['antiF5']) && $_POST['antiF5']==$_SESSION['antiF5'])
    {
    	// ---------------------
    	// RECUPERATION des DONNEES
    	//On convertit les caracteres html
    	$login 		= (isset($_POST['login']))?				htmlspecialchars(stripslashes(trim($_POST['login']))) : '';
    	$pass		= (isset($_POST['pass']))?				htmlspecialchars(stripslashes(trim($_POST['pass']))) : '';
     
    	// ---------------------	
    	// CHAMPS OBLIGATOIRES
    	$champ_obligatoire = array();
    	$search  = array	(" ", "-", "'", "ğ", "Ğ", "ş", "Ş", "ı", "I", "Á", "À", "Â", "Ä", "Å", "Ã", "Ç", "É", "È", "Ê", "Ë", "Í", "Ì", "Î", "Ï", "Ñ", "Ó", "Ò", "Ô", "Ö", "Õ", "Ø", "Š", "Ú", "Ù", "Û", "Ü", "Ý", "Ÿ", "Ž", "Ð", "Þ", "á", "à", "â", "ä", "å", "ã", "ç", "é", "è", "ê", "ë", "í", "ì", "î", "ï", "ñ", "ó", "ò", "ô", "ö", "õ", "ø", "š", "ú", "ù", "û", "ü", "ý", "ÿ", "ž", "&", "ð", "þ", "ß", "æ", "œ", "Æ", "Œ");
    	$replace  = array	("", "", "",    "t", "t", "t", "t", "t", "t", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a");
    	if ($login==''		|| ctype_alnum(str_replace($search, $replace, $login))!=true 	|| strlen($login)!=9)	{$validForm_lo = false; $champ_obligatoire[] = 'login'; }
    	if ($pass==''		|| ctype_alnum(str_replace($search, $replace, $pass))!=true 	|| strlen($pass)!=8)	{$validForm_lo = false;	$champ_obligatoire[] = 'pass'; }
     
     
    	if(count($champ_obligatoire)>0)
    	{
    	$MsgErreur 	.= '*Champs obligatoires : '.implode(', ',$champ_obligatoire).'<br />';
    	echo "<script type='text/javascript'>alert(\"Veuillez renseigner tous les champs obligatoires!\")</script>";
    	}
     
    	// -----------------------
    	// OK SI PAS D'ERREUR
    	if($validForm_lo === true)
    	{
    		// ---------------------
    		if($login!='' && $pass!='')
    		{
    			// ---------------------
    			// Comparaison avec login et pass de la table
    			// connexion vers bdd mysql
    			try{
    			$chaine_connexion='mysql:host=localhost;dbname=cemkay';
    			$utilisation_UFT8=array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8");	
    			$connexion_bdd = new PDO($chaine_connexion, 'root', '', $utilisation_UFT8);
    			$connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);	
    			}
    			catch(PDOException $e){																			
    			$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    			die($msg);
    			}
     
    			// on recupère le password de la table qui correspond au login du visiteur
    			//Preparer la requete
    			$sql = 'SELECT * FROM connect WHERE identifiant=? AND mot_passe=? ';
    			$requete2 = $connexion_bdd ->prepare($sql);
    			//Associer des valeurs aux place holders
    			$requete2->bindValue(1, $_POST['login'], PDO::PARAM_STR);
     
    			foreach($requete2->fetchAll() as $donnee)
    			{
    			$data_login=$donnee['login'];
    			$data_mot_passe=$donnee['mot_passe'];
    			}
     
    			// si identifiant et mot de passe corrects
    			if ($data_login == $login && $data_mot_passe == $pass)
    			{
    				session_start();
    				$_SESSION['login'] = $_POST['login'];
    				header('Location: membre.php');
    				exit();
    			}
    			// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
    			else
    			$MsgErreur = 'Compte non reconnu.';
    		}
     
    	}
    }
    ?>
     
     
     
    <?php
    // ------------------------------------------ 
    // anti-F5: eviter les post multiples suite à F5
    unset($_POST);			// unset: Détruit une variable
    // anti-F5 (évite de re-poster le formulaire en cas de F5 ("Actualiser la page")
    $_SESSION['antiF5'] = rand(100000,999999);
    ?>
     
    <!DOCTYPE html> 
     
    <html lang="fr">
     
    <?php include("0-head.php"); ?>
     
    <body>
     
    <div class="container">	
     
    <?php include("0-menu.php"); ?>
     
    	<br>
    	<hr>
     
    <form action="login.php" method='post'>
    <table align="center" border="0">
      <tr>
        <td>
    		<input type="hidden" name="antiF5" value="<?php echo $_SESSION['antiF5']; ?>" />
    	</td>
      </tr>
      <tr>
        <td>Login :</td>
        <td><input type="text" name="login" maxlength="250"></td>
      </tr>
      <tr>
        <td>Password</td>
        <td><input type="password" name="pass" maxlength="10"></td>
      </tr>
      <tr>
        <td colspan="2" align="center"><input type="submit" name="Form_id_Submit" value="log in"></td>
      </tr>
    </table>
    </form>
     
    <?php if(!empty($MsgErreur)) { ?>
    	<p class="message_erreur_yellow"><?php echo $MsgErreur; ?></p>
    <?php } ?>
     
    	<br>
    	<hr>
     
     
    </div>
     
     
    </body>                                         
     
    </html>
    si les données sont validée l'utilisateur est dirigé vers la page membre.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
    	<?php
        session_start();
        if (!isset($_SESSION['login'])) {
        	header ('Location: index.php');
        	exit();
        }
        ?>
     
        <html>
        <head>
        <title>Espace membre</title>
        </head>
     
        <body>
        Bienvenue <?php echo htmlentities(trim($_SESSION['login'])); ?> !<br />
        <a href="deconnexion.php">Déconnexion</a>
        </body>
        </html>
    et en cas de déconnexion, l'utilisateur est dirigé vers la page index.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        <?php
        session_start();
        session_unset();
        session_destroy();
        header('Location: index.php');
        exit();
        ?>

    Ça ne marche pas il y a donc des incohérences ...
    pas de message d'erreur mais en haut de ma page index.php du code apparait:
    ) { $MsgErreur .= '*Champs obligatoires : '.implode(', ',$champ_obligatoire).'
    '; echo ""; } // ----------------------- // OK SI PAS D'ERREUR if($validForm_lo === true) { // --------------------- if($login!='' && $pass!='') { // --------------------- // Comparaison avec login et pass de la table // connexion vers bdd mysql try{ $chaine_connexion='mysql:host=localhost;dbname=cemkay'; $utilisation_UFT8=array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"); $connexion_bdd = new PDO($chaine_connexion, 'root', '', $utilisation_UFT8); $connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e){ $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage(); die($msg); } // on recupère le password de la table qui correspond au login du visiteur //Preparer la requete $sql = 'SELECT * FROM connect WHERE identifiant=? AND mot_passe=? '; $requete2 = $connexion_bdd ->prepare($sql); //Associer des valeurs aux place holders $requete2->bindValue(1, $_POST['login'], PDO:ARAM_STR); foreach($requete2->fetchAll() as $donnee) { $data_login=$donnee['login']; $data_mot_passe=$donnee['mot_passe']; } // si identifiant et mot de passe corrects if ($data_login == $login && $data_mot_passe == $pass) { session_start(); $_SESSION['login'] = $_POST['login']; header('Location: membre.php'); exit(); } // si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe else $MsgErreur = 'Compte non reconnu.'; } } } ?>
    Pouvez vous m'aider?
    Cordialement

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Utilise <?php au lieu de <?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Merci

    Effectivement ... le code en haut de la page disparait ...
    Mais toujours pas de message d'erreur PHP et ça ne fonctionne pas ...
    Quand je tape l'identifiant et le mot de passe ... une page web apparait avec le message:
    Not Found
    The requested URL /login.php was not found on this server.

    page index.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
    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
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    <?php
    // --------------------- 
    // Initialisation des variables
    $login		= '';
    $pass		= '';
    $validForm_lo	= true;
    $MsgErreur	= '';
     
    // ---------------------
    // TRAITEMENT SI FORMULAIRE SOUMIS
    if(isset($_POST['Form_id_Submit'], $_POST['antiF5'], $_SESSION['antiF5']) && $_POST['antiF5']==$_SESSION['antiF5'])
    {
    	// ---------------------
    	// RECUPERATION des DONNEES
    	//On convertit les caracteres html
    	$login 		= (isset($_POST['login']))?				htmlspecialchars(stripslashes(trim($_POST['login']))) : '';
    	$pass		= (isset($_POST['pass']))?				htmlspecialchars(stripslashes(trim($_POST['pass']))) : '';
     
    	// ---------------------	
    	// CHAMPS OBLIGATOIRES
    	$champ_obligatoire = array();
    	$search  = array	(" ", "-", "'", "ğ", "Ğ", "ş", "Ş", "ı", "I", "Á", "À", "Â", "Ä", "Å", "Ã", "Ç", "É", "È", "Ê", "Ë", "Í", "Ì", "Î", "Ï", "Ñ", "Ó", "Ò", "Ô", "Ö", "Õ", "Ø", "Š", "Ú", "Ù", "Û", "Ü", "Ý", "Ÿ", "Ž", "Ð", "Þ", "á", "à", "â", "ä", "å", "ã", "ç", "é", "è", "ê", "ë", "í", "ì", "î", "ï", "ñ", "ó", "ò", "ô", "ö", "õ", "ø", "š", "ú", "ù", "û", "ü", "ý", "ÿ", "ž", "&", "ð", "þ", "ß", "æ", "œ", "Æ", "Œ");
    	$replace  = array	("", "", "",    "t", "t", "t", "t", "t", "t", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a");
    	if ($login==''		|| ctype_alnum(str_replace($search, $replace, $login))!=true 	|| strlen($login)!=9)	{$validForm_lo = false; $champ_obligatoire[] = 'login'; }
    	if ($pass==''		|| ctype_alnum(str_replace($search, $replace, $pass))!=true 	|| strlen($pass)!=8)	{$validForm_lo = false;	$champ_obligatoire[] = 'pass'; }
     
     
    	if(count($champ_obligatoire)>0)
    	{
    	$MsgErreur 	.= '*Champs obligatoires : '.implode(', ',$champ_obligatoire).'<br />';
    	echo "<script type='text/javascript'>alert(\"Veuillez renseigner tous les champs obligatoires!\")</script>";
    	}
     
    	// -----------------------
    	// OK SI PAS D'ERREUR
    	if($validForm_lo === true)
    	{
    		// ---------------------
    		if($login!='' && $pass!='')
    		{
    			// ---------------------
    			// Comparaison avec login et pass de la table
    			// connexion vers bdd mysql
    			try{
    			$chaine_connexion='mysql:host=localhost;dbname=cemkay';
    			$utilisation_UFT8=array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8");	
    			$connexion_bdd = new PDO($chaine_connexion, 'root', '', $utilisation_UFT8);
    			$connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);	
    			}
    			catch(PDOException $e){																			
    			$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    			die($msg);
    			}
     
    			// on recupère le password de la table qui correspond au login du visiteur
    			//Preparer la requete
    			$sql = 'SELECT * FROM connect WHERE identifiant=? AND mot_passe=? ';
    			$requete2 = $connexion_bdd ->prepare($sql);
    			//Associer des valeurs aux place holders
    			$requete2->bindValue(1, $_POST['login'], PDO::PARAM_STR);
     
    			foreach($requete2->fetchAll() as $donnee)
    			{
    			$data_login=$donnee['login'];
    			$data_mot_passe=$donnee['mot_passe'];
    			}
     
    			// si identifiant et mot de passe corrects
    			if ($data_login == $login && $data_mot_passe == $pass)
    			{
    				session_start();
    				$_SESSION['login'] = $_POST['login'];
    				header('Location: membre.php');
    				exit();
    			}
    			// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
    			else
    			$MsgErreur = 'Compte non reconnu.';
    		}
     
    	}
    }
    ?>
     
     
     
    <?php
    // ------------------------------------------ 
    // anti-F5: eviter les post multiples suite à F5
    unset($_POST);			// unset: Détruit une variable
    // anti-F5 (évite de re-poster le formulaire en cas de F5 ("Actualiser la page")
    $_SESSION['antiF5'] = rand(100000,999999);
    ?>
     
    <!DOCTYPE html> 
     
    <html lang="fr">
     
    <?php include("0-head.php"); ?>
     
    <body>
     
    <div class="container">	
     
    <?php include("0-menu.php"); ?>
     
    	<br>
    	<hr>
     
    <form action="login.php" method='post'>
    <table align="center" border="0">
      <tr>
        <td>
    		<input type="hidden" name="antiF5" value="<?php echo $_SESSION['antiF5']; ?>" />
    	</td>
      </tr>
      <tr>
        <td>Login :</td>
        <td><input type="text" name="login" maxlength="250"></td>
      </tr>
      <tr>
        <td>Password</td>
        <td><input type="password" name="pass" maxlength="10"></td>
      </tr>
      <tr>
        <td colspan="2" align="center"><input type="submit" name="Form_id_Submit" value="log in"></td>
      </tr>
    </table>
    </form>
     
    <?php if(!empty($MsgErreur)) { ?>
    	<p class="message_erreur_yellow"><?php echo $MsgErreur; ?></p>
    <?php } ?>
     
    	<br>
    	<hr>
     
     
    </div>
     
     
    </body>                                         
     
    </html>

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    L'attribut action de ton formulaire pointe vers login.php, or ce fichier n'existe pas. Tu dois le changer en index.php.

    Sinon, ton code a beaucoup de défauts. Quel tutoriel as-tu étudié pour le faire?

  5. #5
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Merci de ta réponse

    Voici mon code après modification

    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
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    <?php
    // --------------------- 
    // Initialisation des variables
    $login		= '';
    $pass		= '';
    $validForm_lo	= true;
    $MsgErreur	= '';
     
    // ---------------------
    // TRAITEMENT SI FORMULAIRE SOUMIS
     
    if(isset($_POST['Form_id_Submit'], $_POST['antiF5'], $_SESSION['antiF5']) && $_POST['antiF5']==$_SESSION['antiF5'])
    {
    	// ---------------------
    	// RECUPERATION des DONNEES
     
    	$login 		= (isset($_POST['login']))?				htmlspecialchars(stripslashes(trim($_POST['login']))) : '';
    	$pass		= (isset($_POST['pass']))?				htmlspecialchars(stripslashes(trim($_POST['pass']))) : '';
     
     
    	// ---------------------	
    	// CHAMPS OBLIGATOIRES
     
    	$champ_obligatoire = array();
    	$search  = array	(" ", "-", "'", "ğ", "Ğ", "ş", "Ş", "ı", "I", "Á", "À", "Â", "Ä", "Å", "Ã", "Ç", "É", "È", "Ê", "Ë", "Í", "Ì", "Î", "Ï", "Ñ", "Ó", "Ò", "Ô", "Ö", "Õ", "Ø", "Š", "Ú", "Ù", "Û", "Ü", "Ý", "Ÿ", "Ž", "Ð", "Þ", "á", "à", "â", "ä", "å", "ã", "ç", "é", "è", "ê", "ë", "í", "ì", "î", "ï", "ñ", "ó", "ò", "ô", "ö", "õ", "ø", "š", "ú", "ù", "û", "ü", "ý", "ÿ", "ž", "&", "ð", "þ", "ß", "æ", "œ", "Æ", "Œ");
    	$replace  = array	("", "", "",    "t", "t", "t", "t", "t", "t", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a");
    	if ($login==''		|| ctype_alnum(str_replace($search, $replace, $login))!=true 	|| strlen($login)!=9)	{$validForm_lo = false; $champ_obligatoire[] = 'login'; }
    	if ($pass==''		|| ctype_alnum(str_replace($search, $replace, $pass))!=true 	|| strlen($pass)!=8)	{$validForm_lo = false;	$champ_obligatoire[] = 'pass'; }
     
     
    	if(count($champ_obligatoire)>0)
    	{
    	$MsgErreur 	.= '*Champs obligatoires : '.implode(', ',$champ_obligatoire).'<br />';
    	echo "<script type='text/javascript'>alert(\"Veuillez renseigner tous les champs obligatoires!\")</script>";
    	}
     
     
     
    	// -----------------------
    	// OK SI PAS D'ERREUR
    	if($validForm_lo === true)
    	{
    		// ---------------------
    		if($login!='' && $pass!='')
    		{
    			// ---------------------
    			// Comparaison avec login et pass de la table
    			// connexion vers bdd mysql
    			try{
    			$chaine_connexion='mysql:host=localhost;dbname=cemkay';						
    			$utilisation_UFT8=array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8");		
    			$connexion_bdd = new PDO($chaine_connexion, 'root', '', $utilisation_UFT8);				
    			$connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);					
    			}
    			catch(PDOException $e){																		
    			$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    			die($msg);
    			}
     
    			//Preparer la requete
    			$sql = 'SELECT identifiant, mot_passe FROM connect WHERE identifiant =?';
    			$requete2 = $connexion_bdd ->prepare($sql);
    			//Associer des valeurs aux place holders
    			$requete2->bindValue(1, 'cemalkaya', PDO::PARAM_STR);
     
    			//Compiler et executer la requete
    			$requete2->execute();
    			//Recuperer toutes les donnees retournees
    			foreach($requete2->fetchAll() as $donnee)
    			{
    			$data_login=$donnee['identifiant'];
    			$data_mot_passe=$donnee['mot_passe'];
    			}
    			//Clore la requete preparee
    			$requete2 -> closeCursor();
    			$requete2 = NULL;
     
    			// si identifiant et mot de passe corrects
    			if ($data_login == $login && $data_mot_passe == $pass)
    			{
    				session_start();
    				$_SESSION['login'] = $_POST['login'];
    				header('Location: membre.php');
    				exit();
    			}
    			// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
    			else
    			$MsgErreur = 'Compte non reconnu.';
    		}
     
    	}
    }
    ?>
     
    <?php
    // ------------------------------------------ 
    // anti-F5: eviter les post multiples suite à F5
    unset($_POST);			// unset: Détruit une variable
    // anti-F5 (évite de re-poster le formulaire en cas de F5 ("Actualiser la page")
    $_SESSION['antiF5'] = rand(100000,999999);		// rand: Génère une valeur aléatoire
    ?>
     
    <!DOCTYPE html> <!--on declare au validator le langage utilisé: html5-->
     
    <html lang="fr">
     
    <?php include("0-head.php"); ?>
     
    <body>
     
    <div class="container">	
     
    <?php include("0-menu.php"); ?>
     
    	<br>
    	<hr>
     
    <form action="index.php" method='post'>
    <table align="center" border="0">
      <tr>
        <td>
    		<input type="hidden" name="antiF5" value="<?php echo $_SESSION['antiF5']; ?>" />
    	</td>
      </tr>
      <tr>
        <td>Login :</td>
        <td><input type="text" name="login" maxlength="250"></td>
      </tr>
      <tr>
        <td>Password</td>
        <td><input type="password" name="pass" maxlength="10"></td>
      </tr>
      <tr>
        <td colspan="2" align="center"><input type="submit" name="Form_id_Submit" value="log in"></td>
      </tr>
    </table>
    </form>
     
    <?php if(!empty($MsgErreur)) { ?>
    	<p class="message_erreur_yellow"><?php echo $MsgErreur; ?></p>
    <?php } ?>
     
    	<br>
    	<hr>
     
    <?php include("0-pied-de-page.php"); ?>
     
    </div>
     
    </body>                                         
     
    </html>
    Ça ne fonctionne toujours pas et j'ai pas de message d'erreur
    Pouvez vous m'aider à l'améliorer?

    En fait j'ai adapté un tutoriel sur les livres d'or de developpez.com
    Si vous connaissez un bon tuto je suis preneur.

    Cordialement

  6. #6
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Quel résultat obtiens-tu ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    En fait:
    - quand je rentre le bon identifiant et le mot de passe et je valide .... je ne suis pas dirigé vers la page membre.php'
    - les messages d'erreur en cas de mauvais remplissage du formulaire n'apparaissent pas

  8. #8
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut que tu apprennes a debuguer un peu.
    Si tu l'avais fais tu aurais vu que ton code ne passe pas la première condition.
    La raison est simple : tu utilises $_SESSION alors que tu n'as pas démarré la session.

    Mais de toute façon ce antiF5 ne sert à rien.
    Tout comme ton ton contrôle de champs obligatoires atrocement complexe (le login doit faire 8 caractères et le mot de passe 9 caractères ?!)

    Fais les choses simplement :
    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
    <?php
    session_start();
    if (isset($_SESSION['login'])) {
    	echo 'Déjà connecté';
    }
    else {
    	if(isset($_POST['Form_id_Submit'], $_POST['login'], $_POST['pass']))
    		{
    					try{
    						$chaine_connexion='mysql:host=localhost;dbname=test';
    						$connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    						$connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    					}
    					catch(PDOException $e){																		
    						$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    						exit($msg);
    					}
     
    					$sql = 'SELECT identifiant FROM connect WHERE identifiant = ? and mot_passe = ?';
    					$requete2 = $connexion_bdd ->prepare($sql);
    					$requete2->execute(array($_POST['login'], $_POST['pass']));
     
    					if ($row = $requete2->fetch()) {
    						session_start();
    						session_regenerate_id();
    						$_SESSION['login'] = $row['identifiant'];
    						header('Location: autrepage.php');
    					}
    					else {
    						$MsgErreur = 'Compte non reconnu.';
    					}
    		}
    	?>
    <!DOCTYPE html>
    <html lang="fr">
    <body>
    	<div class="container">	
    	<form action="index.php" method='post'>
    	<table align="center" border="0">
    	  <tr>
    		<td>Login :</td>
    		<td><input type="text" name="login" maxlength="250"></td>
    	  </tr>
    	  <tr>
    		<td>Password</td>
    		<td><input type="password" name="pass" maxlength="10"></td>
    	  </tr>
    	  <tr>
    		<td colspan="2" align="center"><input type="submit" name="Form_id_Submit" value="log in"></td>
    	  </tr>
    	</table>
    	</form>
     
    	<?php if(!empty($MsgErreur)) { ?>
    		<p class="message_erreur_yellow"><?php echo $MsgErreur; ?></p>
    	<?php } ?>
    	</div>
    <?php } ?>
    </body>                                         
    </html>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Merci Sabotage,

    c'est vrai que simplifier c'est cool ...

    Mais y a plein de tuto où ils disent attention sécurité!

    Donc pour toi, pour s'identifier:
    - pas besoin de convertir les caractères html (htmlspecialchars, stripslashes, trim ...)?
    - pas besoin de hacher le password?

    Merci encore

  10. #10
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Je ne suis pas Sabotage, mais je peux répondre :-)
    AntiF5 ne sert à rien. Pour éviter les problèmes liées à l'actualisation, il faut faire une redirection après le traitement du formulaire et avant l'affichage de la page.

    htmlspecialchars ne sert à rien dans ce cas. htmlspecialchars s'utilise uniquement quand on veut afficher une variable dans du html. Ici, tu n'affiches pas.

    stripslashes ne sert à rien. C'était utilisé dans les vieilles versions de PHP qui avaient encore la directive magic_quotes_gpc, qui n'existe plus depuis PHP 5.4

    trim est discutable. Mais si tu as des utilisateurs qui mettent un espace vide avant ou après leur nom ou mot de passe, qui te dit que ce n'est pas exprès? Il ne faut jamais "deviner" ce que l'utilisateur veut. Il vaut mieux afficher une erreur que transformer silencieusement ce qu'il saisit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $champ_obligatoire = array();
    	$search  = array	(" ", "-", "'", "ğ", "Ğ", "ş", "Ş", "ı", "I", "Á", "À", "Â", "Ä", "Å", "Ã", "Ç", "É", "È", "Ê", "Ë", "Í", "Ì", "Î", "Ï", "Ñ", "Ó", "Ò", "Ô", "Ö", "Õ", "Ø", "Š", "Ú", "Ù", "Û", "Ü", "Ý", "Ÿ", "Ž", "Ð", "Þ", "á", "à", "â", "ä", "å", "ã", "ç", "é", "è", "ê", "ë", "í", "ì", "î", "ï", "ñ", "ó", "ò", "ô", "ö", "õ", "ø", "š", "ú", "ù", "û", "ü", "ý", "ÿ", "ž", "&", "ð", "þ", "ß", "æ", "œ", "Æ", "Œ");
    	$replace  = array	("", "", "",    "t", "t", "t", "t", "t", "t", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a");
    	if ($login==''		|| ctype_alnum(str_replace($search, $replace, $login))!=true 	|| strlen($login)!=9)	{$validForm_lo = false; $champ_obligatoire[] = 'login'; }
    	if ($pass==''		|| ctype_alnum(str_replace($search, $replace, $pass))!=true 	|| strlen($pass)!=8)	{$validForm_lo = false;	$champ_obligatoire[] = 'pass'; }
    Tout ça ne sert à rien. Ça ne rime à rien d'ailleurs:
    - ça teste si le login ou le mot de passe est vide (ça c'est bien),
    - vérifie qu'il n'y a pas des caractères spéciaux - alors que c'est tout le contraire, il faut un maximum de caractères spéciaux dans un mot de passe
    - limite la longueur du login et du mot de passe à 9 et 8 caractères, alors que c'est le contraire, il faut autoriser des mots de passe très longs

    - tu dois hasher le mot de passe avec password_hash() et le vérifier avec password_verify(). Sabotage a dû sauter cette étape puisque tu l'as toi-même sautée dans ton code en comparant directement les mots de passe.

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par Tsilefy Voir le message
    trim est discutable.
    Pour le mot de passe oui c'est discutable, par contre pour un login, un téléphone, une adresse etc. je ne vois pas d'inconvénient à le faire. Etant donné qu'un espace en début ou en fin de chaine n'est pas un caractère signifiant, je pars sur le principe qu'il ne peut s'agir que d'une maladresse, alors pas la peine d'envoyer un message pour ça. Et je l'efface automatiquement sinon cela pourrait modifier l'affichage en retour. Je trouve d'ailleurs que les cas où l'on devrait éviter d'employer cette fonction sont assez peu fréquents, c'est le cas pour le mot de passe comme tu l'as dis mais à priori j'en vois pas beaucoup d'autres.

    Enfin bon que cette petite remarque ne perturbe pas binco pour suivre tes conseils, car c'est vrai qu'il y a beaucoup de bizarreries dans le code original.

  12. #12
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Pour le mot de passe oui c'est discutable, par contre pour un login, un téléphone, une adresse etc. je ne vois pas d'inconvénient à le faire. Etant donné qu'un espace en début ou en fin de chaine n'est pas un caractère signifiant, je pars sur le principe qu'il ne peut s'agir que d'une maladresse, alors pas la peine d'envoyer un message pour ça. Et je l'efface automatiquement sinon cela pourrait modifier l'affichage en retour. Je trouve d'ailleurs que les cas où l'on devrait éviter d'employer cette fonction sont assez peu fréquents, c'est le cas pour le mot de passe comme tu l'as dis mais à priori j'en vois pas beaucoup d'autres.
    Je suis d'accord. Je me suis mal exprimé, j'ai écrit "c'est discutable" au lieu de "ça se discute". Il y a des cas où ça s'utilise et d'autres pas.

  13. #13
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Merci les gars,

    j'ai incorporé les fonctions password_hash() et password_verify()

    Le code fonctionne bien ...
    Pouvez vos me dire si les fonctions password_hash() et password_verify() sont placées au bon endroit?

    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
    // Variable de session
    // -------------------
    session_start();
     
    if (isset($_SESSION['login']))
    {
    	echo 'Déjà connecté';
    	header('Location: admin_membre.php');
    }
    else
    {
    	if(isset($_POST['Form_id_Submit'], $_POST['login'], $_POST['pass']))
     
    		{
    					$login=$_POST['login'];
    					$pass=$_POST['pass'];
    					// Connexion MYSQL pour verifier les identifiants
    					// -----------------------------------------------
    					try
    					{
    						$chaine_connexion='mysql:host=localhost;dbname=cemkay';
    						$connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    						$connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    					}
    					catch(PDOException $e)
    					{																		
    						$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    						exit($msg);
    					}
     
    					$sql = 'SELECT identifiant, mot_passe FROM connect WHERE identifiant = ? and mot_passe = ?';
    					$requete2 = $connexion_bdd ->prepare($sql);
    					$requete2->execute(array($_POST['login'], $_POST['pass']));
     
    					if ($row = $requete2->fetch() )
    					{
    						$mot_passe=$row['mot_passe'];
    						$mot_passe_hash=password_hash($mot_passe,PASSWORD_DEFAULT);
    						if (password_verify($pass, $mot_passe_hash))
    						{
    							session_start();
    							session_regenerate_id();
    							$_SESSION['login'] = $row['identifiant'];
    							header('Location: admin_membre.php');
    						}
    					}
    					else
    					{
    						$MsgErreur = 'Compte non reconnu.';
    					}
    		}
    }
    ?>
     
    <!DOCTYPE html> 
     
    <html lang="fr">
     
    <?php include("0-head.php"); ?>
     
    <body>
     
    <div class="container">	
     
    <?php include("0-menu.php"); ?>
     
    	<br>
    	<hr>	
     
    <div class="container">	
    	<form action="admin.php" method='post'>
    		<table align="center" border="0">
    		  <tr>
    			<td>Login :</td>
    			<td><input type="text" name="login" maxlength="250"></td>
    		  </tr>
    		  <tr>
    			<td>Password</td>
    			<td><input type="password" name="pass" maxlength="10"></td>
    		  </tr>
    		  <tr>
    			<td colspan="2" align="center"><input type="submit" name="Form_id_Submit" value="log in"></td>
    		  </tr>
    		</table>
    	</form>
     
    	<?php if(!empty($MsgErreur)) { ?>
    		<p class="message_erreur_yellow"><?php echo $MsgErreur; ?></p>
    	<?php } ?>
    	<br>
    	<hr>
     
    <?php include("0-pied-de-page.php"); ?>
     
    </div>
     
    </body>                                         
     
    </html>

  14. #14
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Il faudrait que tu testes déjà ton code et tu verras...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT identifiant, mot_passe FROM connect WHERE identifiant = ? and mot_passe = ?';
    Non. Tu ne dois pas utiliser mot_passe comme critère du select. Tu dois seulement utiliser identifiant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $mot_passe=$row['mot_passe'];
    $mot_passe_hash=password_hash($mot_passe,PASSWORD_DEFAULT);
    if (password_verify($pass, $mot_passe_hash)) { 
      //etc...
    Non. password_verify vérifie si un hash stocké dans la base de donnée correspond à un mot de passe en clair. Donc tu n'as plus besoin de faire password_hash sur le mot de passe. Il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mot_passe=$row['mot_passe'];
    if (password_verify($pass, $mot_passe_hash)) { 
      //etc...
    Et il faut aussi qu'au moment de la création (ou de la modification) du mot de passe, tu stockes le hash du mot de passe et pas le mot de passe en clair (sinon la création du hash cryptographique n'a aucun intérêt: le but est de stocker le mot de passe de manière "encrypté", de façon à ce qu'il ne soit pas réversible: si un intrus mets la main sur le hash, il ne pourra pas retrouver le mot de passe en clair).

    Donc il faut que tu fasses ceci dans la partie du code qui crée ou modifie un mot de passe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $login = $_POST['login'];
    $pass = $_POST['pass'];
    $pass = password_hash($pass, PASSWORD_DEFAULT);
     
    //et ensuite la partie insert habituelle
    $sql = "INSERT INTO connect (identifiant, mot_passe) VALUES (:identifiant, :mot_passe)";
    etc...

  15. #15
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    J'ai apporté les modifications: aucun message d'erreur

    1_admin.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
    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
    // Variable de session
    // -------------------
    session_start();
    // session_start(): demarre une nouvelle session ou reprend une session existante
    // $_SESSION: variables de session. Tableau associatif des valeurs stockées dans les sessions, et accessible au script courant
     
    if (isset($_SESSION['login']))
    {
    	echo 'Déjà connecté';
    	header('Location: 1_admin_membre.php');	// header(): envoie un en-tete HTTP ... ici on redirige vers la page ...
    }
    else
    {
    	if(isset($_POST['Form_id_Submit'], $_POST['login'], $_POST['pass']))
    	// isset: Détermine si une variable est définie et est différente de NULL
    	// $_POST: Variables HTTP POST
    		{
    					$login=$_POST['login'];
    					$pass=$_POST['pass'];
    					// Connexion MYSQL pour verifier les identifiants
    					// -----------------------------------------------
    					try
    					{
    						$chaine_connexion='mysql:host=localhost;dbname=cemkay';
    						$connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    						$connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    					}
    					catch(PDOException $e)
    					{																		
    						$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    						exit($msg);
    					}
     
    					$sql = 'SELECT identifiant FROM connect WHERE identifiant = ? and mot_passe = ?';
    					$requete2 = $connexion_bdd ->prepare($sql);
    					$requete2->execute(array($_POST['login'], $_POST['pass']));
     
    					if ($row = $requete2->fetch() )
    					{
    						$mot_passe=$row['mot_passe'];
    						if (password_verify($pass, $mot_passe))
    						{
    							session_start();
    							session_regenerate_id();
    							$_SESSION['login'] = $row['identifiant'];
    							header('Location: 1_admin_membre.php');	// header(): envoie un en-tete HTTP ... ici on redirige vers la page ...
    						}
    					}
    					else
    					{
    						$MsgErreur = 'Compte non reconnu.';
    					}
    		}
    }
    ?>
     
    <!DOCTYPE html> <!--on declare au validator le langage utilisé: html5-->
     
    <html lang="fr">
     
    <?php include("0-head.php"); ?>
     
    <body>
     
    <div class="container">	
     
    <?php include("0-menu.php"); ?>
     
    	<br>
    	<hr>	
     
    <div class="container">	
    	<form action="1_admin.php" method='post'>
    		<table align="center" border="0">
    		  <tr>
    			<td>Login :</td>
    			<td><input type="text" name="login" maxlength="250"></td>
    		  </tr>
    		  <tr>
    			<td>Password</td>
    			<td><input type="password" name="pass" maxlength="10"></td>
    		  </tr>
    		  <tr>
    			<td colspan="2" align="center"><input type="submit" name="Form_id_Submit" value="log in"></td>
    		  </tr>
    		</table>
    	</form>
     
    	<a href="1_admin_inscription.php" target="_self" title="Inscription">Inscription</a>	
     
    	<?php if(!empty($MsgErreur)) { ?>
    		<p class="message_erreur_yellow"><?php echo $MsgErreur; ?></p>
    	<?php } ?>
    	<br>
    	<hr>
     
    <?php include("0-pied-de-page.php"); ?>
     
    </div>
     
    </body>                                         
     
    </html>
    1_admin_inscription.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
    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
    <?php
    // Variable de session
    // -------------------
    session_start();
     
    // INSCRIPTION
    // -----------
    if(isset($_POST['Form_id_Submit_insc'], $_POST['login_insc'], $_POST['pass_insc']))
    {
    	if(strlen($_POST['login_insc'])>=8 AND strlen($_POST['login_insc'])<15 AND strlen($_POST['pass_insc'])>=8 AND strlen($_POST['pass_insc'])<15)
    	{
    			$login_insc=$_POST['login_insc'];
    			$pass_insc=$_POST['pass_insc'];
    			$pass_insc = password_hash($pass_insc, PASSWORD_DEFAULT);
    			// Connexion MYSQL pour verifier les identifiants
    			// -----------------------------------------------
    			try
    			{
    				$chaine_connexion='mysql:host=localhost;dbname=cemkay';
    				$connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    				$connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    			}
    			catch(PDOException $e)
    			{																		
    				$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    				exit($msg);
    			}
     
    			$sql = 'INSERT INTO connect (identifiant, mot_passe) VALUES (?,?)';
    			$requete1 = $connexion_bdd ->prepare($sql);
    			//Associer des valeurs aux place holders
    			$requete1->bindValue(1, $login_insc, PDO::PARAM_STR);
    			$requete1->bindValue(2, $pass_insc, PDO::PARAM_STR);
    			//Compiler et executer la requete
    			$requete1->execute();
    			//Clore la requete preparee
    			$requete1 -> closeCursor();
    			$requete1 = NULL;
     
    			$MsgErreur_insc = 'Inscription administrateur réalisée avec succès.';
    	}
    else
    {
    	$MsgErreur_insc = 'Veuillez rentrez un login et mot de passe comprit en 8 et 15 caractères.';
    }
    }
    ?>
     
    <!DOCTYPE html>
     
    <html lang="fr">
     
    <?php include("0-head.php"); ?>
     
    <body>
     
    <div class="container">	
     
    <?php include("0-menu.php"); ?>
     
    	<br>
    	<hr>	
     
    <div class="container">
     
    	<div class="row">
    		<h1>Inscription</h1>
     
    		<form action="1_admin_inscription.php" method='post'>
    			<table align="center" border="0">
    			  <tr>
    				<td>Login :</td>
    				<td><input type="text" name="login_insc" maxlength="250"></td>
    			  </tr>
    			  <tr>
    				<td>Password</td>
    				<td><input type="password" name="pass_insc" maxlength="10"></td>
    			  </tr>
    			  <tr>
    				<td colspan="2" align="center"><input type="submit" name="Form_id_Submit_insc" value="Inscription"></td>
    			  </tr>
    			</table>
    		</form>
     
    		<a href="1_admin.php" target="_self" title="Administration">Retour Administration du site</a>
     
    		<?php if(!empty($MsgErreur_insc)) { ?>
    			<p class="message_erreur_yellow"><?php echo $MsgErreur_insc; ?></p>
    		<?php } ?>
    	</div>
     
    	<br>
    	<hr>
     
    <?php include("0-pied-de-page.php"); ?>
     
    </div>
     
    </body>                                         
     
    </html>
    1_admin_membre.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
    <?php
    // Variable de session
    // -------------------
    session_start();
    if (!isset($_SESSION['login']))
    {
    	header ('Location: index.php');
    	exit();
    }
     
    header('Content-type: text/html; charset=UTF-8');
     
    ?>
     
    <!DOCTYPE html> <!--on declare au validator le langage utilisé: html5-->
     
    <html lang="fr">
     
    <?php include("0-head.php"); ?>
     
    <body>
     
    <div class="container">	
     
    <?php include("0-menu.php"); ?>
     
    	<br>
    	<hr>
     
    	<div class="row">
    	<h1>Administration du site</h1>
    		<div class="col-lg-12">
    			Bienvenue <?php echo htmlentities(trim($_SESSION['login'])); ?> <br />
    			<a href="1_admin_deconnexion.php" target="_self" title="Déconnexion">Déconnexion</a>
    		</div>
    	</div>
    	<br /><br /><br />
    	<div class="row">
    		<div class="col-lg-12">
    			<h4>Opérations à réaliser</h4>
    			<a href="2_telecharge_fichier.php" target="_self" title="Télécharger un fichier">Télécharger un fichier</a><br />
    			<a href="3_telecharge_image.php" target="_self" title="Télécharger une photo">Télécharger une photo</a>
    		</div>
    	</div>
     
    	<br>
    	<hr>
     
    <?php include("0-pied-de-page.php"); ?>
     
    </div>
     
    </body>
    </html>

    sur la page 1_admin.php: je clic sur le lien Inscription qui me mène à la page 1_admin_inscription.php, je complète le formulaire puis je valide. Je suis bien enregistré en tant qu'administrateur puisque le message Inscription administrateur réalisée avec succès apparait et ma table connect dans mysql reçoit bien le login et le pass. Puis je clic sur le lien Retour Administration du site et j'arrive ...
    sur la page 1_admin.php: je rentre mon login et le pass, je valide ... j'ai le message Compte non reconnu et je ne suis pas redirigé vers 1_admin_membre.php

    pourtant quand je fais la vérification suivante
    $verif=password_verify($pass, $mot_passe);
    le chiffre 1 apparait donc le mot de pass correspond au mot de passe haché ????

    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
    					// VERIFICATIONS
    					// -----------------------------------------------
    					try
    					{
    						$chaine_connexion='mysql:host=localhost;dbname=cemkay';
    						$connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    						$connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    					}
    					catch(PDOException $e)
    					{																		
    						$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    						exit($msg);
    					}
     
    					$sql = 'SELECT identifiant, mot_passe FROM connect WHERE identifiant = ?';
    					$requete2 = $connexion_bdd ->prepare($sql);
    					//Associer des valeurs aux place holders
    					$requete2->bindValue(1, 'cemalkaya', PDO::PARAM_STR);
    					//Compiler et executer la requete
    					$requete2->execute();
     
     
    					//Recuperer toutes les donnees retournees
    					foreach($requete2->fetchAll() as $donnee)
    						{
    						$mot_passe=$donnee['mot_passe'];
    						}
    					echo ('
    						<br />mot de passe bdd: ' . $donnee['mot_passe'] . '<br /> ok <br />
    						');
    					$verif=password_verify($pass, $mot_passe);
    					echo $verif;
    Je suis pommé dans mon code a force de le relire ... help please

  16. #16
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Parce que tu n'as pas modifié ces lignes dans 1_admin.php comme je l'ai recommandé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = 'SELECT identifiant FROM connect WHERE identifiant = ? and mot_passe = ?';
    $requete2 = $connexion_bdd ->prepare($sql);
    $requete2->execute(array($_POST['login'], $_POST['pass']));
    J'ai écrit:
    Non. Tu ne dois pas utiliser mot_passe comme critère du select. Tu dois seulement utiliser identifiant.
    Donc

    1) ce code doit être modifié en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = 'SELECT identifiant FROM connect WHERE identifiant = ? ';
    $requete2 = $connexion_bdd ->prepare($sql);
    $requete2->execute(array($_POST['login']));
    2) Ton SELECT ne récupère que le champ identifiant, or tu as aussi besoin du mot de passe pour faire la comparaison. Donc, la version finale de ces lignes doit être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = 'SELECT identifiant, mot_passe FROM connect WHERE identifiant = ? ';
    $requete2 = $connexion_bdd ->prepare($sql);
    $requete2->execute(array($_POST['login']));

  17. #17
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Merci beaucoup

    pourtant je l'avais modifié ... mais a force de faire les essaies ... copier coller à partir d'une sauvegarde ... lire et relire ...

  18. #18
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    N'oublie pas de marquer le fil comme résolu :-)

  19. #19
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Merci à tous

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

Discussions similaires

  1. récupération identifiant login dans la page suivante
    Par fidecourt dans le forum Langage
    Réponses: 2
    Dernier message: 07/03/2012, 14h01
  2. problème page de login
    Par cyril911 dans le forum Langage
    Réponses: 3
    Dernier message: 18/04/2007, 16h14
  3. Page de login -- script PHP qui ne marche pas
    Par Alexlesilex dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 24/04/2006, 16h32
  4. Test de Dsiponibilité : Page de login
    Par Nexussmb dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/02/2006, 17h20
  5. [servlet][jsp] Creer une page de login
    Par Beuj dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 19/03/2004, 17h55

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