Bonjour,
Je dois effectuer un tableau avec possibilité de suppression a l'aide de requete SQL, mais dans min html qui affiche le tableau quand je clique sur mon bouton "supprimer" cela m'affiche l'erreur suivante "Warning: Invalid argument supplied for foreach()". J'ai vu sur certains forum que c'etait par rapport à des array et object mais je n'arrive pas à l'appliquer pour mon cas.

Mon code de ma list qui affiche la loste avec le foreach
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Liste des Musique</title>
  <style>
      table{
          border: 2px solid black;
          border-collapse: collapse;
          width: 800px;
      }
      th, td{
          border: 1px solid black;
          padding: 2px 5px;
      }
      th{
          background-color: #ccc;
      }
      td.desc{
          width: 52%;
      }
  </style>
</head>
<body>

    <h1>Les musiques</h1>

    <table>
        <tr><th>Id</th><th>Musique</th><th>Nom</th><th>Année</th><th>Suppression</th></tr>



      <?php foreach($musiques as $musique): ?>
            <tr>
                <td><?php echo $musique['id']?></td>
                <td><?php echo $musique['Nom_Musique']?></td>
                <td><?php echo $musique['Auteur_Musique']?></td>
                <td><?php echo $musique['Annee_Musique']?></td>
                <td>
                  <form action="../delete/index.php" method="post">

                    <input type="hidden" name="Nom_Musique" value="<?php echo $musique['Nom_Musique'];?>">
                    <input type="submit" value="Supprimer">

                  </form>
                </td>

            </tr>

        <?php endforeach; ?>




    </table>

    <p>
        <a href="../add?add">Ajoutez votre musique</a>
    </p>

  <p>
      <a href="../formulaire/logout.php"> Logout </a>
  </p>
</body>
</html>


et le code controleur pour delete

<?php

  include "../include/db_inc.php";

if(isset($_POST['id'])){
  $id = $_POST['id'];
 $musiques=musiques::findAll();

  try{
    $sql = 'DELETE FROM musique WHERE id=:id';
  	$s = $pdo->prepare($sql);
    $s->bindValue(':id', $id);
  	$s->execute();
  }

    catch(PDOException $e){
    	$error = "Erreur lors de la suppression d'une recette:" . $e->getMessage();
    	include 'error.html.php';
    	exit();
    }


}
header("location:../list/list.html.php");



 ?>



N'hesitez pas à me demander plus d'info pour m'aider car je suis vraiment perdu

Merci d'avance
Modifié par Luka (28 May 2021 - 11:59)
Modérateur
Salut !

Ta liste s'affiche avant de cliquer sur supprimer ? Il y a bien quelque chose dans $musiques ? n'hésite pas a placer des print pour débuguer.
<pre><?php print_r ($musiques); ?></pre>


Et sinon si tu clique sur supprimer et que ca supprime tout c'est pas normal que $musiques soit vide et fasse planter le foreach ?
J'ai réussi à régler le problème en changeant un header location dans mon fichier delete

Oui ma liste s'affichait avant que j'appuie sur le bouton supprimer.
Dans mon $musiques -> j'ai un $result->fetchall() donc il n'est pas vide
Quand j'appuyai sur supprimer ca m'affichait l'erreur et les titres du tableau mais pas le tableau


Cependant le problème revient car je fais un système pour s'identifier et une fois connecté j'aimerais rediriger directement vers la page avec le tableau mais cela me raffiche la même erreur avec le foreach

Merci de votre réponse