IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Suppression de plusieurs images


Sujet :

jQuery

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2017
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2017
    Messages : 78
    Points : 36
    Points
    36
    Par défaut Suppression de plusieurs images
    Bonjour,
    Je ne sais pas si je suis dans la bonne section, je tente..
    Je voudrais avoir votre avis sur mon code, car j'ai un soucis au moment de la suppression de plusieurs images, je vous explique.
    J'ai un tableau sur ma page, avec le nom du fichier, un bouton supprimer et la possibilité de selectionner plusieurs lignes.... la suppression des lignes dans la BDD, et supprimer une seule image dans le dossier ne me pose pas de problème, ça marche, le soucis, c'est que par exemple si il y a 5 entrées dans mon tableau, et que je veux supprimer seulement 2 entrées, il me supprime quand même toute les images dans mon dossier.... :-/
    Merci d'avance!
    Voici mon code:

    HTML:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     <table>
           <?php 
           foreach($result as $row) {
           $count = 1;
           ?>
     
             <tr class="row100 head" id="<?= $row['id']; ?>">
               <td class="cell100 column1"><?= $row['id']; ?> - Leçons</td>
               <td class="cell100 column2"><a><?= $row['item_nom']; ?></a></td>
               <td class="cell100 column3"><a class='lien-pdf' target='_blank' href='<?= $row['item_url'] ?>'><i class="fas fa-cloud-upload-alt"></i></a></td>
                <td class="cell100 column4">
                  <label class='checkbox'>
                    <input type='checkbox' name="customer_id[]" class="delete_customer" value="<?= $row['id']; ?>">  
                    <span class='indicator'></span>
                  </label>
             </tr>
             <input type="hidden" class="path" name="path" value="<?= $row['item_url']; ?>">
           <?php
            $count++;
          }
          ?>
        </table>
    JQUERY
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    $(document).ready(function() {
      $("#btn_delete").click(function() {
     
        if(confirm("Etes vous sur de vouloir supprimer cette ligne ?")) {
          var id = [];
          var path = [];
     
          $(':checkbox:checked').each(function(i) {
            id[i] = $(this).val();
          });
     
     
          $('.path').each(function(i) {
            path[i] = $(this).val();
          });
     
          if(id.length === 0) {
            alert("Merci de séléctionner au moins une ligne !");
          } else {
            $.ajax({
     
              url: "delete.php",
              method: "POST",
              data:{id:id,path:path}, 
              success:function(data) {
                for(var i=0; i<id.length; i++) {
                  $("tr#"+id[i]+"").fadeOut("Slow");
                }
     
              }
     
            });
          }
     
        } else {
          return false;
        }
     
      });
    });
    PHP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    $bdd = new PDO ('mysql:host=localhost;dbname=amandineBDD;charset=utf8', 'root', '');
     
     
    if(isset($_POST['id']) AND isset($_POST['path'])) {
     
        $path = $_POST['path'];
     
        foreach ($_POST['id'] as $id) {
            $sql = $bdd->prepare("DELETE FROM add_fichier WHERE id = '$id'");
            $sql->execute(array($id));
        }
     
        foreach($_POST['path'] as $path) {
            unlink($path);
        }
    }
    ?>

  2. #2
    Membre averti
    Avatar de Sparky95
    Homme Profil pro
    Full Stack (web) developer
    Inscrit en
    Décembre 2016
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Full Stack (web) developer
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2016
    Messages : 379
    Points : 358
    Points
    358
    Par défaut
    Pourquoi ne pas "débugger" => tu mets des echo/console.log un peu partout et tu regardes les résultats pour voir si c'est bien ce que tu veux?

    à priori je dirais que le soucis viendrait de la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $('.path').each(function(i) {
      path[i] = $(this).val();
    });
    Dans ta partie HTML ne ne comprends pas trop ce que tu fais avec $count

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- IMPORTANT :
    • APPRENDS à mettre des COMMENTAIRES dans tes codes.
    • APPRENDS à faire des CORRECTEMENT des requêtes préparées !


    2-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
           $('.path').each(function(i) {
            path[i] = $(this).val();
          });
    Normal : tu récupères TOUS les "path" du tableau.

    Ta méthode n'est pas bonne.
    chaque image est associée à une ligne, donc à un id.

    • En JS, tu n'as besoin de récupérer QUE les id des lignes cochées.
    • Dans le fichier PHP, grâce à cet id, tu récupères le "path" de l'image via une requête SQL.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    $bdd = new PDO ('mysql:host=localhost;dbname=amandineBDD;charset=utf8', 'root', '');
     
    if( !empty($_POST['id']) && is_array($_POST['id']) ) // on attend un array
    {
    	// PREPARATION des requetes (AVANT le foreach)
    	$sql_select = $bdd->prepare( "SELECT path FROM add_fichier WHERE id = :id" );
    	$sql_delete = $bdd->prepare( "DELETE FROM add_fichier WHERE id = :id" );
     
    	foreach ($_POST['id'] as $id)
    	{
    		// 1- récupération du path dans la bdd, pour cet id
    		$sql_select->execute(array(':id'=>$id));
    		$row = $sql_select->fetch();
    		$path = $row['path'];
     
    		// 2- suppression de la ligne dans la bdd
    		$sql_delete->execute(array(':id'=>$id));
     
    		// 3- suppression physique de l'image
    		@unlink($path);	// @ (évite un warning au cas où l'image n'existe pas : ATTENTION : MAUVAISE PRATIQUE !! mais bon...)
    	}
    }
    Dernière modification par Invité ; 29/08/2019 à 14h27.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2017
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2017
    Messages : 78
    Points : 36
    Points
    36
    Par défaut
    Génial ça marche merci beaucoup !

    Par contre est ce qu'il y a vraiment une différence à utiliser:

    id = ? ET id = :id

    Car les deux solutions marchent, mais des fois je vois utiliser les deux manières, et du coup je me demandais si il y a vraiment une des deux solutions meilleurs que l'autre

  5. #5
    Invité
    Invité(e)
    Par défaut

    • id = ? -> placeholder anonyme ("marqueurs")
    • id = :id -> placeholder nommé ("paramètres nommés")

    Perso, je préfère nommer les placeholders.
    Car avec les placeholders anonymes, on doit faire attention à l'ordre dans lequel on les déclare au moment de l'exécution.

    C'est un choix personnel à faire.

Discussions similaires

  1. Changer plusieurs images d'un coup
    Par YanK dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 18/07/2005, 17h33
  2. suppression sur plusieurs tables
    Par Jean-Matt dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/06/2005, 11h46
  3. [ImageMagick] Générer une image à partir de plusieurs images ?
    Par fichtre! dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 16/02/2005, 15h32
  4. [DirectDraw7] Affichage de plusieurs image bmp
    Par SteelBox dans le forum DirectX
    Réponses: 3
    Dernier message: 24/04/2004, 19h00
  5. Economie de mémoire pour plusieur images avec la même source
    Par neness dans le forum Composants VCL
    Réponses: 5
    Dernier message: 18/01/2004, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo