Partage
  • Partager sur Facebook
  • Partager sur Twitter

Impossible de se connecter

Suppression et récréation de ligne dans la table

    2 février 2023 à 20:30:32

    Bonjour,

    J'ai supprimé toutes les lignes de ma table users pensant etre dans ma table blog et voulant supprimer les articles

    pour recréer les meme lignes j'ai fait :

    INSERT INTO users (mail, password, nom, prenom, age, telephone, role) VALUES ('email@gmail.com', '$xxxxxxxxxx', NULL, NULL, NULL, NULL, 1);

    j'ai ajouté mes 3 users donc trois ligne et au lieu que l'id fasse 1 2 3 en commencant à 1 il fait 4 5 6

    j'arrive plus à me connecter avec mon mail et mot de passe alors que c'est le bon mail et bon mot de passe

    ( ! ) Warning: Trying to access array offset on value of type bool in C:\wamp\www\EXOPHP\index.php on line 35

    comment faire pour que les id commencent à 1 ?

    Le code pour la partie connexion :

    Database.php :

    <?php
    
    class Database {
        
        private string $_dbName = DB_NAME;
        private string $_dbUser = DB_USER;
        private string $_dbPwd = DB_PWD;
    
        protected function connectDB(){
    
            try{
                    $db = new PDO('mysql:host=localhost;dbname='.$this->_dbName.';charset=utf8', $this->_dbUser, $this->_dbPwd);
                    
                    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                    $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
        
                    return $db;
    
            }catch(PDOException $e){
    
                die("Erreur PDO : ". $e->getMessage());
            }
        }
    }
    ?>

    config.php :

    <?php
    
    /* INFORMATIONS DE CONNEXION A LA BDD */
    define('DB_NAME', 'exophp');
    define('DB_USER', 'root');
    define('DB_PWD', '');
    
    ?>

    Users.php :

    <?php
    
    class Users extends Database{
    
        public function getAllUsers()
        {
            $db = $this->connectDB();
    
            $query = "SELECT * FROM users";
    
            $statment = $db->prepare($query);
            $statment->execute();
    
            return $statment->fetchAll();
        }
    
        public function getID($mail){
    
            $db = $this->connectDB();
    
            $requete = "SELECT id FROM users WHERE mail = :mail";
    
            $statment = $db->prepare($requete);
            
            $statment->bindValue(":mail", $mail, PDO::PARAM_STR);
    
            $statment->execute();
            
            //fetch() retourne un tableau de tous les id
            $id = $statment->fetch();
    
            if ($id == false){
                return false;
            }
    
            return $id['id'];
    
            //return $id === false ? false : intval($id['id']);
        }
    
        public function getUser($id){
    
            $db = $this->connectDB();
    
            $requete = "SELECT * FROM users WHERE id = :id";
    
            $statment = $db->prepare($requete);
    
            $statment->bindValue(":id", $id, PDO::PARAM_INT);
    
            $statment->execute();
    
            $result = $statment->fetch();
            
            return $result; //ou return $statment->fetch(); 
        }
    
        public function changeInfos($id, $name, $lastname, $age, $telephone){
            
            $db = $this->connectDB();
    
            $requete = "UPDATE users SET prenom = :name, nom = :lastname, age = :age, 
            telephone = :telephone WHERE id = :id";
    
            $statment = $db->prepare($requete);
    
            $statment->bindValue(":name", $name, PDO::PARAM_STR);
            $statment->bindValue(":lastname", $lastname, PDO::PARAM_STR);
            $statment->bindValue(":age", $age, PDO::PARAM_INT);
            $statment->bindValue(":telephone", $telephone, PDO::PARAM_STR);
            $statment->bindValue(":id", $id, PDO::PARAM_STR);
    
            $statment->execute();
        }
    
        public function changePassword($id, $password){
            
            $db = $this->connectDB();
    
            $requete = "UPDATE users SET password = :password WHERE id = :id";
    
            $statment = $db->prepare($requete);
    
            $statment->bindValue(":password", $password, PDO::PARAM_STR);
            $statment->bindValue(":id", $id, PDO::PARAM_INT);
    
            $statment->execute();
        }
    
    }
    ?>

    index.php :

    <?php
    require_once './config.php';
    require_once './models/Database.php';
    require_once './models/Users.php';
    
    session_start();
    
    if (isset($_SESSION['user'])){
      header('Location: account.php');
      exit();
    }
    
    $Users = new Users();
    
    $error = false;
    
    $idUser = false;
    
    //verifie si le formulaire a ete soumis avec la methode POST
    if($_SERVER['REQUEST_METHOD'] === 'POST'){
        $idUser = $Users->getID($_POST['email']);
    
        if($idUser === false){
          $error = true; 
        } 
        else {
          $user = $Users->getUser($idUser);
          if(password_verify($_POST['password'], $user['password'])){
                unset($user['password']);
                $_SESSION['user'] = $user;
    
                header('Location: account.php');
                exit();
    
            } else {
              $error = true;
            }
        }
    }
    
    ?>
    
    <!DOCTYPE html>
    <html lang="fr">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="assets/css/style.css">
        <link rel="stylesheet" href="assets/css/header.css">
        
        <title>Connexion</title>
    </head>
    <body>
    <header>
      <nav>
        <ul>
          <li class="gauche"><a href="#home">Forum</a></li>
          <li class="gauche"><a href="#about">Accueil</a></li>
          <li class="droite"><a href="#services">Créer un compte</a></li>
          <li class="droite"><a href="#contact">Login</a></li>
        </ul>
      </nav>
    </header>
    <div class="form">
      <form action="index.php" method="POST">
        <div>
          <p>Connexion</p>
          <label for="email">Adresse e-mail</label>
          <input type="email" id="email" name="email" placeholder="nom@monemail.com">
        </div>
        <div>
          <label for="password">Mot de passe</label>
          <input type="password" id="password" name="password" placeholder="************">
        </div>
        <div>
          <input class="login" type="submit" value="Login">
          <?php if($error) : ?>
              <p class="erreur">
                Utilisateur ou mot de passe incorrect
              </p>
          <?php endif; ?>
        </div>
      </form>
    </div>
    </body>
    </html>

    -
    Edité par Max123456 2 février 2023 à 20:31:19

    • Partager sur Facebook
    • Partager sur Twitter
      4 février 2023 à 21:39:22

      Bonjour,

      Concernant les ID qui ne recommencent pas à 1, c'est normal, ta clé primaire ("id") doit être en AUTO_INCREMENT (c'est ce que l'on attend d'une clé primaire : être unique). Si tu veux que tes ID recommencent à 1 il faut vider à proprement parler ta table, et insérer par la suite le contenu.

      TRUNCATE TABLE ma_table;

      Et ensuite recommencer tes INSERT INTO.

      Tu peux aussi "forcer" l'édition de ton ID via la commande :

      UPDATE ma_table SET id = 1 WHERE id = 4;

      Par contre, dès que tu rajouteras une ligne l'ID continuera à 5, 6...

      Gadaa

      • Partager sur Facebook
      • Partager sur Twitter

      Impossible de se connecter

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown