Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème PDO

30 janvier 2023 à 22:14:37

Bonjour, j'ai un problème dans la base de donnée je ne sais pas quoi faire voici l'erreur : 

Par exemple dans le premier code j'ai un prob similaire et je suis obligé de passé de int à var et je ne sais pas pourquoi sur my sql. l'erreur ci dessous-concerne le deuxième code.


Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'forgotpass_token' cannot be null in C:\MAMP\htdocs\Pizzablog\reset.php:19 Stack trace: #0 C:\MAMP\htdocs\Pizzablog\reset.php(19): PDOStatement->execute(Array) #1 {main} thrown in C:\MAMP\htdocs\Pizzablog\reset.php on line 19

le code : 

<?php

if(isset($_GET['id']) && isset($_GET['token'])){

  require 'db.php';
  require 'function.php';
  $req = $pdo->prepare('SELECT * FROM users WHERE id = ? AND forgotpass_token IS NOT NULL AND forgotpass_token = ? AND forgotpass_at > DATE_SUB(NOW(), INTERVAL 30 MINUTE)');
  $req->execute([$_GET['id'], $_GET['token']]);
  $user = $req->fetch();

  if($user){
      if(!empty($_POST)){ 

    if(!empty($_POST['password']) && $_POST['password'] == $_POST['password_confirm']){

      $password = password_hash($_POST['password'], PASSWORD_BCRYPT);
      $pdo->prepare('UPDATE users SET password = ?, forgotpass_at = NULL, forgotpass_token = NULL')->execute([$password]);
      session_start();
      $_SESSION['flash']['success'] = 'Votre mot de passe a bien été modifié';
      $_SESSION['auth'] = $user;
      header('Location: account.php');
    }

  }

  }else{
    session_start();
    $_SESSION['flash']['error'] = "Ce token n'est pas valide";
    header('Location: login.php');
    exit();

  }



}else{

    header('Location: login.php ');
    exit();



}


?>


<?php require 'header.php'; ?>


<h1>Réintialiser votre mot de passe</h1>




<form action="" method="POST">


<div class="form-group">

   <label for="">Mot de passe</label>

   <input type="password" name="password" class="form-control"/>

</div>

<div class="form-group">

   <label for="">Confirmation du mot de passe</label>

   <input type="password" name="password_confirm" class="form-control"/>

</div>


<button type="submit" class="btn btn-primary">Réintialiser votre mot de passe</button>






</form>




<?php require 'footer.php'; ?>
<?php
if(!empty($_POST) && !empty($_POST['email'])){

  require_once 'db.php';
  require_once 'function.php';

 

  $req = $pdo->prepare('SELECT * FROM users WHERE email = ? AND confirmed_at IS NOT NULL');

  $req->execute([ $_POST['email']]);

  $user = $req->fetch();

  if($user){

      session_start();

      $forgotpass_token = str_random(60);
      $pdo->prepare('UPDATE users SET forgotpass_token = ?, forgotpass_at = NOW() WHERE id = ?')->execute([$forgotpass_token, $user->id]);

      $_SESSION['flash']['success'] = 'Les instructions du rappel de mot de passe vous ont été envoyées par email';
 
      mail($_POST['email'], 'Reintialisation de votre mot de passe', "Afin de réintialiser votre mot de passe merci de cliquer sur ce lien\n\nhttp://localhost/Pizzablog/reset.php?id={$user->id}&token=$forgotpass_token");

      header('Location:  login.php');

      exit();


  }else{ 

      $_SESSION['flash']['danger'] = 'Aucun compte ne correspond à cette adresse';


   
  }

}

?>



<?php require 'header.php'; ?>


<h1>Mot de passe oublié</h1>




<form action="" method="POST">


<div class="form-group">

   <label for="">Email</label>

   <input type="email" name="email" class="form-control"/>

</div>



<button type="submit" class="btn btn-primary">Se connecter</button>






</form>




<?php require 'footer.php'; ?>




Base de donnée : 

-
Edité par MatthieuMonray1 30 janvier 2023 à 22:21:01

  • Partager sur Facebook
  • Partager sur Twitter
30 janvier 2023 à 22:23:03

Bonjour,

Doublon

Les doublons nuisent au bon fonctionnement du forum et sont donc interdits. Si vous vous êtes trompé de section, il suffit de signaler votre sujet au staff pour qu'il le déplace au bon endroit.

Je vous invite à continuer la discussion sur l'autre sujet :  https://openclassrooms.com/forum/sujet/probleme-modifier-mot-de-passe-php

Mauvais titre

Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

Merci de modifier votre titre. Pour cela, éditez le premier message de votre sujet.

(titre originel : Problème PDO)

Liens conseillés

Je ferme ce sujet. 

  • Partager sur Facebook
  • Partager sur Twitter