Problème communication base de donnée et php

Résolu
Yougo120 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   -  
Yougo120 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   -
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 :)
A voir également:

1 réponse

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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   Statut Membre Dernière intervention  
 
Merci beaucoup à vous deux, ça marche désormais !
0