Connexion espace user

Petit nouveau ! | 2 Messages

23 sept. 2019, 17:30

Bonjour,


Je travaille actuellement sur un projet de fin d'étude, et j'ai un problème avec ma connexion à l'espace user qui permettra d'enregistrer des fiches personnages sur le site que j'essaie de faire.

Je travaille en localhost pour le moment.

J'ai réussi à connecter ma base de données, mon inscription fonctionne, mes users sont bien intégrés dans la base, mais je n'arrive pas ensuite à les connecter. J'ai cherché un peu partout sur Internet, dans la doc, ici aussi, mais je n'arrive pas à adapter les bouts de codes ou codes que je trouve, ça ne fonctionne jamais. J'ai tenté et testé plein de choses, je m'y perds, je ne sais plus ce que je fais. |*()

Je vous mets celui que j'avais travaillé avec mon formateur (il y a 4 mois), mais qu'on avait pas réussi à faire fonctionner.

Est-ce que quelqu'un aurait une idée pour me débloquer ? Là ça me refuse l'accès, mais je n'arrive pas à voir ce qui ne fonctionne pas dans la vérification du mot de passe. Dans tous les autres codes que j'ai testé ça me dit toujours que le mot de passe est faux, alors que c'est bien le bon que j'ai mis. Est-ce que le problème pourrait venir de l'inscription, même si ça intègre bien les utilisateurs dans la base ?

Merci d'avance. :)

Page de connexion à la base de données que j'intègre en haut de chaque nouvelle page (cnx.php) :
<?php
// Connexion à la base de données
$dsn  = 'mysql:host=localhost; dbname=nombase; charset=utf8';
$user ='root';
$pass ='';

try{
    $cnx = new PDO($dsn, $user, $pass);
    $cnx ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
} catch(PDOexception $e) {
    echo 'Une erreur est survenue !';
}
Page de connexion :
<?php
session_start();

require_once('cnx.php'); 
$message = '';

$_SESSION['pseudo']='';
$pseudo = '';

echo $_SESSION['pseudo'];



if(isset($_POST['boutonConnexion'])){
    $var_mdpasse = htmlspecialchars($_POST['mdpasse']);
    $var_mdpasse = password_hash('mdpasse', PASSWORD_DEFAULT); 

    if(empty($_POST['pseudo']) || (empty($_POST['mdpasse']))){
        $message = '<script>alert("Veuillez remplir tous les champs !")</script>';
    }else{
        $sql = "SELECT * FROM user WHERE pseudo= :pseudo AND mdpasse= :mdpasse";
        $req = $cnx->prepare($sql);
        $req->execute(
            array(
                'pseudo'   => $_POST['pseudo'],
                'mdpasse'  => $_POST['mdpasse'] == password_verify('mdpasse', $var_mdpasse)
                //'mdpasse'  => password_verify($_POST['mdpasse'], $var_mdpasse) --> variante qui ne fonctionne pas non plus
                //'mdpasse'  => $_POST['mdpasse'] == password_verify($_POST['mdpasse'], $var_mdpasse) --> variante qui ne fonctionne pas non plus
            )
        );
        $count = $req->rowcount();
       if($count > 0){ 
            $_SESSION['pseudo'] = $_POST['pseudo'];
            $donnee = $req->fetch(PDO::FETCH_ASSOC);
            $_SESSION['id_user'] = $_POST['id_user'];
            header('location:enregistrement.php');
       }else{ 
            $message = '<mark>Accès refusé !</mark>';
        }
    }
}

?>
Partie Html de la page : (c'est sur la même page dans mon code)
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Connexion</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" media="screen" href="style.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js%22%3E"></script>

</head>
<body>
    <header> 
        <--! bandeau haut de page -->
    </header>
    <main>
    <?php
        if(isset($message)) {
            echo $message;
        }
        ?>
    <section id="cadreConnexion">
        <form method="POST" action="" id="connexion" >
        <h3>Connexion</h3>
            <div  class="formulaire">
                <label for="pseudo">Votre pseudo :</label>
                <input type="text" name="pseudo" class="pseudo" required />
            </div>
            <div class="formulaire">
                <label for="pass">Votre mot de passe :</label>
                <input type="password" name="mdpasse" class="pass" required/>
            </div>
            <div class="formBouton">
                <button name="boutonConnexion" type="submit">Valider</button>
            </div>
        </form>
    </section>

    </main>
    
    <footer> 
        <a href="formulaireContact.php" style="text-decoration:none">Contact</a>
    </footer>
</body>
</html>

Au cas où je vous mets le code de l'inscription qui fonctionne :
if(isset($_POST['validerInscription'])) {
    if((empty($_POST['pseudo']))||(empty($_POST['mdpasse']))||(empty($_POST['mdpasse2']))||(empty($_POST['mail']))){
        $message = '<script>alert("Veuillez remplir tous les champs !")</script>';
    }
    elseif(($_POST['mdpasse']) != ($_POST['mdpasse2'])){
        $message = '<script>alert("Mots de passe différents, réessayez")</script>';
    }
    else{
        $sql = "INSERT INTO user (pseudo,mdpasse,mail) VALUES (?,?,?)";
        $rs_insert = $cnx->prepare($sql); 

        $var_pseudo  = htmlspecialchars($_POST['pseudo']); 
        $var_mdpasse = htmlspecialchars($_POST['mdpasse']);
        $var_mdpasse = password_hash('mdpasse', PASSWORD_DEFAULT); 
        $var_mail    = htmlspecialchars($_POST['mail']);

        $reponse = $cnx->query('SELECT COUNT(pseudo) AS verif_pseudo FROM user WHERE pseudo= '.$cnx->quote($_POST['pseudo'])); 
        $donnee = $reponse->fetch();
        if($donnee['verif_pseudo']>0){
            $message = '<script>alert("Ce pseudo est déjà utilisé")</script>';
        }else{
            $rs_insert->bindValue(1,$var_pseudo,PDO::PARAM_STR); 
            $rs_insert->bindValue(2,$var_mdpasse,PDO::PARAM_STR);
            $rs_insert->bindValue(3,$var_mail,PDO::PARAM_STR);
            $rs_insert->execute();
            $message = '<script>alert("Inscription validée ! Connectez-vous pour continuer")</script>';
            header('location:connexion.php');
        }
    }
}

Mammouth du PHP | 2703 Messages

23 sept. 2019, 18:05

'mdpasse' => $_POST['mdpasse'] == password_verify('mdpasse', $var_mdpasse)
c'est quoi l'idée ?

$var_mdpasse = htmlspecialchars($_POST['mdpasse']);
$var_mdpasse = password_hash('mdpasse', PASSWORD_DEFAULT);
$rs_insert->bindValue(2,$var_mdpasse,PDO::PARAM_STR);
quel est donc le mot de passe inséré dans la base de données ?

Petit nouveau ! | 2 Messages

23 sept. 2019, 18:19

'mdpasse' => $_POST['mdpasse'] == password_verify('mdpasse', $var_mdpasse)
c'est quoi l'idée ?
Je voulais vérifier que le mot de passe qu'on entre pour la connexion est bien le même que celui qui a été enregistré dans la base de données au moment de l'inscription. (mais j'ai dû m'y prendre comme un manche)

$var_mdpasse = htmlspecialchars($_POST['mdpasse']);
$var_mdpasse = password_hash('mdpasse', PASSWORD_DEFAULT);
$rs_insert->bindValue(2,$var_mdpasse,PDO::PARAM_STR);
quel est donc le mot de passe inséré dans la base de données ?
Celui -là c'est celui qui est inséré lors de inscription.

Est-ce qu'il faudrait que je leur donne des noms différents dans mes deux formulaires ? Les variables aussi ? (les deux formulaires sont sur deux pages différentes).