Se connecter

Informatique

Programmation

Sujet : J'ai supprimé toutes les lignes de ma table dans ma Base De Données PhpMyAdmin
1
JusdEauRange26
Niveau 6
01 février 2023 à 23:39:18

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 ?

Magrozz
Niveau 7
02 février 2023 à 04:10:00

https://stackoverflow.com/questions/3019698/reset-id-autoincrement-phpmyadmin

Marav
Niveau 28
02 février 2023 à 12:19:18

C'est le comportement normal d'un auto-increment. Pour répondre à ton besoin tu refais ce que tu viens de faire tout en rétablissant ton auto-increment à zéro dans l'onglet "Opérations" -> Options pour cette Table dans phpMyAdmin.

Evidemment c'est la façon la plus simple en utilisant le GUI phpMyAdmin mais tu peux le faire directement via SQL, phpMyAdmin en soit ne va te proposer que la requête SQL correspondante à ton besoin que tu peux d'ailleurs vérifier avant l’exécution. ( c'est un bon moyen d'apprendre le SQL grâce à l'outil )

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

Montre ton code, j'ai une petite idée du pourquoi ça ne fonctionne pas mais il faudrait nous donner plus de ressources pour qu'on te réponde au mieux.
Déjà essaye les solutions au dessus :oui:

JusdEauRange26
Niveau 6
02 février 2023 à 17:22:58

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;

        //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(); et delete l.56
    }

    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>
Marav
Niveau 28
04 février 2023 à 00:15:05

Tu manipules un tableau retourné par fetch, il me semble que PHP "aplati" ta variable $idUser lorsque celle ci équivaut à 1.
Vu que tu as supprimé tes données dans ta DB sans reset l'auto-increment, PHP gueule puisqu'il se retrouve avec des $id > à 1.
Je suis plus trop sûr de ce comportement mais pour avoir le cœur net, fait un coup de var_dump après ton getUser dans index.php.

Dans tous les cas, accède à ta variable via $idUser['id'] et envoie la directement sur ton modèle.
Dis moi si t'as pu résoudre ton soucis.

MisterPhanax
Niveau 9
12 février 2023 à 11:25:10

Change la valeur de Auto-incrément à 1 dans Structure. Puis ensuite vérifie si getID renvoie bien une valeur d'ID en l'affichant :play:

1
Sujet : J'ai supprimé toutes les lignes de ma table dans ma Base De Données PhpMyAdmin
   Retour haut de page
Consulter la version web de cette page