Auto suppression de compte

Fermé
Janyduchemin - 6 mai 2021 à 02:07
 Janyduchemin - 8 mai 2021 à 17:27
Bonjour,
plus j'avance et encore des problèmes. je veux cette fois permettre à
l'utilisateur de suprimer son compte quand il le souhait. après avoir écri le code du fichier delete.php j'ai les erreurs suivantes:

Notice: Trying to get property 'id' of non-object in C:\wamp\www\ndameyong\delete.php on line 14

Notice: Trying to get property 'photo' of non-object in C:\wamp\www\ndameyong\delete.php on line 14

Notice: Trying to get property 'id' of non-object in C:\wamp\www\ndameyong\delete.php on line 16

Warning: unlink(.\.): Is a directory in C:\wamp\www\ndameyong\delete.php on line 20

Warning: unlink(.\..): Is a directory in C:\wamp\www\ndameyong\delete.php on line 20

Notice: Trying to get property 'photo' of non-object in C:\wamp\www\ndameyong\delete.php on line 24

Fatal error: Uncaught Error: Call to undefined method Db::prepare() in C:\wamp\www\ndameyong\delete.php:29 Stack trace: #0 {main} thrown in C:\wamp\www\ndameyong\delete.php on line 29
j'aimerais avant tout comprendre ce que ça signifie.
voilà les différents code

Db.php
 
<?php
 
/**
* Gestion de la base de données
*/
class Db{
 
    private $host=HOST;
    private $name=DBNAME;
    private $user=USER;
    private $pass=PWD;
 
    private $connexion;
 
    function __construct($host=null,$name=null,$user=null,$pass=null){
 
        if($host != null){
            $this->host = $host;
            $this->name = $name;
            $this->user = $user;
            $this->pass = $pass;
        }
 
        try{
 
            $this->connexion = new PDO('mysql:host='.$this->host.';dbname='.$this->name,
                $this->user,$this->pass,array(
                    1002 =>'SET NAMES UTF8',
                    PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
 
 
 
                    ));
            $this->connexion->exec('SET NAMES utf8');
//PDO::MYSQL_ATTR_INIT_COMMAND
        }catch (PDOException $e){
            //echo 'Erreur : Impossible de se connecter  à la BD !';die();
            echo $e->getMessage();
        }
    }
 
    /* requete */
 
    public function query($sql , $data=array()){
        $req = $this->connexion->prepare($sql);
        $req->execute($data);
        return $req->fetchAll(PDO::FETCH_OBJ);
    }
 
    public function tquery($sql , $data=array()){
        $req = $this->connexion->prepare($sql);
        $req->execute($data);
        return $req->fetchAll(PDO::FETCH_ASSOC);
    }
 
 
    public function insert($sql , $data=array()){
        $req = $this->connexion->prepare($sql);
        $nb=$req->execute($data);
        return $nb;
    }
 
    public function uniqueEmail($email){
        $req = $this->connexion->prepare('SELECT count(*) as nbre from users WHERE email=:email limit 1');
        $req->execute(array('email'=>$email));
 
        $reponse = $req->fetchAll(PDO::FETCH_ASSOC);
        return $reponse[0]['nbre'];
 
    }
 
}


profil.php
<?php require 'includes/includes.php';

if(!Auth::islog($DB)){
    header('location:index.php');
    exit(); 
    }
 
$user = $_SESSION['user'];
if(!empty($_POST)){
    $validate = true;
 
    // valider l'email
    if(empty($_POST['email'])){
        $validate = false;
        $erreur_email = 'Le champ email est requis !';
      }else
          if(!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)){
            $validate = false;
                $erreur_email = "Veuillez entrer une adresse email valide.";
          }
          // VÉRIFIER LE PASSWORD
    if(empty($_POST['password'])){
      $password = $_SESSION['user']['password'];
    }elseif(empty($_POST['confirm_password'])){
        $erreur_password = "Confirmer votre mot de passe";
        $validate =false;
      }elseif ($_POST['confirm_password'] != $_POST['password']){
        $erreur_password = "Le mot de passe et le mot de passe confirmation sont différents.";
        $validate =false;
      }else{
        $password = User::hashPassword($_POST['password']);
      }
 
      if(!empty($_FILES['photo']['name']))
    {
      $photo = $_FILES['photo'];
 
      $filePath = 'photos/'.$user->id;
      $thumbPath = $filePath.'/thumbnail';
 
 
      @mkdir($filePath, 0777, true);
 
      @mkdir($filePath.'/thumbnail', 0777, true);
 
      $allowedExt = ['jpeg', 'jpg', 'png'];
 
      $ext = strtolower(pathinfo($photo['name'], PATHINFO_EXTENSION));
 
      if(!in_array($ext, $allowedExt)){
        array_push($errors, 'Le fichier n\'est pas autorisé.');
      }
      else{
        $infos = getimagesize($photo['tmp_name']);
 
        $width = $infos[0];
 
        $height = $infos[1];
 
        if($width < 200 || $height < 200){
          array_push($errors, 'L\'image doit faire au moins 200px de large et 200px de hauteur.');
        }
        else{
          $filename = uniqid($user->id, true).'.'.$ext;
          move_uploaded_file($photo['tmp_name'], $filePath.'/'.$filename);
        }
      }
    }
 
    if($validate){
       $data = array(
            'id'=>$_SESSION['user']['id'],
            'nom_prenom' =>$_POST['nom_prenom'],
            'ville'   =>$_POST['ville'],
            'email'   =>$_POST['email'],  
            'password'=>$password,
              'photo' =>$filePath.'/'.$filename
            );
      
        $rep = $DB->insert('UPDATE users SET nom_prenom=:nom_prenom,ville=:ville,photo=:photo,email=:email,password=:password WHERE id=:id',$data);
 
        if(!empty($oldFilePath) && !empty($filename)){
        @unlink($oldFilePath);
        @unlink($oldThumbFilePath);
       }
 
        if($rep){
            $_SESSION['message'] = "Votre profil a été mis à jour avec succès .";
            $_SESSION['user'] = array_merge($_SESSION['user'],$data);
            header('location:profil.php');
            exit();
        }else{
            $_SESSION['erreur'] = "Un problème est survenu lors de la sauvegarde !.";
        }
    }else{
        $_SESSION['erreur'] = "Veuillez corriger les érreurs indiquées ci dessous .";
    }
     
}
 
$orders  = $DB->query("SELECT * from orders WHERE user_id=:id",array('id'=>$_SESSION['user']['id']));
?>
 
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Votre Espace Profil || Ndameyong - L'Ecole des Langues Camerounaises</title>
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <!-- animate css-->
    <link rel="stylesheet" href="fonts/material-icon/css/material-design-iconic-font.min.css">
 
    <!-- Main css -->
    <link rel="stylesheet" href="css/profil.css">
    <link rel="stylesheet" href="css/admin_style.css">
    <link rel="stylesheet" href="css/admin_style2.css">
    <link rel="stylesheet" href="css/admin_main.css">
     
    <link rel="icon" type="image/png" sizes="16x16" href="favicon/favicon-16x16.png">
</head>
 
<body>
    <section class="wel-t-band">
        <div id="top-header">
               
         
              <ul class="header-links pull-left">
                  <li><a href="index.php"><i class="fa fa-heart"></i> Acceuil Ndameyong</a></li>
                  <li><a href="presentation.php"><i class="fa fa-heart"></i> Présentation du site</a></li>
                  <li><a href="http:/ndameyong/nkili/index.php"><i class="fa fa-heart"></i> La Boutique</a></li>              
              </ul>
               <ul class="header-links pull-right">
                  <?php if (isset($_SESSION['user'])): ?>
                  <?php if (Auth::isadmin($DB)): ?>
                  <li><a href="admin/">Administration</a></li>
                  <?php endif ?>
                  <li><a href="login.php?logout">Déconnexion</a></li>
                  <?php else: ?>
                  <li>|| <a href="signup.php">Nouveau membre</a> ||</li>
                  <li>|| <a href="login.php">Connexion</a> ||
                  </li>
                  <li>|| <a href="recuperation.php">Mot de passe oublié</a> ||
                  </li>
                   
                  <?php endif?>
              </ul>
               
        </div>
    </section>
 
 <?php include('messages.php');?>

<!-- Message dans la session -->
  <?php if (isset($_SESSION['message'])): ?>
    <div class="message"> <?php echo $_SESSION['message']; ?></div>
    <?php unset( $_SESSION['message']); ?>
  <?php endif ?>
   <?php if (isset($_SESSION['erreur'])): ?>
    <div class="errorMessage"> <?php echo $_SESSION['erreur']; ?></div>
    <?php unset( $_SESSION['erreur']); ?>
  <?php endif ?>
 
 
 
    <div class="main">
        <div class="container" style="margin-top:-160px">
            <h2>Modifier vos informations ici</h2>
 
 <?php include('messages.php');?>
 
            <form action ="profil.php" method="POST" id="signup-form" class="signup-form" enctype="multipart/form-data">
                <h3>
                    Votre Identité
                </h3>
 
                 <fieldset>
                    <div class="form-row">

                        <div class="form-file">
                            <input type="file" class="inputfile" name="your_picture" id="your_picture"  onchange="readURL(this);" data-multiple-caption="{count} files selected" multiple />
                           
                            <label for="your_picture">
                                <figure>
                                    <img src="images/your-picture.png" alt="" class="your_picture_image">
                                </figure>
                                
                                <button type="submit" class="btn btn-primary">Envoyer</button>
                            </label>
                        </div>
 
                   <?php if(!empty($user->photo)):?>
                        <a href="photos/<?=$user->id.'/'.$user->photo;?>">
                            <img src="photos/<?=$user->id.'/'.$user->photo;?>" alt="" width="200" height="200">
                         </a>
                    <?php endif;?>


 <a style="float: right;" onclick="return confirm('Confirmez la suppresion de votre comtpe ?');" href="delete.php" class="btn btn-danger delete">Supprimer mon compte</a>
                        <div class="form-group-flex">
                             <div class="form-group">
                                <input type="text" name="nom_prenom" value="<?php echo isset($_POST['nom_prenom'])?$_POST['nom_prenom']:$_SESSION['user']['nom_prenom']; ?>" placeholder="Nom_Prenom" />
                            </div>
                                <?php if (!empty($erreur_nom_prenom)): ?>
                                    <div class="error"><?php echo $erreur_nom_prenom; ?></div>
                                <?php endif ?>
                        </div>
                    </div>
                </fieldset>
                <h3>
                    Votre Mot de Passe
                </h3>
                <fieldset>
                    <div class="form-row">              
                        <div class="form-group-flex">
                            <div class="form-group">
                               <input type="text" name="password" placeholder="Votre Mot de Passe" />
                            </div>
                            <?php if (!empty($erreur_password)): ?>
                                         <div class="error"><?php echo $erreur_password; ?></div>
                                <?php endif ?>
                            <div class="form-group">
                                <input type="text" name="confirm_password" placeholder="Confirmez Mot de Passe" />
                            </div>
                            <?php if (!empty($erreur_confirm_password)): ?>
                                         <div class="error"><?php echo $erreur_confirm_password; ?></div>
                            <?php endif ?>
                            
                        </div>
                    </div>
                </fieldset>
 
                <h3>
                    Votre Adresse
                </h3>
              <fieldset>
                    <div class="form-row">
                     <div class="form-file">
                            <input type="file" class="inputfile" name="your_picture" id="your_picture"  onchange="readURL(this);" data-multiple-caption="{count} files selected" multiple />
                             
                        </div>                   
                        <div class="form-group-flex">
                             
                            <div class="form-group">
                                <input type="text" name="ville" value="<?php echo isset($_POST['ville'])?$_POST['ville']:$_SESSION['user']['ville']; ?>" placeholder="Ville de Résidence" />
                            </div>
                            <div class="form-group">
                                <input type="email" name="email" value="<?php echo isset($_POST['email'])?$_POST['email']:$_SESSION['user']['email']; ?>" id="email" placeholder="Email" />
                            </div>
                        </div>
                    </div>
                </fieldset>
            </form>
                  <h2 style="margin-top:-100px">Mes achats : </h2 >
      
                                                        <table>
                                                          <thead>
                                                              <tr>
                                                                  <th>N° commande</th>
                                                                  <th>Date</th>
                                                                  <th>Montant</th>
                                                                  <th>Txn_id</th>
                                                                  <th>Actions</th>
                                                              </tr>
                                                          </thead>
                                                          <tbody>
                                                              <?php foreach ($orders as $order): ?>
                                                                <tr>
                                                                  <td><?php echo $order->id ?></td>
                                                                  <td><?php echo $order->created; ?></td>
                                                                  <td><?php echo $order->amount; ?></td>
                                                                  <td><?php echo $order->txn_id; ?></td>
                                                                  <td>
                                                                    <a href="editOrder.php?id=<?php echo $order->id; ?>"  class="edit"></a>
                                                                    <a href="pdfOrder.php?id=<?php echo $order->id; ?>"  class="pdf"></a>
                                                                  </td>
                                                              </tr>
                                                              <?php endforeach ?>
                                                          </tbody>
                                                        </table>
 
 
 
        </div>
 
    </div>
 
    <!-- JS -->
    <script src="vendor/jquery/jquery.min.js"></script>
    <script src="vendor/jquery-validation/dist/jquery.validate.min.js"></script>
    <script src="vendor/jquery-validation/dist/additional-methods.min.js"></script>
    <script src="vendor/jquery-steps/jquery.steps.min.js"></script>
    <script src="js/profil.js"></script>
