Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1904 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1813517
bm3w325i
Posté le 18-11-2008 à 17:16:17  profilanswer
 

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
mood
Publicité
Posté le 18-11-2008 à 17:16:17  profilanswer
 

n°1813579
Profil sup​primé
Posté le 18-11-2008 à 18:26:47  answer
 

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 ?

n°1813700
bm3w325i
Posté le 19-11-2008 à 09:53:47  profilanswer
 

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.

n°1813781
bm3w325i
Posté le 19-11-2008 à 12:26:59  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
exemple syntaxe dictionnaire des données oracleAjouter une ligne à un tableau en javascript
WAMP & mysql_num_rowsRecuperation de données dans un menu deroulant
Problème courant du tableau 2D[resolu]caracteres accentué (variable TEXT d'une table Mysql)
[PHP ET SEO] comment éviter un duplicate contentpointeur sur un tableau ? est-ce faisable ?
Application avec base de Données 
Plus de sujets relatifs à : [Php/Mysql]Effacer ligne d'un tableau de données


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR