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:

  <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

$(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

<?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);
    }
}
?>

1 réponse


Bonjour,

À première vu je dirais que ton problème vient du fait que "path" n'est pas un tableau, il faut que tu ajoute des crochets à l'attribut name comme tu a fait pour "customer_id".