Supprimer des membres en PHP

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Supprimer des membres en PHP

Re: Supprimer des membres en PHP

par timotebx » 07 août 2013, 16:48

Il y a pleins de trucks à ce sujet ici : http://www.lephpfacile.com/cours/16-sup ... votre-base

Re: Supprimer des membres en PHP

par yann18 » 29 juil. 2013, 13:28

Une chose toute bête, vu que ce sont des entiers :)
foreach($_POST['id_supp'] as $id_suppr) {
              mysql_query('DELETE FROM users WHERE id ="'. (int)$id_supp.'" ');

             
          }
très bien vu, dans la mesure où l'on attends que des entiers il est tout à fait raisonnable de procéder à une vérification du type attendu.Du point de vue optimisation on y gagne parceque la fonction mysql_real_escape_string crée toujours une instance de connexion(si elle n'existe pas) à la bd.

En reprenant la proposition de @moogli celle de faire une seule requête en lieu et place de la boucle foreach, là aussi le code est mieux optimisé car les accès à la bd sont réduits.Un exemple d'une implémentation:

  if(!empty($_POST['id_supp'])){
  $idTab = array_map('intval', $_POST['id_supp']);
   $id=   '('. implode(',', $idTab) .')';
    mysql_query('DELETE FROM users WHERE id IN "'.$id.' " ');
  }
On pouvait aussi utiliser un filtre de validation des entiers (filter_var_array) pour s'assurer qu'on ne récupère au final que des entiers

Re: Supprimer des membres en PHP

par moogli » 29 juil. 2013, 13:23

Requête SQL foireuse les entiers n'ont pas a être entourée de quote.
Implode + le in SQL fait la même chose en plus rapide, faire une requête dans une boucle c'est une ineptie sur tout quand on peux faire autrement !

Re: Supprimer des membres en PHP

par imikado » 29 juil. 2013, 08:59

Une chose toute bête, vu que ce sont des entiers :)
foreach($_POST['id_supp'] as $id_suppr) {
              mysql_query('DELETE FROM users WHERE id ="'. (int)$id_supp.'" ');

             
          }

Re: Supprimer des membres en PHP

par momox » 27 juil. 2013, 11:52

Moui, pas faux, mais j'ai tendance à laisser les gens chercher au premier coup et à donner la solution ensuite.

Re: Supprimer des membres en PHP

par moogli » 27 juil. 2013, 11:49

@momox : une solution constructive serait tout aussi intéressante :)

comme exemple indiquer mysql_real_escape_string

et dans un cas comme celui ci les fonctions array_map et la clause SQL in afin de ne faire qu'une requête plutôt que de faire une requête par élément à supprimer.


@+

Re: Supprimer des membres en PHP

par momox » 27 juil. 2013, 11:00

bonjour,

$_GET n'a pas sa place dans ton cas, car tu récupères déjà les données(id_supp) transmises par le formulaire avec $_POST.tu fais simplement comme ceci:
foreach($_POST['id_supp'] as $id_suppr) {
              mysql_query('DELETE FROM users WHERE id ="'. $id_supp.'" ');

             
          }
Allez hop, une faille...
L'injection SQL ça vous dit quelque chose ?

Re: Supprimer des membres en PHP

par yann18 » 23 juil. 2013, 14:58

bonjour,

$_GET n'a pas sa place dans ton cas, car tu récupères déjà les données(id_supp) transmises par le formulaire avec $_POST.tu fais simplement comme ceci:
foreach($_POST['id_supp'] as $id_suppr) {
              mysql_query('DELETE FROM users WHERE id ="'. $id_supp.'" ');

             
          }

Supprimer des membres en PHP

par chymel » 23 juil. 2013, 12:53

Bonjour tout le monde, je viens demander votre aide après avoir passé 5 jours à chercher l'erreur dans mon code vainement. Bon je veux afficher ma liste d'utilisateurs avec des cases à cocher pour pouvoir supprimer. Tout marche bien jusqu'au moment où je clique sur supprimer rien ne se passe. Si quelqu'un pourrait m'aider je lui serai très reconnaissante. Voilà le code que j'ai fait :

Code : Tout sélectionner

Voici la liste des utilisateurs: <table> <tr> <td class="left"> <th> Id </th> <th>Nom d'utilisateur</th> <th>Email</th> </tr> <form action="users.php" method="post"> <ul> <?php //On recupere les identifiants, les pseudos et les emails des utilisateurs $req = mysql_query('select id, username, email from users ORDER BY id'); while($dnn = mysql_fetch_array($req)) { ?> <tr> <td class="left"><input type="checkbox" name="id_supp[]" value="<?php echo $dnn['id']; ?>" class="id" /> <td class="left"><?php echo $dnn['id']; ?></td> <td class="left"><a href="profile.php?id=<?php echo $dnn['id']; ?>"> &nbsp; &nbsp; &nbsp; &nbsp;<?php echo htmlentities($dnn['username'], ENT_QUOTES, 'UTF-8'); ?></a></td> <td class="left"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <?php echo htmlentities($dnn['email'], ENT_QUOTES, 'UTF-8'); ?></td> </tr> <?php if(isset($_POST['btnAction'])){ //si on a cliqué sur 1 bouton action if($_POST['btnAction']=="supprimer"){ //si l'action est supprimer if(!empty($_POST['id_supp'])){ //si on a coché aux moins une case foreach($_POST['id_supp'] as $id_suppr) { mysql_query('DELETE FROM users WHERE id = \'' . $_GET['id_supp'] . '\''); } } }else{ //si aucune case n'a été cochée echo 'vous n\'avez selectionné aucun fichier à déplacer'; } } } ?> </form> </table> </div>