</body>
</html>


delete.php
<?php require 'includes/includes.php';

if(!Auth::islog($DB)){
    header('location:index.php');
    exit(); 
    }

if(empty($_SESSION['user'])){
  header('Location: login.php');
}

$user = $_SESSION['user'];

$filePath = 'photos/'.$user->id.'/'.$user->photo;

$dir = new DirectoryIterator(dirname('photos/'.$user->id));

foreach($dir as $fileinfo){
	if($fileinfo->isDot()){
		unlink($fileinfo->getPathname());
	}
}

if($user->photo && file_exists($filePath) && is_file($filePath)){
	unlink($filePath);
	rmdir('photos/'.$user->id);
}

$req = $DB->prepare('DELETE FROM users WHERE id=:id');
$req->bindValue(':id', $user->id, PDO::PARAM_INT);
$req->execute();

unset($_SESSION['user']);
session_destroy();
header('Location: index.php');
A voir également:

11 réponses

jordane45 Messages postés 38288 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 novembre 2024 4 703
6 mai 2021 à 07:42
Bonjour
$user est un array.. pas un objet.... d'où le message d'erreur...

0
Janyduchemin
6 mai 2021 à 14:03
Bjr,
J'ai utilisé $user avec un array [] dans profil.php
mais je ne sais pas comment redeclarer ce tableau dans le fichier delete.php voilà pourquoi j'ai utilisé cette écriture en croyant que ça allait fonctionner...mais rien du coup je suis buté
Du moins je vais essayer de suivre votre conseil.
Je vous tiendrai informé. Merci
0
jordane45 Messages postés 38288 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 novembre 2024 4 703 > Janyduchemin
6 mai 2021 à 14:41
$user = $_SESSION['user'];

$filePath = 'photos/'.$user{"id"].'/'.$user['photo'];

$dir = new DirectoryIterator(dirname('photos/'.$user['id']));
0
Bonsoir,

Encore merci, je comprends mieux la difference entre un objet et un tableau. Je me disais qu'on pouvait utiliser les méthodes simultanément mais non...j'ai utiliser les tableaux comme tu me l'as fait remarqué...mais il reste trois erreur et je voudrais encore des explications:


Warning: unlink(photos\.): Is a directory in C:\wamp\www\ndameyong\delete.php on line 20

Warning: unlink(photos\..): Is a directory in C:\wamp\www\ndameyong\delete.php on line 20

Fatal error: Uncaught Error: Call to undefined method Db::prepare() in C:\wamp\www\ndameyong\delete.php:29 Stack trace: #0 {main} thrown in C:\wamp\www\ndameyong\delete.php on line 29

