Problème pour supprimer article en PHP/MySQL

Problème pour supprimer article en PHP/MySQL - PHP - Programmation

Marsh Posté le 23-04-2009 à 12:02:52    

Bonjour à tous,
 
Je suis en train de créer un blog pour mon site web.
Dans celui-ci j'ai intégré la création d'article.
Puis sur la page d'accueil j'affiche tous les articles de l'utilisateur (c'est ce que fait la fonction while...)
Je m'occupe en ce moment de rajouter la fonctionnalité : supprimer l'article.
Et je n'arrive pas à supprimer un article en particulier.
 
Tout d'abord le code de la requête pour afficher les articles

Code :
  1. $pseudo = $_SESSION['pseudo'];
  2. $afficher_article = "Select `Titre_article`, `Article` from `blog`.`article` where pseudo='$pseudo'";
  3. $resultat = mysql_query($afficher_article);
  4. $i = 1;
  5. while ($row = mysql_fetch_array($resultat, MYSQL_ASSOC))
  6. {
  7. printf ("
  8. <div style='font-size: 16px'>
  9. Article N°%d
  10. </div>
  11. <div style='font-size: 15px;'>
  12. Titre :  %s
  13. </div>
  14. Contenu : %s
  15. "$_SESSION['Article'] = $row['Article'];"
  16. <a style='text-decoration: none' href=supprimer_article.php>
  17. <img src='images/supprimer.png'/>
  18. Supprimer cet article
  19. </a>",
  20. $i, $row["Titre_article"], $row["Article"]);
  21. $i++;
  22. }


 
Et le code de la requête pour supprimer l'article :

Code :
  1. <?php
  2. $pseudo = $_SESSION['pseudo'];
  3. $article = $_SESSION['Article']; // je récupère ce qu'il y'a dans l'article
  4. $suprimer_article = "DELETE FROM `blog`.`article` where Article='$article'"; // Pour ensuite supprimer la ligne où il y'a l'article.
  5. mysql_query($suprimer_article);
  6. ?>


 
Et j'ai une erreur comme ça :  
Parse error: parse error in C:\Program Files\WampServer\www\Blog\Artisteer\Body\Home.php on line 26
ce qui correspond à la ligne où il y'a : "$_SESSION['Article'] = $row['Article'];"  
 
Et si vous avez une idée du moyen par lequel je dois passer pour modifier cet article (j'utilise fckeditor)
 
Merci d'avance


Message édité par ozone--24 le 23-04-2009 à 12:06:14
Reply

Marsh Posté le 23-04-2009 à 12:02:52   

Reply

Marsh Posté le 23-04-2009 à 12:10:14    

Déjà on n'utilise surtout pas la méthode HTTP GET pour quelque chose avec de tels effets de bords.

 

Donc jamais jamais de liens, il faut un mini-formulaire avec méthode POST et tout.

 

Ensuite l'autre problème est qu'apparemment t'as pas trop pigé comment fonctionnent les sessions. Il faut passer en paramètre l'id de l'article. Donc il faut un truc du genre :

Code :
  1. <form action="supprimer_article.php" method="post">
  2.  <div>
  3.    <input type="hidden" name="id_article" value="<?php echo htmlspecialchars($row['id']) ?>" />
  4.    <input type="submit" value="Supprimer" />
  5.  </div>
  6. </form>
 

Ensuite dans supprimer_article.php faut récupérer l'id (via $_POST('id_article')), vérifier que l'article existe bien, le virer, puis rediriger vers le formulaire.


Message édité par FlorentG le 23-04-2009 à 12:11:00
Reply

Marsh Posté le 23-04-2009 à 13:22:45    

pourquoi tu met des guillements autour du nom de tes variables
#
# "$_SESSION['Article'] = $row['Article'];"
apres ton algo est pas correct tu utilise le meme nom de session pour tous tes articles, donc la l'id sauvegarde sera le dernier
 
ensuite revoit ton printf, ton $_SESSION['Article'] = $row['Article'] n'a rien a y faire dedans
 
dans le meme style que FLO
tu peut utiliser un lien  

Code :
  1. $pseudo = $_SESSION['pseudo'];
  2. $afficher_article = "Select `Titre_article`, `Article` from `blog`.`article` where pseudo='$pseudo'";
  3. $resultat = mysql_query($afficher_article);
  4. $i = 1;
  5. while ($row = mysql_fetch_array($resultat, MYSQL_ASSOC))
  6. {
  7.         printf ("
  8.             <div style='font-size: 16px'>
  9.             Article N°%d
  10.             </div>
  11.           <div style='font-size: 15px;'>
  12.             Titre :  %s
  13.           </div>
  14.           Contenu : %s
  15.           ",
  16.           $i, $row["Titre_article"], $row["Article"]
  17.         );
  18.     echo "<a href=\"./suprimerarticle.php?article=".$row['Article']."\" ><img src='images/supprimer.png'/>Supprimer cet article</a>";
  19.    $i++;
  20. }
  21. <?php
  22. if(isset($_GET['Article'])){
  23. $pseudo = $_SESSION['pseudo'];
  24. $article = $_GET['Article']; // je récupère ce qu'il y'a dans l'article
  25. $suprimer_article = "DELETE FROM `blog`.`article` where Article='$article'"; // Pour ensuite supprimer la ligne où il y'a l'article.
  26. mysql_query($suprimer_article);
  27. }
  28. ?>


 
 tu met un lien pour chaque article et tu passe l'id de l'article dans le lien
et tu fais appel a ta page supprimer qui recupere l'id par le GET
 
bon voila tu peut optimiser pas mal, déja les double quotes avec le echo(c'est un peu moche) , puis arranger un peu le code


Message édité par infoman64 le 23-04-2009 à 13:24:21
Reply

Marsh Posté le 23-04-2009 à 14:29:50    

Nan pas de lien :o :o :o

Reply

Marsh Posté le 23-04-2009 à 14:44:23    

J'aurais dû annoncer que j'étais débutant dans le php.
Donc j'ai modifié mon code selon vos propositions et je vous montre un  screenshot de ma page d'accueil (la partie intéressante) :
http://img254.imageshack.us/img254/7995/forumphpbug1.jpg
 
 
Et ce que produit l'exécution quand je clic sur Supprimer cet article (au milieu de l'image), ça me donne bien une page blanche :'( :
 
http://img254.imageshack.us/img254/6417/forumphpbug2.jpg
 
Et maintenant le code (que j'ai modifié  :)  )
 

Code :
  1. <h3> Vos Articles déjà écrit : </h3>
  2. <?php
  3. require("../connexion.php" );
  4. connec();
  5. $pseudo = $_SESSION['pseudo'];
  6. $afficher_article = "Select `Titre_article`, `Article` from `blog`.`article` where pseudo='$pseudo'";
  7. $resultat = mysql_query($afficher_article);
  8. $i = 1;
  9. ?>
  10. <form action="supprimer_article.php" method="post">
  11. <div>
  12. <input type="hidden" name="id_article" value=" <?php echo htmlspecialchars($row['id']) ?>" />
  13. <input type="submit" value="Supprimer" />
  14. </div>
  15. </form>
  16. <?php
  17.  while ($row = mysql_fetch_array($resultat, MYSQL_ASSOC))
  18.  {
  19.   printf ("
  20.   <div style='font-size: 16px; font-weight: bold; '>
  21.   Article N°%d
  22.   </div>
  23.   <div style='font-size: 15px;'>
  24.   Titre :  %s
  25.   </div>
  26.   Contenu : %s
  27.   ",
  28.   $i, $row["Titre_article"], $row["Article"]);
  29.   echo "<a href=\"./supprimer_article.php?article=".$row['Article']." // j'ai enlevé le \"> parce que sinon ça l'affichait à côté de supprimer article (juste avant l'icône)
  30.   <img src='images/supprimer.png'/> Supprimer cet article</a>";
  31.   echo '<br/><br/><br/><br/><br/><br/>';
  32.   $i++;
  33.   }
  34.  ?>


 

Code :
  1. <?php
  2. if(isset($_GET['Article']))
  3. {
  4.  $pseudo = $_SESSION['pseudo'];
  5.  $article = $_GET['Article'];
  6.  $id_article = $_POST('id_article');
  7.  $supprimer_article = "DELETE FROM `blog`.`article` WHERE Article='$article'";
  8.  echo $supprimer_article;
  9.  mysql_query($supprimer_article);
  10.  echo mysql_error();
  11.  header("Location:index.php" );
  12. }
  13. ?>


Message édité par ozone--24 le 23-04-2009 à 14:46:45
Reply

Marsh Posté le 23-04-2009 à 15:04:13    

FlorentG a écrit :

Nan pas de lien :o :o :o


Oui mais j'ai pas bien saisi comment savoir quel article supprimer alors ?
Parce que si je mets pas de lien j'obtiens ça :
http://i61.servimg.com/u/f61/11/31/25/01/sans_y10.jpg
 
Et du coup je peux pas cliquer sur Supprimer Article. Je comprends pas grand chose :'(
J'ai mis le <form> et le <div> qui englobe le <?php ?> c'est bien ça qui faut faire ?


Message édité par ozone--24 le 23-04-2009 à 15:07:30
Reply

Marsh Posté le 23-04-2009 à 15:35:18    

Finalement j'ai trouvé avec l'aide d'un collègue, je vous mets la réponse au cas où des personnes auraient le même problème que moi :
 

Code :
  1. <?php
  2.     while ($row = mysql_fetch_array($resultat, MYSQL_ASSOC))
  3.     {
  4.      printf ("
  5.      <div style='font-size: 16px; font-weight: bold; '>
  6.      Article N°%d
  7.      </div>
  8.      <div style='font-size: 15px;'>
  9.      Titre :  %s
  10.      </div>
  11.      Contenu : %s
  12.      <br/>
  13.      Id : %s
  14.      ",
  15.      $i, $row["Titre_article"], $row["Article"], $row["Id"]);
  16.      ?>
  17.      <form action="supprimer_article.php?id_article=<?php echo $row['Id']; ?>" method="post">
  18.      <div>
  19.      <input type="submit" value="Supprimer" />
  20.      </div>
  21.      </form>
  22.      <?php
  23.      // "<a href=\"./supprimer_article.php?article=".$row['Article'].</a>"  
  24.      echo "<img src='images/supprimer.png'/> Supprimer cet article";
  25.      echo '<br/><br/><br/><br/><br/><br/>';
  26.      $i++;
  27.     }
  28.    ?>


 

Code :
  1. <?php
  2. require("../connexion.php" );
  3. connec();
  4. if( isset($id_article) )
  5. {
  6. echo $id_article;
  7. $supprimer_article = "DELETE FROM `blog`.`article` WHERE Id='$id_article'";
  8. echo $supprimer_article;
  9. mysql_query($supprimer_article);
  10. echo mysql_error();
  11. }
  12. ?>

Reply

Marsh Posté le 23-04-2009 à 15:58:34    

FlorentG a écrit :

Nan pas de lien :o :o :o


ouais mais bon c'etait pour lui donner une réponse rapide

Reply

Marsh Posté le 23-04-2009 à 16:01:23    

/me tape sur les doigts de infoman64 avec une bonne règle en fer   :p


Message édité par ozone--24 le 23-04-2009 à 16:01:47
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed