Problème communication base de donnée et php

Résolu/Fermé
Yougo120 Messages postés 21 Date d'inscription dimanche 26 août 2018 Statut Membre Dernière intervention 16 décembre 2018 - Modifié le 31 août 2018 à 22:21
Yougo120 Messages postés 21 Date d'inscription dimanche 26 août 2018 Statut Membre Dernière intervention 16 décembre 2018 - 31 août 2018 à 23:12
Bonjour,

Mon problème est le suivant, je m'inscris sur la page register.php qui envoie mon mail et mdp sur ma base de donnée appelée "dropshipping" dans la table "membres" puis dans connexion.php, lorsque je rentre les
BON IDENTIFIANTS (ceux sur la base de donné), le site me dit que les identifiants sont incorrects.

register.php :

<?php
$db = new PDO('mysql:host=localhost;dbname=dropshipping', 'root','root');

if(isset($_POST['forminscription'])) {
   $pseudo = htmlspecialchars($_POST['pseudo']);
   $mail = htmlspecialchars($_POST['mail']);
   $mail2 = htmlspecialchars($_POST['mail2']);
   $mdp = sha1($_POST['mdp']);
   $mdp2 = sha1($_POST['mdp2']);
   if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2'])) {
      $pseudolength = strlen($pseudo);
      if($pseudolength <= 255) {
         if($mail == $mail2) {
            if(filter_var($mail, FILTER_VALIDATE_EMAIL)) {
               $reqmail = $db->prepare("SELECT * FROM membres WHERE mail = ?");
               $reqmail->execute(array($mail));
               $mailexist = $reqmail->rowCount();
               if($mailexist == 0) {
                  if($mdp == $mdp2) {
        $motdepasse = $_POST['mdp'];

                     $insert = $db->prepare("INSERT INTO membres VALUES('0','$pseudo','$mail','$motdepasse')");
      $insert->execute();
                     $erreur = "Votre compte a bien été créé ! <a href=\"connexion.php\">Me connecter</a>";
                  } else {
                     $erreur = "Vos mots de passes ne correspondent pas !";
                  }
               } else {
                  $erreur = "Adresse mail déjà utilisée !";
               }
            } else {
               $erreur = "Votre adresse mail n'est pas valide !";
            }
         } else {
            $erreur = "Vos adresses mail ne correspondent pas !";
         }
      } else {
         $erreur = "Votre pseudo ne doit pas dépasser 255 caractères !";
      }
   } else {
      $erreur = "Tous les champs doivent être complétés !";
   }
}
?>


<html>
   <head>
      <title>Inscription</title>
      <meta charset="utf-8">
   </head>
   <body>
      <div align="center">
         <h2>Inscription</h2>
         <br /><br />
         <form method="POST" action="">
            <table>
               <tr>
                  <td align="right">
                     <label for="pseudo">Pseudo :</label>
                  </td>
                  <td>
                     <input type="text" placeholder="Votre pseudo" id="pseudo" name="pseudo" value="<?php if(isset($pseudo)) { echo $pseudo; } ?>" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mail">Mail :</label>
                  </td>
                  <td>
                     <input type="email" placeholder="Votre mail" id="mail" name="mail" value="<?php if(isset($mail)) { echo $mail; } ?>" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mail2">Confirmation du mail :</label>
                  </td>
                  <td>
                     <input type="email" placeholder="Confirmez votre mail" id="mail2" name="mail2" value="<?php if(isset($mail2)) { echo $mail2; } ?>" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mdp">Mot de passe :</label>
                  </td>
                  <td>
                     <input type="password" placeholder="Votre mot de passe" id="mdp" name="mdp" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mdp2">Confirmation du mot de passe :</label>
                  </td>
                  <td>
                     <input type="password" placeholder="Confirmez votre mdp" id="mdp2" name="mdp2" />
                  </td>
               </tr>
               <tr>
                  <td></td>
                  <td align="center">
                     <br />
                     <input type="submit" name="forminscription" value="Je m'inscris" />
                  </td>
               </tr>
            </table>
         </form>
         <?php
         if(isset($erreur)) {
            echo '<font color="red">'.$erreur."</font>";
         }
         ?>
      </div>
   </body>
</html>


connexion.php :

<?php
session_start();

$db = new PDO('mysql:host=localhost;dbname=dropshipping', 'root','root');

if(isset($_POST['formconnexion'])) {
   $mailconnect = htmlspecialchars($_POST['mailconnect']);
   $mdpconnect = sha1($_POST['mdpconnect']);
   if(!empty($mailconnect) AND !empty($mdpconnect)) {
      $requser = $db->prepare("SELECT * FROM membres WHERE mail = ? AND motdepasse = ?");
      $requser->execute(array($mailconnect, $mdpconnect));
      $userexist = $requser->rowCount();
      if($userexist == 1) {
         $userinfo = $requser->fetch();
         $_SESSION['id'] = $userinfo['id'];
         $_SESSION['pseudo'] = $userinfo['pseudo'];
         $_SESSION['mail'] = $userinfo['mail'];
         header("Location: profil.php?id=".$_SESSION['id']);
      } else {
         $erreur = "Mauvais mail ou mot de passe !";
      }
   } else {
      $erreur = "Tous les champs doivent être complétés !";
   }
}
?>
<html>
   <head>
      <title>Connexion</title>
      <meta charset="utf-8">
   </head>
   <body>
      <div align="center">
         <h2>Connexion</h2>
         <br /><br />
         <form method="POST" action="">
            <input type="email" name="mailconnect" placeholder="Mail" />
            <input type="password" name="mdpconnect" placeholder="Mot de passe" />
            <br /><br />
            <input type="submit" name="formconnexion" value="Se connecter !" />
         </form>
         <h3>Pas encore de compte ? <a href="register.php">Inscrivez-vous !</a></h3>
         <?php
         if(isset($erreur)) {
            echo '<font color="red">'.$erreur."</font>";
         }
         ?>
      </div>
   </body>
</html>
  


EDIT : Correction des balises de code

Merci d'avance :)

1 réponse

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
31 août 2018 à 22:27
Bonjour,

Pleins d'erreurs dans ton code.....
par exemple :
- htmlspecialchars ne s'utilise QUE pour l'affichage. En aucun cas pour l'enregistrement en bdd
- sha1 n'est plus à utiliser. Désormais on utilise les fonctions php
http://php.net/manual/fr/function.password-hash.php pour coder le password
https://www.php.net/manual/fr/function.password-verify.php pour le vérifier

- rowCount ne s'utilise pas avec une requête SELECT. A la place on fera un COUNT

Vu que tu fais du PDO il faut y gérer les éventuelles erreurs :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

De plus, pour que ton code soit plus propre, applique ce qui est indiqué ici :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code


Voici un exemple de code, je t'invite à t'en inspirer :
https://forums.commentcamarche.net/forum/affich-34340900-login-password-php#7



Pour finir... lorsque tu postes ton code sur le forum, pense à y préciser le langage.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code


0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
31 août 2018 à 22:38
bonjour, de plus de l'avalanche d'erreurs et de maladresses dont une partie a été signalée par jordane45, il me semble que tu enregistres le mot de passe en clair dans la base (hérésie), et ensuite tu le compares au mot de passe hashé: penses-tu vraiment que cela pourrait fonctionner?
$motdepasse = $_POST['mdp'];
$insert = $db->prepare("INSERT INTO membres VALUES('0','$pseudo','$mail','$motdepasse')");


$mdpconnect = sha1($_POST['mdpconnect']);
$requser = $db->prepare("SELECT * FROM membres WHERE mail = ? AND motdepasse = ?");    
0
Yougo120 Messages postés 21 Date d'inscription dimanche 26 août 2018 Statut Membre Dernière intervention 16 décembre 2018
31 août 2018 à 23:12
Merci beaucoup à vous deux, ça marche désormais !
0