Bien de choses à vous
0
jordane45 Messages postés 38288 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 novembre 2024 4 703
7 mai 2021 à 01:03
Ligne 19
if($fileinfo->isDot()){

Je pense que tu as oublié le ! dans le if.
Les dossiers . Ou .. ne peuvent pas être supprimés.

Pour l'autre erreur... Sans voir ton code modifié impossible de te répondre
0
Janyduchemin > jordane45 Messages postés 38288 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 novembre 2024
7 mai 2021 à 02:41
Bonjour,
Voilà le code connexion à la bdd
Db.php
 
<?php
 
/**
* Gestion de la base de données
*/
class Db{
 
    private $host=HOST;
    private $name=DBNAME;
    private $user=USER;
    private $pass=PWD;
 
    private $connexion;
 
    function __construct($host=null,$name=null,$user=null,$pass=null){
 
        if($host != null){
            $this->host = $host;
            $this->name = $name;
            $this->user = $user;
            $this->pass = $pass;
        }
 
        try{
 
            $this->connexion = new PDO('mysql:host='.$this->host.';dbname='.$this->name,
                $this->user,$this->pass,array(
                    1002 =>'SET NAMES UTF8',
                    PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
 
 
 
                    ));
            $this->connexion->exec('SET NAMES utf8');
//PDO::MYSQL_ATTR_INIT_COMMAND
        }catch (PDOException $e){
            //echo 'Erreur : Impossible de se connecter  à la BD !';die();
            echo $e->getMessage();
        }
    }
 
    /* requete */
 
    public function query($sql , $data=array()){
        $req = $this->connexion->prepare($sql);
        $req->execute($data);
        return $req->fetchAll(PDO::FETCH_OBJ);
    }
 
    public function tquery($sql , $data=array()){
        $req = $this->connexion->prepare($sql);
        $req->execute($data);
        return $req->fetchAll(PDO::FETCH_ASSOC);
    }
 
 
    public function insert($sql , $data=array()){
        $req = $this->connexion->prepare($sql);
        $nb=$req->execute($data);
        return $nb;
    }
 
    public function uniqueEmail($email){
        $req = $this->connexion->prepare('SELECT count(*) as nbre from users WHERE email=:email limit 1');
        $req->execute(array('email'=>$email));
 
        $reponse = $req->fetchAll(PDO::FETCH_ASSOC);
        return $reponse[0]['nbre'];
 
    }
 
}


0
jordane45 Messages postés 38288 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 novembre 2024 4 703 > Janyduchemin
7 mai 2021 à 07:45
C'est le fichier delete qui nous intéresse.
0
janyduchemin
7 mai 2021 à 09:21
Bonjour monsieur Jordane,
voila mon fichier delete.php

comme erreur:
Fatal error: Uncaught Error: Call to undefined method Db::prepare() in C:\wamp\www\ndameyong\delete.php:29 Stack trace: #0 {main} thrown in C:\wamp\www\ndameyong\delete.php on line 29

<?php require 'includes/includes.php';

if(!Auth::islog($DB)){
    header('location:index.php');
    exit(); 
    }

if(empty($_SESSION['user'])){
  header('Location: login.php');
}

$user = $_SESSION['user'];

$filePath = 'photos/'.$user["id"].'/'.$user['photo'];

$dir = new DirectoryIterator(dirname('photos/'.$user['id']));

foreach($dir as $fileinfo){
	if(!$fileinfo->isDot()){
		unlink($fileinfo->getPathname());
	}
}

if($user['photo'] && file_exists($filePath) && is_file($filePath)){
	unlink($filePath);
	rmdir('photos/'.$user->id);
}

$req = $DB->prepare('DELETE FROM users WHERE id=:id');
$req->bindValue(':id', $user->id, PDO::PARAM_INT);
$req->execute();

unset($_SESSION['user']);
session_destroy();
header('Location: index.php');
0
jordane45 Messages postés 38288 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 novembre 2024 4 703
7 mai 2021 à 10:55
Ben oui.
Il faut que tu utilises la classe db et non pas que tu écrives ta requête directement dans le fichier...
0
jordane45 Messages postés 38288 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 novembre 2024 4 703 > jordane45 Messages postés 38288 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 novembre 2024
7 mai 2021 à 11:27
Dans ta classe Db

/**
Pour les requêtes de type DELETE ou UPDATE
*/
public function exec($sql , $data=array()){
  try{
    $req = $this->connexion->prepare($sql);
    $req->execute($data);
    return $req->rowCount(); // Retourne le nombre de lignes impactées par la reuqête
  }catch(Exception $e){
    echo 'Erreur : ' . $e->getMessage(); // en cas d'erreur dans la requête !
  }
}



Dans le fichier delete.php
$sql = 'DELETE FROM users WHERE id=:id';
$data = [':id'=>$id];
$del = $DB->exec($sql , $data) ;

Bien entendu, il faut que tu aies instancié la classe DB au début de ton script si ce n'est pas déjà fait...
0
janyduchemin
7 mai 2021 à 12:28
Salut,
Ma classe Db se trouve le fichier Db.php
<?php
 
/**
* Gestion de la base de données
*/
class Db{
     
    private $host=HOST;
    private $name=DBNAME;
    private $user=USER;
    private $pass=PWD;
 
    private $connexion;
 
    function __construct($host=null,$name=null,$user=null,$pass=null){
         
        if($host != null){
            $this->host = $host;
            $this->name = $name;
            $this->user = $user;
            $this->pass = $pass;
        }
 
        try{
 
            $this->connexion = new PDO('mysql:host='.$this->host.';dbname='.$this->name,
                $this->user,$this->pass,array(
                    1002 =>'SET NAMES UTF8',
                    PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING


              
                    ));
            $this->connexion->exec('SET NAMES utf8');
//PDO::MYSQL_ATTR_INIT_COMMAND
        }catch (PDOException $e){
            //echo 'Erreur : Impossible de se connecter  à la BD !';die();
            echo $e->getMessage();
        }
    }
 
    /* requete */
 
    public function query($sql , $data=array()){
        $req = $this->connexion->prepare($sql);
        $req->execute($data);
        return $req->fetchAll(PDO::FETCH_OBJ);
    }
 
    public function tquery($sql , $data=array()){
        $req = $this->connexion->prepare($sql);
        $req->execute($data);
        return $req->fetchAll(PDO::FETCH_ASSOC);
    }
 
 
    public function insert($sql , $data=array()){
        $req = $this->connexion->prepare($sql);
        $nb=$req->execute($data);
        return $nb;
    }
 
    public function uniqueEmail($email){
        $req = $this->connexion->prepare('SELECT count(*) as nbre from users WHERE email=:email limit 1');
        $req->execute(array('email'=>$email));
 
        $reponse = $req->fetchAll(PDO::FETCH_ASSOC);
        return $reponse[0]['nbre'];
 
    }


    public function exec($sql , $data=array()){
      try{
        $req = $this->connexion->prepare($sql);
        $req->execute($data);
        return $req->rowCount(); // Retourne le nombre de lignes impactées par la reuqête
      }catch(Exception $e){
        echo 'Erreur : ' . $e->getMessage(); // en cas d'erreur dans la requête !
      }
    }

}


il vient de subir de légères modifications. c'est ce que j'inclue dans toutes mes pages pour les connexion et les classes...je ne comprends pas comment l'instancier de nouveau.
Après avoir modifier delete.php j'ai eu ces erreurs:

Notice: Undefined variable: id in C:\wamp\www\ndameyong\delete.php on line 30

Fatal error: Uncaught Error: Call to undefined method Db::execute() in C:\wamp\www\ndameyong\delete.php:31 Stack trace: #0 {main} thrown in C:\wamp\www\ndameyong\delete.php on line 31

en ligne 30 j'ai changé $id en $user car j'ai pas travaillé avec $id; et il ne reste que cette erreur

le delete.php modifié
<?php require 'includes/includes.php';

if(!Auth::islog($DB)){
    header('location:index.php');
    exit(); 
    }

if(empty($_SESSION['user'])){
  header('Location: login.php');
}

$user = $_SESSION['user'];

$filePath = 'photos/'.$user["id"].'/'.$user['photo'];

$dir = new DirectoryIterator(dirname('photos/'.$user['id']));

foreach($dir as $fileinfo){
	if(!$fileinfo->isDot()){
		unlink($fileinfo->getPathname());
	}
}

if($user['photo'] && file_exists($filePath) && is_file($filePath)){
	unlink($filePath);
	rmdir('photos/'.$user->id);
}

$sql = 'DELETE FROM users WHERE id=:id';
$data = [':id'=>$user];
$del = $DB->execute($sql , $data) ;


unset($_SESSION['user']);
session_destroy();
header('Location: index.php');
0
jordane45 Messages postés 38288 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 novembre 2024 4 703
Modifié le 7 mai 2021 à 12:39
$data = [':id'=>$user['id']];    
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
janyduchemin
7 mai 2021 à 12:47
c'est sans changement...

Fatal error: Uncaught Error: Call to undefined method Db::execute() in C:\wamp\www\ndameyong\delete.php:31 Stack trace: #0 {main} thrown in C:\wamp\www\ndameyong\delete.php on line 31
0
jordane45 Messages postés 38288 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 novembre 2024 4 703
7 mai 2021 à 13:25
Ah oui, la fonction c'est exec et non execute. désolé
0
janyduchemin
7 mai 2021 à 23:33
Bsr
l'erreur est toujours la même (
Fatal error: Uncaught Error: Call to undefined method Db::execute() in C:\wamp\www\ndameyong\delete.php:31 Stack trace: #0 {main} thrown in C:\wamp\www\ndameyong\delete.php on line 31
)
Db.php (public function exec())
   public function exec($sql , $data=array()){
      try{
        $req = $this->connexion->prepare($sql);
        $req->execute($data);
        return $req->rowCount(); // Retourne le nombre de lignes impactées par la reuqête
      }catch(Exception $e){
        echo 'Erreur : ' . $e->getMessage(); // en cas d'erreur dans la requête !
      }
    }

delete.php
$sql = 'DELETE FROM users WHERE id=:id';
$data = [':id'=>$user['id']]; 
$del = $DB->execute($sql , $data) ;
0
jordane45 Messages postés 38288 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 novembre 2024 4 703
8 mai 2021 à 07:57
Tu peux nous montrer ce que tu as dans ton fichier 'includes/includes.php' ?

Car visiblement, ta class DB n'est pas instanciée... ou alors sous un autre nom...
0
janyduchemin
8 mai 2021 à 12:31
bjr
voilà mon fichier includes.php
<?php 
require 'config.php'; 
require_once 'Classes/Db.php';
require_once 'Classes/panier.php';
require_once 'Classes/auth.php';
$DB = new Db();
$panier = new Panier($DB);

// cacher les erreurs pour la production
ini_set('error_reporting',E_ALL);
// afficher les érreurs lors du developpement 
//ini_set('error_reporting', E_ALL);
 ?>
0
jordane45 Messages postés 38288 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 novembre 2024 4 703
8 mai 2021 à 12:41
Ah oui.. mais je t'ai indiqué qu'il fallait changer execute en exec dans le fichier delete.php
$sql = 'DELETE FROM users WHERE id=:id';
$data = [':id'=>$user['id']]; 
$del = $DB->exec($sql , $data) ;
0
janyduchemin
8 mai 2021 à 13:10
Problème résolu....merci infiniment
je vais maintenant mettre en place un système de mot de passe oublié
Merci!
0
jordane45 Messages postés 38288 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 novembre 2024 4 703
8 mai 2021 à 13:19
Par contre, vu que tu sembles avoir prévu de coder des CLASS
pourquoi ne pas mettre le code de suppression dans la class 'Classes/auth.php'; ?
Il semble que cette classe serve à gérer ton user non ?

