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

Résolu/Fermé
Max0123456 Messages postés 97 Date d'inscription dimanche 24 octobre 2021 Statut Membre Dernière intervention 2 février 2023 - 1 févr. 2023 à 23:49
Max0123456 Messages postés 97 Date d'inscription dimanche 24 octobre 2021 Statut Membre Dernière intervention 2 février 2023 - 2 févr. 2023 à 22:05

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 ?

Android / Chrome 91.0.4472.120

A voir également:

1 réponse

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
1 févr. 2023 à 23:55

Bonjour

Déjà, tu peux aller changer les id à la main dans ta base de données. Ça devrait te permettre de te reconnecter.

Pour ce qui concerne la remise à zéro du compteur tu peux le faire également via par exemple PHPmyadmin. Dans les options de la table tu peux définir la valeur de l'auto-increment.

Ou sinon, vai une requête du genre

alter table tatable auto_increment=1;

0
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 1 556
2 févr. 2023 à 10:05

bonjour,

Idéalement, ton programme devrait bien fonctionner même si les id ne commencent pas à 1.

0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717 > yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024
2 févr. 2023 à 10:13

On peut supposer qu'il a une table de rôles permettant de définir les droits de chaque utilisateur et donc que les informations stockées dans cette table ne correspondent plus aux id des utilisateurs.

Ou alors, il a mal ressaisi les informations d'identifiant login ou mot de passe. 

Mais bon, vu qu'on ne sait rien ni de sa structure de table ni du code utilisé ça ne reste que des suppositions.

1
Max0123456 Messages postés 97 Date d'inscription dimanche 24 octobre 2021 Statut Membre Dernière intervention 2 février 2023 > yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024
2 févr. 2023 à 17:53

oui exactement normalement ça devrait marcher peut importe l'id. Il y a une fonction qui récupère l'id de l'email entré et une autre fonction qui récupère l'user correspondant à l'id si le mot de passe est correct.

0
Max0123456 Messages postés 97 Date d'inscription dimanche 24 octobre 2021 Statut Membre Dernière intervention 2 février 2023 > jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024
Modifié le 2 févr. 2023 à 18:02

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>

j'ai fait ALTER TABLE users AUTO_INCREMENT = 1; mais l'id est le meme

0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717 > Max0123456 Messages postés 97 Date d'inscription dimanche 24 octobre 2021 Statut Membre Dernière intervention 2 février 2023
2 févr. 2023 à 18:05

Par contre, quel est l'intéret de chercher l' ID en fonction du mail ... puis le user en fonction de l' ID ??

Autant ne faire qu'une recherche par mail pour récupérer le user ....

Ensuite, si ton souci persiste .. cela vient certainement des mots de passes .

Quand tu as réinséré tes lignes dans ta base .. les mots de passe étaient bien cryptés ( hashé pour être précis ) ????

Puisque pour la connexion tu fais un password_verify ... il faut hasher le password avec un password_hash

sinon... normal que ça ne marche pas..

0