[Php/Mysql]Effacer ligne d'un tableau de données

Effacer ligne d'un tableau de données [Php/Mysql] - PHP - Programmation

Marsh Posté le 18-11-2008 à 17:16:17    

Hello!
 
Avant toutes chose je débute en PHP don soyez indulgents lol ^^.
Je viens de créer une petite page php qui récupère les données d'une table Mysql et les affiche dans un tableau (On y trouve => ID / Pays / Supprimer).
 
Dans la colonne "supprimer" on trouve une icône qui lors du clic devrait permettre la suppression de la ligne!, cependant après différents essais et recherches, je n'ai toujours pas la solution!  
 
je suis arrivé à la conclusion qu'il fallait récupéré l'ID de la ligne et l'envoyer dans un fichier Php qui traite la suppression mais apres je suis bloqué, voici mes code:
 
[j'ai mis en rouge/Bold les points qui à mon sens sont vraiment erronés]
 
Ma page php:
 

Code :
  1. <?php
  2.    // lancement de la requete   
  3.    $sql = "SELECT ID, Pays FROM listepays" ; 
  4.  
  5.    //on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)   
  6.    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
  7. /*   
  8. $sup = $_POST['sup']
  9. for ($i = 0; $i < count($sup); $i++)
  10. </tr>";
  11. */
  12.    
  13. echo "<table><tr><th>ID</td><th>Pays</th><th>Supprimer</th></tr>";
  14. while($data = mysql_fetch_array($req))
  15.  {
  16.  echo "
  17.  <tr>
  18.   <td>$data[ID]</td>
  19.   <td>$data[Pays]</td>
  20.   <td>
  21.    <a href='Supp.php?n=$id'>
  22.     <img class='icon' src='./skin site/b_drop.png' alt='Effacer' title='Effacer' name='Sel[]' width='16' height='16')'>
  23.    </a>
  24.   <?php include ('Supp.php') ?>
  25.   </td>
  26.  </tr>";
  27.  }
  28. echo "</table>";
  29.   // on libère l'espace mémoire alloué pour cette interrogation de la base   
  30.    mysql_free_result ($req); 
  31.       mysql_close (); 
  32.    ?>


 
 
Page de traitement: Supp.php
 

Code :
  1. <?php
  2. $bdd="maps";
  3. mysql_connect("localhost","root","" );
  4. mysql_select_db($bdd);
  5. if(isset($_GET['n']))
  6.     {
  7.           $id=$_GET['n'];
  8.           for ($i = 0; $i < count($id); $i++)
  9.              {
  10.                   $req = "DELETE * FROM listepays WHERE ID  = '$id'";
  11.                  mysql_query ($req) or die(mysql_error());
  12.              }
  13.     }
  14. ?>


Message édité par bm3w325i le 18-11-2008 à 17:19:24
Reply

Marsh Posté le 18-11-2008 à 17:16:17   

Reply

Marsh Posté le 18-11-2008 à 18:26:47    

Bonjour, alors il y a plusieurs soucis :
1 - N'englobe pas tout ton html dans un echo, c'est moche :/
Utilise echo pour les valeurs dynamiques seulement et met le html en dehors de tout çà :o :
 

Code :
  1. <a href="suppr.php?id=<?php echo $id ?>">Supprimer</a>


 
2 - Quand tu utilises une donnée dans une requête, echappe là si c'est une string ou vérifie que ce soit bien un entier. Sinon tu risques une injection SQL :
http://fr.wikipedia.org/wiki/Injection_SQL
 

Code :
  1. $string = mysql_real_escape_string($_POST['user_string']);


 
Dans ton cas, tu cherches un ID donc un entier.
Tu peux alors simplement forcer le type de l'id (transmis par lurl donc falsifiable).
 

Code :
  1. $id = (int) $_GET['id'];


 
-> (int) retourne toujours un entier à partir de la donnée qui est placée après lui.
-> la fonction intval fait la même chose, voir la doc.
 
3 - Avec MySQL, on ne fait pas DELETE *, seulement DELETE : quand on supprime on entrée on supprime toujours toute l'entrée.
 

Code :
  1. DELETE FROM listepays WHERE ...


 
4 - Pourquoi une boucle ?  
Il suffit de faire une requête dans ce genre :
Supprimer l'entrée avec l'id $id de la table listepays
donc :

Code :
  1. <?php
  2. $query = mysql_query("DELETE * FROM listepays WHERE ID  = $id" );
  3. ?>


 
D'ailleurs, tu remarqueras que j'ai viré les guillements simples autour de $id : c'est un entier donc pas de guillemets !
 
5 - Pourquoi, dans ta boucle, qui est inutile, utilise tu count($id), sachant que $id est supposé être un entier et que count retourne la taille d'un tableau ?

Reply

Marsh Posté le 19-11-2008 à 09:53:47    

hello merci pour toute ces informations :), comme je débute en php j'ai tendance à prendre des bout de code puis à les modifier jusqu'à ce que je parvienne à mon but. Du coup j'ai pas mal de petites erreurs, mais la avec tes info j 'en ai appris beaucoup, il va falloir que je rentre tout ça dans ma petite tête.

Reply

Marsh Posté le 19-11-2008 à 12:26:59    

Bon je suis parvenu à ce que je voulais grâce à tes conseils et un tuto, je ne sais pas si le code est parfait mais si vous avez des remarques j'aimerais les connaître afin d'optimiser tout ça:
 
Voici le code pour ceux qui en auraient besoin:
 
Fichier avec le tableau:
 

Code :
  1. <?php
  2. //Connexion à la base de donnée via fichier externe:
  3. include ('connexion.php');
  4. //Recuperation données:
  5. // Requete   
  6.    $sql = "SELECT ID, Pays FROM listepays" ; 
  7.  
  8. //on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)   
  9.    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  10.  
  11. //Affichage tableau et Gestion de la suppression:
  12. if (isset($_GET['supp'])) //  
  13. {
  14.    
  15.     // Protection de la variable "ID" pour éviter une faille SQL
  16.     $_GET['supp'] = addslashes($_GET['supp']);
  17.     mysql_query('DELETE FROM listepays WHERE ID=\'' . $_GET['supp'] . '\'');
  18. }
  19. ?>
  20. <table id='T1'><tr>
  21. <th>Pays</th>
  22. <th>Supprimer</th>
  23. </tr>
  24. </tr>
  25. <?php
  26. include ('Supp.php');
  27. ?>
  28. </table>


 
Fichier de suppression
 

Code :
  1. <?php
  2. $retour = mysql_query('SELECT * FROM listepays');
  3. while ($data = mysql_fetch_array($retour)) // On fait une boucle pour lister les informations à afficher
  4. {
  5. ?>
  6. <tr>
  7. <td><?php echo $data['Pays'] ?></td>
  8. <td><?php echo '<a href="BDD_2.php?supp=' . $data['ID'] . '">'; ?><img class='icon' src='./skin site/b_drop.png' alt='Effacer' title='Effacer' name='supp[]' width='16' height='16')'></a></td>
  9. </tr>
  10. <?php
  11. } // Fin de la boucle!!
  12. ?>


Message édité par bm3w325i le 19-11-2008 à 12:33:33
Reply

Sujets relatifs:

Leave a Replay

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