Et ta fonction uniqueEmail qui se trouve dans ta class Db n'a rien à faire là.
Elle aussi devrait se trouver dans la class auth ..
0
janyduchemin
8 mai 2021 à 13:42
oui la class auth gère les utilisateurs mais je n'ai vraiment pas penser à ça...et je viens de déplacer la fonction uniqueEmail vers la class auth
0
jordane45 Messages postés 38288 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 novembre 2024 4 703
8 mai 2021 à 13:45
Et la le code pour delete aussi ? que tu placeras dans une fonction deleteuser()

du genre
public function deleteuser($id){
   $sql = 'DELETE FROM users WHERE id=:id';
   $data = [':id'=>$id]; 
   return  $DB->exec($sql , $data) ;
}

et que tu appelleras depuis ton fichier delete php comme ceci

$oAuth->deleteuser($user['id']); // $oAuth .. étant à remplacer par l'objet faisant référence à ton instance de ta class oAuth bien entendu...

0
janyduchemin
8 mai 2021 à 14:47
j'ai deux erreus....
Notice: Undefined variable: oAuth in C:\wamp\www\ndameyong\delete.php on line 29

Fatal error: Uncaught Error: Call to a member function deleteuser() on null in C:\wamp\www\ndameyong\delete.php:29 Stack trace: #0 {main} thrown in C:\wamp\www\ndameyong\delete.php on line 29

