Problème avec la BDD

Alexis-web4

Alexis-web4 Le 24 février 2017 à 18:59 (Édité le 25 janvier 2019 à 17:53)

Bonjours à tous. S'il vous plait aidés moi.:)

Je ne comprend pas pourquoi il n'y a rien qui se rentre dans ba BDD.

recuperation.php
<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');

if(isset($_GET['section'])) {
   $section =htmlspecialchars($_GET['section']);
} else {
   $section = "";
      }


if(isset($_POST['recup_submit'],$_POST['recup_mail'])) {
   if(!empty($_POST['recup_mail'])) {
      $recup_mail = htmlspecialchars($_POST['recup_mail']);
      if(filter_var($recup_mail,FILTER_VALIDATE_EMAIL)) {
         $mailexist = $bdd->prepare('SELECT id,pseudo FROM membres WHERE mail = ?');
         $mailexist->execute(array($recup_mail));
         $mailexist_count = $mailexist->rowCount();
         if($mailexist_count == 1) {
            $pseudo = $mailexist->fetch();
            $pseudo = $pseudo['pseudo'];

            $_SESSION['recup_mail'] = $recup_mail;
            $recup_code = "";
            for($i=0; $i < 8; $i++) { 
               $recup_code .= mt_rand(0,9);
            }

            $mail_recup_exist = $bdd->prepare('SELECT id FROM recuperation WHERE mail = ?');
            $mail_recup_exist->execute(array($recup_mail));
            $mail_recup_exist = $mail_recup_exist->rowCount();
            if($mail_recup_exist == 1) {
               $recup_insert = $bdd->prepare('UPDATE recuperation SET code = ? WHERE mail = ?');
               $recup_insert->execute(array($recup_code,$recup_mail));
            } else {
               $recup_insert = $bdd->prepare('INSERT INTO recuperation(mail,code) VALUES (?, ?)');
               $recup_insert->execute(array($recup_mail,$recup_code));
            }
            $header="MIME-Version: 1.0\r\n";
         $header.='From:"SOS.com"<support.com>'."\n";
         $header.='Content-Type:text/html; charset="utf-8"'."\n";
         $header.='Content-Transfer-Encoding: 8bit';
         $message = '
         <html>
         <head>
         <title>Récupération de mot de passe - SOS_support</title>
         <meta charset="utf-8" />
         </head>
         <body>
         <font color="#303030";>
            <div align="center">
               <table width="600px">
               <tr>
                  <td>
                     
                     <div align="center">Bonjour <b>'.$pseudo.'</b>,</div>
                     Voici votre code de récupération: <b>'.$recup_code.'</b>
                     
                  </td>
               </tr>
               <tr>
                  <td align="center">
                     <font size="2">
                     Ceci est un email automatique, merci de ne pas y répondre
                     </font>
                  </td>
               </tr>
               </table>
            </div>
         </font>
         </body>
         </html>
         ';
         mail($recup_mail, "Récupération de mot de passe - SOS_support", $message, $header);
            header("Location:http://127.0.0.1/Site%20web/recuperation.php?section=code");
         } else {
            $error = "Cette adresse mail n'est pas enregistrée";
         }
      } else {
         $error = "Adresse mail invalide";
      }
   } else {
      $error = "Veuillez entrer votre adresse mail";
   }
}
if(isset($_POST['verif_submit'],$_POST['verif_code'])) {
   if(!empty($_POST['verif_code'])) {
      $verif_code = htmlspecialchars($_POST['verif_code']);
      $verif_req = $bdd->prepare('SELECT id FROM recuperation WHERE mail = ? AND code = ?');
      $verif_req->execute(array($_SESSION['recup_mail'],$verif_code));
      $verif_req = $verif_req->rowCount();
      if($verif_req == 1) {
         $up_req = $bdd->prepare('DELETE FROM recuperation WHERE mail = ?');
         $up_req->execute(array($_SESSION['recup_mail']));
         header('Location:http://127.0.0.1/Site%20web/recuperation.php?section=changemdp');
      } else {
         $error = "Code invalide";
      }
   } else {
      $error = "Veuillez entrer votre code de confirmation";
   }
}
if(isset($_POST['change_submit'])) {
   if(isset($_POST['change_mdp'],$_POST['change_mdpc'])) {
      $verif_confirme = $bdd->prepare('SELECT confirme FROM recuperation WHERE mail = ?');
      $verif_confirme->execute(array($_SESSION['recup_mail']));
      $verif_confirme = $verif_confirme->fetch();
      $verif_confirme = $verif_confirme['confirme'];
      if($verif_confirme == 1) {
         $mdp = htmlspecialchars($_POST['change_mdp']);
         $mdpc = htmlspecialchars($_POST['change_mdpc']);
         if(!empty($mdp) AND !empty($mdpc)) {
            if($mdp == $mdpc) {
               $mdp = sha1($mdp);
               $ins_mdp = $bdd->prepare('UPDATE membres SET motdepasse = ? WHERE mail = ?');
               $ins_mdp->execute(array($mdp,$_SESSION['recup_mail']));
            $del_req = $bdd->prepare('DELETE FROM recuperation WHERE mail = ?');
            $del_req->execute(array($_SESSION['recup_mail']));
               header('Location:http://127.0.0.1/Site%20web/connexion/');
            } else {
               $error = "Vos mots de passes ne correspondent pas";
            }
         } else {
            $error = "Veuillez remplir tous les champs";
         }
      } else {
         $error = "Veuillez valider votre mail grâce au code de vérification qui vous a été envoyé par mail";
      }
   } else {
      $error = "Veuillez remplir tous les champs";
   }
}
require_once('recuperation.view.php');
?>
J'ai aussi un autre fichier qui contient que du HTML.
coucougael94

coucougael94 Le 25 février 2017 à 09:56 (Édité le 25 février 2017 à 09:57)

Peut-tu nous modéliser la structure de ta base de données (nom de toutes les colonnes, type de colonne, extras, ...).
Grâce a ses infos, nous pourrions te répondre.
Essaye aussi chaque requêtes dans phpmyadmin.
Alexis-web4

Alexis-web4 Le 25 février 2017 à 13:13

Voila la structure de ma Base De Donnée.
TheOldNoob

TheOldNoob Le 25 février 2017 à 23:00

Salut l'ami, il faut pensé a ne pas mettre d'espace dans les noms des dossiers qu'on utilise, c'est moches et ça peu posé des problème de redirection
Alexis-web4

Alexis-web4 Le 26 février 2017 à 14:32

Salut TheOldNoob, merci pour ton conseil je vais changer cela. Par contre c'est tu d'ou vient mon problème ?
TheFlameflo

TheFlameflo Le 27 février 2017 à 04:17

Salut !

Est-ce que tu affiches la variable "$error" quelque part ?
Si ce n'est pas fait, rajoutes un echo ou un var_dump de $error quelque part...

Tu peux aussi tester la présence d'erreur lors de la connexion à la base de données en suivant ce tuto (partie du test) : https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/lire-des-donnees-2#/id/r-2175084

Si tu trouves quelque chose avec ces deux méthodes, donne nous l'erreur !

J'espère t'avoir aidé ! 😉
Alexis-web4

Alexis-web4 Le 28 février 2017 à 06:53

Salut.

Je vient d'essayer se que tu ma dit et je n'ai aucune erreurs en me connectant a la BDD. En revanche après avoir entrer et validé son adresse mail un message d'erreur intervient.

Notice: Undefined variable: _SESSION in C:\wamp64\www\Site web\recuperation.view.php on line 3
Elle vient de cette page recuperation.view.php qui contient essentiellement du html et très peu de php.

recuperation.view.php

    <h4 class="title-element">Récupération du mot de passe</h4>
    <?php if($section == 'code') { ?>
    Un code de vérification vous a été envoyé par mail: <?= $_SESSION['recup_mail'] ?>
    <br />
    <form method="post" class="default-form">
       <input type="text" placeholder="Code de vérification" name="verif_code"/><br/>
       <input type="submit" value="Valider" name="verif_submit"/>
    </form>
    <?php } elseif($section == "changemdp") { ?>
    Nouveau mot de passe pour <?= $_SESSION['recup_mail'] ?>
    <br /><br />
    <form method="post">
       <input type="password" placeholder="Nouveau mot de passe" name="change_mdp"/><br/>
       <input type="password" placeholder="Confirmation du mot de passe" name="change_mdpc"/><br/>
       <input type="submit" value="Valider" name="change_submit"/>
    </form>
    <?php } else { ?>
    <form method="post">
       <input type="email" placeholder="Votre adresse mail" name="recup_mail"/><br/>
       <input type="submit" value="Valider" name="recup_submit"/>
    </form>
    <?php } ?>
    <?php if(isset($error)) { echo '<span style="color:red">'.$error.'</span>'; } else { echo ""; } ?>


J'espère que cela aidera.
TheFlameflo

TheFlameflo Le 28 février 2017 à 15:59

Salut !

C'est étrange étant donnée que tu as déjà démarré la session...
Je doute que ça fonctionne, mais tu peux essayer un var_dump de $_SESSION, mais ça ne marchera sûrement pas...
Sinon, tu peux toujours mettre un autre session_start au début de la view, mais encore là ça risque de poser problème étant donné que la session a déjà démarré...
Alexis-web4

Alexis-web4 Le 7 mars 2017 à 19:24

Est ce que quelqu'un d'autre sait pourquoi ?
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte