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

Langage PHP Discussion :

Formulaire à suppression multiple


Sujet :

Langage PHP

  1. #1
    nal
    nal est déconnecté
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 129
    Points : 56
    Points
    56
    Par défaut Formulaire à suppression multiple
    Bonjour,

    J'ai un formulaire pour la suppression des données mysql
    qui permets de supprimer un à un les enregistrements depuis une sélection par l'identifiant dans le fichier Suppression.php:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
       <html>
     
      <head>
        <title>suppression de données en PHP :: partie 1</title>
        <script language="javascript">      function confirme( Identifiant )
          {
            var confirmation = confirm( "Voulez vous vraiment supprimer cet enregistrement ?" ) ;
    	if( confirmation )
    	{
    	  document.location.href = "Suppression2.php?idAgence="+Identifiant ;
    	}
          }    </script>
      </head>
    <body>  
    <table border="1" align="center" cellspacing="2" cellpadding="2" >
    <tr align="right">
         <td><b>FORMULAIRE DE SUPPRESSION DES BIENS</b></td>
    </tr>
    </table>
    <br>
     
    <?php
        //connection au serveur:
      include('connect.php');
     
        //requête SQL:
        $sql = "SELECT *
    	      FROM Agence
    	      ORDER BY Identifiant" ;
     
        //exécution de la requête:
        $requete = mysql_query( $sql, $cnx ) ;
     
        //affichage des données:
        while( $result = mysql_fetch_object( $requete ) )
        {
           echo("<table align='center' border='solid' bgcolor='#FCFAE1' width='900'><tr><td>".$result->Identifiant." </td>-<td> ".$result->Nom_proprio." - ".$result->Coordonnees_proprio."
     - ".$result->Nom_commune." - ".$result->Type_bien." - ".$result->Type_bien2." - ".$result->Nombre_pieces." pièce(s) - ".$result->Dimension." m2
     - ".$result->Dimension_terrain." m2 - ".$result->Fourchette_prix." euros - ".$result->Prix." euros - ".$result->Descriptif."<br> 
    <img src=/scripts/timthumb.php?src=Imagesagence/".$result->Image1." &h=100&w=YY&zc=1/> 
    
    
    <a href=\"#\" onClick=\"confirme('".$result->Identifiant."')\" >supprimer</a></td></tr></table><br>\n") ;
        }
      ?>
    </body>
    </html>
    Ces données sont traitées dans le fichier Suppression2 :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <html>
    <body>
     
    <?php
      //connection au serveur:
      $cnx = mysql_connect( "xx", "xx", " xx" ) ;
     
      //sélection de la base de données:
      $db = mysql_select_db( "xx" ) ;
     
      //récupération de la variable d'URL,
      //qui va nous permettre de savoir quel enregistrement supprimer:
      $id  = $_GET["idAgence"] ;
     
      //requête SQL:
      $sql = "DELETE 
                FROM Agence_immobiliere
    	    WHERE Identifiant = ".$id ;
      echo $sql ;	    
      //exécution de la requête:
      $requete = mysql_query( $sql, $cnx ) ;
     
      //affichage des résultats, pour savoir si la suppression a marchée:
      if($requete)
      {
        echo("La suppression à été correctement effectuée") ;
      }
      else
      {
        echo("La suppression à échouée") ;
      }
     
    ?>
    </body>
    Je voudrais installer un checkbox "supprimer cet enregistrement"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td align='center'><input type="checkbox" name="supprimer" value="supprimer"><br></td>
    dans le fichier Suppression.php, qui apparaitre à la fin de chaque ligne et qui permettra éventuellement de définir plusieurs enregistrements à supprimer en même temps.

    Pourriez vous m'indiquer quelle modification apporter au fichier Suppression2.php
    pour que, si, plusieurs checkbox sont cochés en même temps dans Suppression.php plusieurs enregistrements soit supprimés simultanément dans Suppression2.php

    Je ne sais pas si c'est possible à partir de ça?

    Merci par avance pour vos réponses

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Le checkbox devrait être de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="checkbox" name="supprimer[]" value="<?php echo $result->Identifiant ?>">
    Ensuite tu récupères les valeurs du tableau $_POST["supprimer"] pour alimenter ta requête DELETE.

  3. #3
    nal
    nal est déconnecté
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 129
    Points : 56
    Points
    56
    Par défaut
    J'ai donc modifié le checkbox dans Suppression.php
    où j'ai inséré l'ensemble des réponses dans un formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form name='suppression' action='Suppression2.php' method='POST' ENCTYPE='multipart/form-data'>
    ça donne:
    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
    18
     
     
        while( $result = mysql_fetch_object( $requete ) )
        {
           echo(" <form name='suppression' action='Suppression2.php' method='POST' ENCTYPE='multipart/form-data'><table align='center' border='solid' bgcolor='#FCFAE1' width='900'><tr><td>".$result->Identifiant." </td>-<td> ".$result->Nom_proprio." - ".$result->Coordonnees_proprio."
     - ".$result->Nom_commune." - ".$result->Type_bien." - ".$result->Type_bien2." - ".$result->Nombre_pieces." pièce(s) - ".$result->Dimension." m2
     - ".$result->Dimension_terrain." m2 - ".$result->Fourchette_prix." euros - ".$result->Prix." euros - ".$result->Descriptif."<br> 
    <img src=/scripts/timthumb.php?src=Imagesagence/".$result->Image1." &h=100&w=YY&zc=1/> 
    <img src=/scripts/timthumb.php?src=Imagesagence/".$result->Image2." &h=100&w=YY&zc=1/> 
     
    <p><input type='checkbox' name='supprimer[]' value='<?php echo $result->Identifiant ?>'>Supprimer ce bien</p><br>
     
    ") ;
        }
      ?>
    <table align="center"><tr align="center"><td><input type="submit" value="SUPPRIMER LES BIENS SELECTIONNES"></td></tr></table>
     
    </form>
    Dans Suppression2.php
    j'ai essayé ça:
    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
    18
    19
    20
    21
    22
    23
     
     
     
    $id= $_POST["supprimer"] ;
     
     
    //requête SQL:
      $sql = "DELETE 
                FROM Agence_immobiliere
    	    WHERE Identifiant = '$id' ";
      echo $sql ;	    
      //exécution de la requête:
      $requete = mysql_query( $sql, $cnx ) ;
     
      //affichage des résultats, pour savoir si la suppression a marchée:
      if($requete)
      {
        echo("La suppression à été correctement effectuée") ;
      }
      else
      {
        echo("La suppression à échouée") ;
      }
    ça me répond:
    "DELETE FROM Agence_immobiliere WHERE Identifiant = 'Array' La suppression à été correctement effectuée"

    Mais en fait ça n'a rien supprimé comme je suppose que ça n'a pas réussi à récupérer les identifiants (??)

    Que faut il modifier dans la syntaxe pour que ça passe les différents identifiants?

    Merci par avance pour tes éclaircissements

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Oui je t'ai donné le principe mais cela ne veut pas dire qu'il faut faire un simple copié/collé. Par exemple si une balise php est déjà ouverte et que l'input est déjà dans un echo il faudrait (pour respecter ta syntaxe) écrire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p><input type='checkbox' name='supprimer[]' value='".$result->Identifiant."'>...
    Faits afficher le code source de ta page pour voir si le code du formulaire est affiché correctement.

    Ensuite dans ta deuxième page tu récupère un tableau, mais il faudra le travailler un peu pour l'utiliser dans ta requête. Par exemple si tu veux utiliser la commande WHERE ... IN il faudra au final avoir quelque chose comme WHERE Identifiant IN(id1,id2,id3...) où id1, id2 et id3 sont les valeurs de $_POST['supprimer'], ce qui suppose un implode sur $_POST['supprimer'] pour écrire la bonne chaine de caractères.
    Soit en gros
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $values = array_map('intval',$_POST['supprimer']);// pour caster les valeurs du tableau $_POST['supprimer'] en numérique (à supposer que les id sont numériques)
    $values = implode(",",$values);
    $sql = "DELETE 
                FROM Agence_immobiliere
    	    WHERE Identifiant IN($values)";
     
    // juste temporairement pour vérifier que la requête est bien écrite
    echo $sql;
    à noter que pour vérifier le contenu d'un tableau (pour débuggage) tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<pre>';
    print_r($_POST['supprimer']);
    echo '</pre>';
    Voilà faut que tu bosse un peu et faire des essais pour comprendre ce qui vient d'être dit.

  5. #5
    nal
    nal est déconnecté
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 129
    Points : 56
    Points
    56
    Par défaut
    Ok j'ai compris...
    Il faudra que je l'utilise aussi dans un autre contexte pour bien l'assimiler.

    Mais là ça marche,
    je sens que le WHERE IN va m'être utile bientôt pour une autre requête....

    Merci bcp!

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par nal Voir le message
    je sens que le WHERE IN va m'être utile bientôt pour une autre requête....
    Oui c'est pratique et pour info il y a aussi l'opposé : WHERE ... NOT IN().

    Au passage, il faudrait protéger les valeurs de $values par des quotes et par mysql_real_escape_string si ce n'étaient pas des entiers, et bien entendu ne pas faire un array_map('intval'....

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

Discussions similaires

  1. formulaire a multiple submit
    Par phoeniix07 dans le forum Langage
    Réponses: 5
    Dernier message: 31/05/2006, 10h59
  2. procédure pour une MAJ d'un formulaire à choix multiple
    Par Zen_Fou dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 26/05/2006, 14h46
  3. [forms 9i] case à cocher : suppression multiple
    Par ramaro dans le forum Forms
    Réponses: 3
    Dernier message: 05/04/2006, 09h33
  4. Formulaire : Liste multiple
    Par Visiteur_33 dans le forum Langage
    Réponses: 2
    Dernier message: 01/04/2006, 11h23
  5. formulaire choix multiple
    Par pram dans le forum XMLRAD
    Réponses: 6
    Dernier message: 02/02/2003, 18h59

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