voila dete.php modifié
<?php require 'includes/includes.php';

if(!Auth::islog($DB)){
    header('location:index.php');
    exit(); 
    }

if(empty($_SESSION['user'])){
  header('Location: login.php');
}

$user = $_SESSION['user'];

$filePath = 'photos/'.$user["id"].'/'.$user['photo'];

$dir = new DirectoryIterator(dirname('photos/'.$user['id']));

foreach($dir as $fileinfo){
	if(!$fileinfo->isDot()){
		unlink($fileinfo->getPathname());
	}
}

if($user['photo'] && file_exists($filePath) && is_file($filePath)){
	unlink($filePath);
	rmdir('photos/'.$user->id);
}

$oAuth->deleteuser($user['id']); // $oAuth .. étant à remplacer par l'objet faisant référence à ton instance de ta class oAuth bien entendu...
$sql = 'DELETE FROM users WHERE id=:id';
$data = [':id'=>$user['id']]; 
$del = $DB->exec($sql , $data) ;


unset($_SESSION['user']);
session_destroy();
header('Location: index.php');


auth.php modifié
<?php 

/**
* Auth
*/
class Auth{
	
	public static function islog($db){
		if(isset($_SESSION['user']) && isset($_SESSION['user']['email'])  && isset($_SESSION['user']['password'])){

			$data =array(
				'email'=>$_SESSION['user']['email'],
				'password'=>$_SESSION['user']['password']
				
				);
			
			$sql = 'SELECT * FROM users WHERE email=:email AND password=:password limit 1';
			$req = $db->tquery($sql,$data);

			if(!empty($req)){
				return true;
			}
		}
		return false;
	}


	public static function hashPassword($pass){

		return sha1(SALT.md5($pass.SALT).sha1(SALT));
	}


	public static function isadmin($db){
		if(isset($_SESSION['user']['role']) && (Auth::hashPassword('admin')  == $_SESSION['user']['role'])){
			return true;
		}
		return false;
	}

  public function uniqueEmail($email){
        $req = $this->connexion->prepare('SELECT count(*) as nbre from users WHERE email=:email limit 1');
        $req->execute(array('email'=>$email));
 
        $reponse = $req->fetchAll(PDO::FETCH_ASSOC);
        return $reponse[0]['nbre'];
 
    }
	public function deleteuser($id){
	   $sql = 'DELETE FROM users WHERE id=:id';
	   $data = [':id'=>$id]; 
	   return  $DB->exec($sql , $data) ;
	}
	
}
0
jordane45 Messages postés 38288 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 novembre 2024 4 703
8 mai 2021 à 15:45
Et bien il faut faire comme pour les autres méthodes de ta classe les rendre static... Il fait rappelle comme pour tes autres fonctions...
Tu comprends un minimum le code que tu écris ou tu ne fais que le copier-coller bêtement ce que tu trouves sur internet ?????
0
Janyduchemin > jordane45 Messages postés 38288 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 novembre 2024
8 mai 2021 à 17:27
Bon après
Copier le code sur internet ?? Non...j'ai suivi une formation en PHP/MySQL j'avoue jsuis pas encore un Expert et cette formation n'a pas fait l'objet d'un approfondissement...j'ai monter moi même mon code superviser par un encadreur...désirant me perfectionner j'ai décidé d'ajouter certaines fonctionnalités que j'ai suivi en formation... voilà je me perd de temps à autre....du moins je reconnais votre apport à mon apprentissage... Merci
0