Se connecter avec
S'enregistrer | Connectez-vous

Problème bouton supprimer dans une boucle While

Dernière réponse : dans Programmation

Bonjour à tous,

Comme le titre l'indique, je rencontre un problème avec un bouton supprimer dans une boucle while.
En effet, j'ai fait un système de boîte de réception dans lequel je récupère les messages envoyés avec leur expéditeur, la date d'envoi... dans un tableau.
Pour cela, j'ai utilisé un While pour que je puisse afficher ces informations pour chaque message reçu.

J'aimerais permettre à l'utilisateur de supprimer les messages qu'il désire, j'ai donc rajouté un bouton supprimer dans chaque ligne du tableau.
Le problème est que lorsque j'essaie, c'est toujours le premier enregistrement de la table qui est supprimé.

Quelqu'un pourrait-il m'éclairer ?

Voici le code :
  1. <?
  2. if (isset($_POST['Supprimer']))
  3. {
  4. $suppression_query = tep_db_query ("DELETE FROM " . user_inbox . " WHERE id_message = '" . $_POST['id_msg'] . "'");
  5. }
  6. $message_query = tep_db_query("Select *
  7. FROM " . user_inbox . "
  8. WHERE id_receiver = '" . $_GET['id'] . "'
  9. ORDER BY inbox_date desc");
  10. $message_sender_query = tep_db_query("Select customers_pseudo
  11. FROM " . customers . "," . user_inbox . "
  12. WHERE customers_id = id_sender");
  13. $message_sender = tep_db_fetch_array($message_sender_query);
  14. ?>
  15.  
  16.  
  17.  
  18. <form action="inbox.php?id=<? echo $_GET['id']; ?>" method="POST" name="formulaire">
  19. <?
  20. $tableau_inbox = array();
  21. while ($message = tep_db_fetch_array($message_query))
  22. {
  23. array_push($tableau_inbox, '<br/><a href="account_page.php?id='.$message['id_sender'].'">'.$message_sender['customers_pseudo'].'</a><br/>Le '.date("d/m/Y à H\hi", strtotime($message['inbox_date'])).'<br/>Objet : '.$message['inbox_object'].'<br/><br/>'.$message['inbox_message'].'
  24.  
  25. <input type="hidden" name="id_msg" value="'.$message['id_message'].'">
  26. <input type="submit" name="Supprimer" value="Supprimer">
  27.  
  28. }
  29. foreach($tableau_inbox as $ligne)
  30. {
  31. echo $ligne;
  32. }
  33. ?>
  34. </form>


D'avance merci,
Cordialement...
Lassé par la pub ? Créez un compte
Expert Programmation

Bonjour,

Au premier regard j'ai l'impression qu'il te manque quelque chose, la méthode "array_push" n'est pas fermé ...

Donc essaye plus proprement :

  1. <?
  2. ...
  3. while ($message = tep_db_fetch_array($message_query))
  4. {
  5. $tmpLine = "<br/><a href=\".account_page.php?id=".$message['id_sender']."\">";
  6. $tmpLine .= $message_sender['customers_pseudo'];
  7. $tmpLine .= "</a><br/>Le ".date("d/m/Y à H\hi", strtotime($message['inbox_date']));
  8. $tmpLine .= "<br/>Objet : ".$message['inbox_object']."<br/><br/>".$message['inbox_message'];
  9. $tmpLine .= "<input type=\"hidden\" name=\"id_msg\" value=\"".$message['id_message']."\" />";
  10. $tmpLine .= "<input type=\"submit\" name=\"Supprimer\" value=\"Supprimer\" />";
  11. array_push($tableau_inbox, $tmpLine);
  12. }
  13. ...
  14. ?>


C'est un peu plus lisible déjà. Et on remarque de suite ton problème, tu vas obtenir un grand nombre d'input de nom "id_msg" dans la même "form". Du coup, il prend le premier.

Il te faut ouvrir et fermer le "form" à chaque ligne (cf ci-dessous).


Ensuite, j'avoue que l'affichage est pas terrible terrible ... Dans des "div" / "fieldset" ce serait plus propre ...

Genre :

  1. ?>
  2. <fieldset><legend>Received Mail</legend>
  3. <?
  4. $cpt = 0;
  5. foreach($tableau_inbox as $ligne)
  6. {
  7. $cpt++;
  8. echo "\t\t<form action=\"inbox.php?id=".$_GET['id']."\" method=\"POST\" name=\"formulaire_supp_msg".$cpt."\">";
  9. echo "\t\t\t".$ligne."\n";
  10. echo "\t\t</form>";
  11. }
  12. ?>
  13. </fieldset>


Avec ça tu devrais avoir quelque chose d'un peu plus propre.
Lassé par la pub ? Créez un compte
Tom's guide dans le monde