IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

supprimer plusieurs tuples à partir d'un tableau [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut supprimer plusieurs tuples à partir d'un tableau
    Bonjour,

    J'ai un problème pour la messagerie de mon forum, je n'arrive pas à supprimer d'un seul coup tous les messages qui ont été cochés.

    ça se présente comme suit :

    devant chaque message, un checkbox a cocher si on veut le supprimer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="checkbox" name="supprimer[]" value="'.$R[id].'">
    Le bouton submit, pour envoyer le formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="submit" name="supprimer" value="supprimer" >
    Et la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <?php
    //si il y a la variable supprimer
    if(isset($_POST['supprimer']))
    {
    $_POST['supprimer']=htmlentities(mysql_real_escape_string($_POST['supprimer']));
    $affiche="SELECT id FROM messagerieRecu WHERE id IN (".implode(',', $_POST["supprimer"]).")  ";
    $resultat = mysql_query("$affiche");
    while 
    ($R = mysql_fetch_array($resultat)) 
    {
    $valider="UPDATE  `messagerieRecu` SET supprime=1 WHERE id ='".$R[id]."'"; 
    mysql_query($valider); 
    ;}
    };
    mysql_free_result($resultat);
    ?>
    Et les messages d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Warning: implode(): Bad arguments. in /home.2/site/www/messages-recus.php on line 35
     
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home.2/site/www/messages-recus.php on line 38
     
    Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home.2/site/www/messages-recus.php on line 44

    Voilà, si quelqu'un a quelques minutes à consacrer à ce problème, je lui en suis d'avance fort reconnaissant

  2. #2
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    Salut,

    dans ton script qui lance la suppression dans la DB, je te conseille de faire, tout en haut, un petit:

    A mon avis, tu devrais comprendre assez rapidement la source de ton problème... Notamment à cause du bouton "supprimer" qui s'appelle "supprimer".

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Change la valeur de l'attribut 'name' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" name="supprimer" value="supprimer" >
    car tes 'checkbox' portent le même nom, du moins pour php. En effet que le nom soit 'supprimer[]' ou 'supprimer', php récupère avec "$_POST['supprimer']", d'où confusion.

  4. #4
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Merci pour vos réponses les gars.

    Alors j'ai fait comme ça : j'ai ajouté le print_r de Bkill et puis j'ai modifié le name du submitt en lui donnant la valeur "supprime".

    J'obtiens ces erreurs là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Array ( [0] => 4 [1] => 1 ) //le print_r
    Warning: mysql_real_escape_string() expects parameter 1 to be string, array given in /home.2/site/www/messages-recus.php on line 35
     
    Warning: implode(): Bad arguments. in /home.2/site/www/messages-recus.php on line 36
     
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home.2/site/www/messages-recus.php on line 39
     
    Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home.2/site/www/messages-recus.php on line 45

  5. #5
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    OK alors c'est presque résolu.

    J'enlève la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_POST['supprimer']=htmlentities(mysql_real_escape_string($_POST['supprimer']))
    Et là tout fonctionne bien. Sinon j'ai toute la pile de message d'erreur que j'ai indiqué juste au dessus.

    Le problème c'est que je dois le filtrer mon tableau, alors comment je fais dans ce cas, s'il vous plait ?

    **edit** bon c'est une question quand même très différente, comme la suppression fonctionne, je marque résolu ici et je vais ouvrir un autre post.

    Merci

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Je n'ai pas tous les éléments, mais à mon avis, ceci devrait suffire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    	if(isset($_POST['supprimer']))
    	{
    		$in = implode(',', $_POST['supprimer']);
    		$sql = 'UPDATE  `messagerieRecu` SET supprime = 1 WHERE id IN (' . $in . ')'; 
    		mysql_query($sql); 
    	}
    ?>

  7. #7
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Salut,

    Merci pour ta réponse, qui semble bonne à ceci près qu'elle n'inclut pas le filtrage des données, du point de vue de la sécurité. Pour cela j'ai ouvert un autre post et a priori, le problème est réglé, il me reste à tester.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/12/2014, 15h18
  2. impossible de supprimer plusieurs tuples dans un trigger
    Par Cadros dans le forum Développement
    Réponses: 3
    Dernier message: 13/01/2014, 06h01
  3. [Toutes versions] Créer plusieurs graphiques à partir d'un tableau
    Par glougloup dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/05/2010, 09h24
  4. [MySQL] plusieurs insertions à partir d'un tableau
    Par nimbus_77 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 03/07/2008, 12h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo