[RESOLU] inscription / connexion a un site web

Eléphanteau du PHP | 11 Messages

22 sept. 2019, 18:42

bonjour, je voudrais créer un système d'inscription et de connexion sur mon site internet. j'ai déjà crée une base de donnée SQL avec des tables qui sont remplis par ma page inscription. Jusque la tous fonctionne !
Mais la partie connexion de fonctionne pas :

Code : Tout sélectionner

<body> <?php session_start(); $bdd = new PDO('mysql:host=****;dbname=****;charset=utf8', '****', '****'); if(isset($_POST['formconnexion'])) { $mailconnect = htmlspecialchars($_POST['EM']); $mdpconnect = password_hash($_POST['pass1'], PASSWORD_DEFAULT); if( !empty($mailconnect) AND !empty($mdpconnect) ) { if(filter_var($mail, FILTER_VALIDATE_EMAIL)) { // $mdp_hash_connect = password_hash($_POST['pass1'], PASSWORD_DEFAULT); /* $req_mail_pass = $bdd->prepare("SELECT * FROM Membres WHERE Email = ? AND Password = ?"); $req_mail_pass->execute(array($mailconnect, $mdp_hash_connect)); $user_exist = $req_mail_pass->rowCount(); */ $requser = $bdd->prepare("SELECT * FROM Membres WHERE Email = ? AND Password = ?"); $requser->execute(array($mailconnect, $mdp_hash_connect)); $userexist = $requser->rowCount(); if($user_exist == 1) { $userinfo = $requser->fetch(); $_SESSION['IdMembres'] = $userinfo['IdMembres']; $_SESSION['nom'] = $userinfo['nom']; $_SESSION['prenom'] = $userinfo['prenom']; $_SESSION['mail'] = $userinfo['mail']; // header("Location: /profil.php?id=".$_SESSION['IdMembres']); header('location: ../index.php'); } else { $erreur1 = "Mauvais mail ou mot de passe !"; header('location: ../prix.php'); } } }else { $erreur1 = "Tous les champs doivent être complétés !"; } } ?> <div class="titre"> <h1>Connectez - Vous</h1> </div> <section id="Container-Connexion"> <form method="post" action="" name="Co" id="Form-Connexion"> <section id="infoperso1"> <section id="info-Co"> <input type="email" name="EM" placeholder="Identifiant" id="EM" value="<?php if(isset($mailconnect)) {echo $mailconnect;} ?>"/> <input type="password" name="pass1" placeholder="Mot de passe" id="Pass"/> <h3> Votre identifiant est votre l’adresse mail. </h3> </section> <section id="Boutons"> <p> <input type="submit" name="formconnexion" value="Connexion" id="envoi"> </p> </section> </section> </form> <div id="info-supp"> <a href="#" class="A-Deco"> <h2> Identifiant ou mot de passe oublié ? </h2> </a> <a href="/inscription.php" class="A-Deco"> <h2> Vous n’avez pas encore crée votre compte ? Créez-en un maintenant. </h2> </a> </div> <?php if(isset($erreur1)) { echo '<p>'.$erreur1.'</p>'; } ?> </section> </body>
si on remplit pas tout les champs il y a bien un message qui s'affiche mais si on fait le bon MDP ou le mauvais rien ne se passe -_-
merci d'avance pour votre aide. :D

Mammouth du PHP | 2703 Messages

22 sept. 2019, 18:50

$mailconnect = htmlspecialchars($_POST['EM']);
if(filter_var($mail, FILTER_VALIDATE_EMAIL)) {

il faudrait vous mettre d'accord sur les noms.

htmlspecialchars est à utiliser quand on affiche une variable dans une page web, là cela peut poser problème.

Eléphanteau du PHP | 11 Messages

22 sept. 2019, 19:12

Merci je n'avais pas vue le $mail ça m'apprendra a copié mes anciens code ...
htmlspecialchars sert pour être sure que l'on envoie pas de balise non ?

Mammouth du PHP | 2703 Messages

22 sept. 2019, 20:02

if(filter_var($mail, FILTER_VALIDATE_EMAIL)) {
possible que cela ne passe plus le filtre avec des balises.

$requser = $bdd->prepare("SELECT * FROM Membres WHERE Email = ? AND Password = ?");
et si cela passe le filtre, c'est utilisé dans une requête préparée où la balise est inoffensive.

Eléphanteau du PHP | 11 Messages

22 sept. 2019, 20:51

Ca marche merci.

Eléphanteau du PHP | 11 Messages

23 sept. 2019, 21:01

Bonsoir, j'ai une question comment je peux comparer le mot de passe que rentre l’utilisateur quand il se connecte. Avec le mot de passe stocker dans la BDD vue que la fonction 'password_hash' crée une chaîne de caractère différente a chaque fois.

exemple pour le mdp : 123
le password_hash peut renvoyer : $2y$10$wtJbpxpBr79qnSyomh.MlOD9QkGiSO4/T7GKW5XYlZ.l1izZUvfMK
ou ca : $2y$10$HCo71ts/OfFT82AJPa/kuOeJRmqK3diep0Y1knz1P5d4Junjk447W

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

23 sept. 2019, 21:40

Bonjour,

En utilisant la fonction password_verify()
https://php.net/password_verify
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 11 Messages

23 sept. 2019, 22:34

J'ai fait ca, je verifie si tous les champs sont remplis puis je fais une requête avec l'adresse mail. si le mail est stocké en BDD alors je test si le mdp est le meme mais ca ne fonctionne pas :?

Code : Tout sélectionner

<?php session_start(); $bdd = new PDO('mysql:host=*;dbname=*;charset=utf8', '*', '*'); if(isset($_POST['formconnexion'])) { $mailconnect = htmlspecialchars($_POST['EM']); $mdp = htmlspecialchars($_POST['pass1']); if( !empty($mailconnect) AND !empty($mdpconnect) ){ $requser = $bdd->prepare("SELECT * FROM Membres WHERE Email = ? "); $requser->execute(array($mailconnect)); $userexist = $requser->rowCount(); // if($user_exist == 1) { $userinfo = $requser->fetch(); $_SESSION['password'] = $userinfo['password']; if (password_verify($_POST['pass1'], $_SESSION['password'])) { echo "salut"; } else { echo "coucou"; } $_SESSION['id'] = $userinfo['id']; $_SESSION['nom'] = $userinfo['nom']; $_SESSION['prenom'] = $userinfo['prenom']; $_SESSION['mail'] = $userinfo['mail']; header("Location: profil.php?id=".$_SESSION['id']); } else { $erreur1 = "Mauvais mail ou mot de passe !"; } }else{ $erreur1 = "Tous les champs doivent être complétés !"; } } ?> <form method="post" action="" name="Co" id="Form-Connexion"> <section id="infoperso1"> <section id="info-Co"> <input type="email" name="EM" placeholder="Identifiant" id="EM" value="<?php if(isset($mailconnect)) {echo $mailconnect;} ?>"/> <input type="password" name="pass1" placeholder="Mot de passe" id="Pass"/> <h3> Votre identifiant est votre l’adresse mail. </h3> </section> <section id="Boutons"> <p> <input type="submit" name="formconnexion" value="Connexion" id="envoi"> </p> </section> </section> </form>

Eléphanteau du PHP | 11 Messages

24 sept. 2019, 19:54

si vous avez des idées d'ou peut venir le problème je suis preneur

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

25 sept. 2019, 00:23

si vous avez des idées d'ou peut venir le problème je suis preneur
Difficile de relire tout ton code.
Repars des exemples de la doc dans une page vierge déjà pour voir si cela fonctionne bien.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 11 Messages

25 sept. 2019, 18:06

j'ai trouvé mon erreur à la ligne du if($user_exist == 1)
il faut mettre sans le tirer du 8 donc ça : " if($userexist == 1) "

mais la partie verdier mot de passe je ne sais pas sil elle fonctionne. car elle quand on fait un

Code : Tout sélectionner

echo "mdp :". $_SESSION['password'];
cela n'affiche rien. donc je suppose que mon tableau est vide. donc ca viendrait du fetch :?

Code : Tout sélectionner

$requser = $bdd->prepare("SELECT * FROM Membres WHERE Email = ?"); $requser->execute(array($mailconnect)); $userexist = $requser->rowCount(); // if($userexist == 1) { $userinfo = $requser->fetch(); $_SESSION['id'] = $userinfo['id']; $_SESSION['nom'] = $userinfo['nom']; $_SESSION['prenom'] = $userinfo['prenom']; $_SESSION['Telephone'] = $userinfo['Telephone']; $_SESSION['Email'] = $userinfo['Email']; $_SESSION['password'] = $userinfo['password']; echo "mdp1 :". $userinfo['password']. "</br>"; echo "mdp :". $_SESSION['password']; if (password_verify($mdp, $_SESSION['password'])) { header("Location: profil.php?id=".$_SESSION['id']); } else { $erreur1 = "Mauvais mot de passe !"; }