PHP Case a cocher

Bonjour,

Je ve rajouter une otre colonne ou serai mi une case a coché dans une page ou s'affiche via une requete sql toute les donnée enregistré par ligne.

Quand je clik sur cette ou ces case, j'ai un bouton "supprimer" en page de page qui supprime donc la ou les ligne dont la case a été cocher.

Au niveau du code j'i arrive pas est ce que quelqu'un aurait une idée au niveau du code mercii!! d'avanceee
Configuration: Windows XP
Internet Explorer 7.0

16 réponses

Résumé de la discussion

Le sujet porte sur l'ajout d'une case à cocher par ligne dans une liste affichée via SQL, afin de pouvoir supprimer les lignes sélectionnées par un bouton 'supprimer'. Plusieurs intervenants évoquent l'utilisation d'un système de suppression par case à cocher avec un formulaire et une requête DELETE, insistant sur le nommage des checkbox comme suppr_XXXX_YYYY pour identifier chaque ligne. Des échanges portent sur l'emploi de requêtes DELETE FROM tb_ticket WHERE NumeroTicket=... AND IndexTicket=..., et sur la vérification du nom des champs et valeurs transmises pour supprimer la ligne cochée. D'autres évoquent des fautes dans le code PHP et l'usage des variables POST, sans conclure sur l'état du fil, mais soulignent que la suppression dépend du nom des cases.

Bobot (l’IA à votre service)
  1. Salut,

    Par exemple, tu nommes tes cases à cocher suppr_ID ou ID est l'id de l'élément à supprimer

    Et sur ta page de traitement, pour chaque variable que tu reçois en POST, tu regardes si elle se commence par suppr_ si oui, tu récupères l'ID et tu supprimes dans la base
    0
    1. slt

      merci de ta réponse

      desolé mais tu va trop vite pour moi je débute en php. ^^
      0
  2. slt

    merci de ta réponse

    desolé mais tu va trop vite pour moi je débute en php. ^^

    Si tu pourrais m'aidé au niveau du code sa serez cool sa m'arrangerais. merci
    0
    1. desolé j oublié de presicé dans ma table ma clé primaire est formé de 2 champ: IndexTicket et NumeroTicket.
      0
      1. Bon, si je comprends bien, tu ne veux pas supprimer tout le ticket ( numTicket=X ) mais seulement une partie ( numTicket=X et indexTicket=Y ) ?

        A la création, tu nommes tes cases à cocher :
        name=\"suppr_\"".rst["numTicket"]."_".rst["indexTicket"]


        Côté traitement du formulaire :
        <code>
        foreach($_POST as $nom => $val) // Pour chaque valeur venant du formulaire
        {
        if(substr($nom,0,6)=="suppr_") // Si c'est une case à cocher de suppression
        {
        $cle = substr($nom,6); // On enlève suppr_
        $index = substr($cle,0,strpos($cle,"_")); // On récupère l'index
        $num = substr($cle,strpos($cle,"_")+1); // On récupère le numéro
        mysql_query("DELETE FROM TICKET WHERE numTicket=$num et indexTicket=$index"); // Suppression
        }
        }
        0
        1. sisi je veux supprimer tout le ticket (une ligne correspond a un ticket) et IndexTicket et NumeroTicket sont la clé primaire donc il determinent tous les autre champ de la table ticket donc que dans notre code on en aura besoin !
          Qu'est que t'en pensse ?
          0
        2. @MIKASi j'ai bien compris :

          Tu n'as besoin que de numTicket en fait dans le code car numTicket doit être le numéro du ticket ( un numéro qui est unique pour un ticket ).

          indexTicket doit correspondre à un message précis du ticket donc quand on supprime, on supprime tous les messages du ticket
          DELETE FROM TICKET WHERE numTicket=X

          donc ça deviendrait :
          Pour le nommage : "suppr_".$rst["numTicket"];
          foreach($_POST as $nom => $val) // Pour chaque valeur venant du formulaire
          {
          if(substr($nom,0,6)=="suppr_") // Si c'est une case à cocher de suppression
          {
          $num = substr($cle,6); // On récupère le numéro
          mysql_query("DELETE FROM TICKET WHERE numTicket=$num"); // Suppression
          }
          }
          0
        3. @Mikey_UFCEn gros indexticket et numeroticket dans un tableau sa donne sa : A0125
          A0126
          L'indexticket qui est A ici ne change jamais j'ai crée 2 champ pour la clé primaire parce que le numeroticket s'incremente et avec le A devant sa marchais c'est pour cela que j crée une clé primaire a 2 champ
          0
      2. J'abandonne sa marche pas.

        c'est quelque chose qui se fait presque partout sur les site mais aparement c'est dur a comprendre bref tanpi merci de ton aide quand meme Mikey_UFC8.

        bonne continuation
        0
        1. C'est quoi qui ne marche pas ?
          0
        2. @Mikey_UFClorsque je coche ma case de ma ligne et j'appuie sur supprimer rien ne se fait voici mon code :

          de ma page "tickets.php"

          <table border="1"><tr>
          <th>Index ticket</th>
          <th>Numéro du ticket</th>
          <th>Nom du client</th>
          <th>Date du ticket</th>
          <th>Heure du Ticket</th>
          <th>Nom du Recepteur</th>
          <th>Interlocuteur client</th>
          <th>Sujet du ticket</th>
          <th>Affecté à</th>
          <th>Editer</th>

          </tr>

          <?php
          $retour = mysql_query('SELECT * FROM tb_ticket ORDER BY NumeroTicket ASC');
          while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les résultats
          {
          ?>

          <tr>

          <td><?php echo $donnees['IndexTicket']; ?></td>
          <td><?php echo $donnees['NumeroTicket']; ?></td>
          <td><?php echo $donnees['NomClient']; ?></td>
          <td><?php echo $donnees['DateTicket']; ?></td>
          <td><?php echo $donnees['HeureTicket']; ?></td>
          <td><?php echo $donnees['RecepteurTicket']; ?></td>
          <td><?php echo $donnees['InterlocuteurClient']; ?></td>
          <td><?php echo $donnees['SujetTicket']; ?></td>
          <td><?php echo $donnees['AffectationTicket']; ?></td>

          <td><input type='checkbox' name="suppr_\".rst["IndexTicket"]."_".rst["NumeroTicket"]'></td>
          </tr>
          <?php
          foreach($_POST as $nom => $val) // Pour chaque valeur venant du formulaire
          {
          if(substr($nom,0,6)=="suppr_") // Si c'est une case à cocher de suppression
          {
          $cle = substr($nom,6); // On enlève suppr_
          $IndexTicket = substr($cle,0,strpos($cle,"_")); // On récupère l'index
          $NumeroTicket = substr($cle,6); // On récupère le numéro
          mysql_query("DELETE FROM tb_ticket WHERE NumeroTicket=$NumeroTicket and IndexTicket=$IndexTicket"); // Suppression
          }
          }
          ?>
          <?php
          } // Fin de la boucle
          ?>

          </table>
          <P align=left>
          <center><input name="suppr_\" type=submit value="Supprimer"></center><br><br>
          <p align="center"><a href="index.php?erreur=logout"><strong>Vous déconnecter</strong></a></p>
          0
        3. @MIKAJe ne vois pas ton formulaire <form></form>, il est ailleurs ? ?
          0
        4. @Mikey_UFCil y a pa besoin de fomulaire dans cette page car c'est juste un visuel de ce que j'ai dans ma table ticket c'est tout.

          Enfette je t'explique : j'ai une page nouveauticket. php qui est un formulaire je rempli ce formulaire je l'envoi sa s'enregistre dans la base de donnée.

          Ensuite je clique sur le lien tickets sa m'affiche tous les tickets tous simplement.
          0
        5. @MIKASi tes cases à cocher ne sont pas dans un formulaire comment tu fais pour les submit et pour pouvoir supprimer tes tickets ?

          Et pourtant, tu as bien mis un bouton de type submit pour envoyer ton formulaire.
          Change son nom d'ailleurs.
          0
      3. je sais pas justement c'est que je cherche a faire depuis le debut d'aprem midi alors je vais les mettre dans le formulaire voir ce que sa donne.
        0
        1. Non, c'est un autre formulaire là.

          Il faut que la visualisation des tickets soit dans un formulaire :
          En gros il faut que tu rajoutes des balises form dans tickets.php et tu mets ça :
          foreach($_POST as $nom => $val) // Pour chaque valeur venant du formulaire
          {
          if(substr($nom,0,6)=="suppr_") // Si c'est une case à cocher de suppression
          {
          $cle = substr($nom,6); // On enlève suppr_
          $IndexTicket = substr($cle,0,strpos($cle,"_")); // On récupère l'index
          $NumeroTicket = substr($cle,6); // On récupère le numéro
          mysql_query("DELETE FROM tb_ticket WHERE NumeroTicket=$NumeroTicket and IndexTicket=$IndexTicket"); // Suppression
          }
          } 
          en début de fichier dans un
          if($_POST["nom_du_bouton_supprimer]){}
          0
          1. J'avais bien compris ce que tu voulais faire, je ne suis pas débile...
            <?php
            if($_POST["suppression"])
            {
              foreach($_POST as $nom => $val) // Pour chaque valeur venant du formulaire
              {
                if(substr($nom,0,6)=="suppr_") // Si c'est une case à cocher de suppression
                {
                  $cle = substr($nom,6); // On enlève suppr_
                  $IndexTicket = substr($cle,0,strpos($cle,"_")); // On récupère l'index
                  $NumeroTicket = substr($cle,6); // On récupère le numéro
                  mysql_query("DELETE FROM tb_ticket WHERE NumeroTicket=$NumeroTicket and IndexTicket=$IndexTicket"); // Suppression
                }
              }
            }
            ?>
            <form method="POST" action="tickets.php">
            <table border="1"><tr>
            <th>Index ticket</th>
            <th>Numéro du ticket</th>
            <th>Nom du client</th>
            <th>Date du ticket</th>
            <th>Heure du Ticket</th>
            <th>Nom du Recepteur</th>
            <th>Interlocuteur client</th>
            <th>Sujet du ticket</th>
            <th>Affecté à</th>
            <th>Editer</th>
            
            </tr>
            
            
            <?php
            $retour = mysql_query('SELECT * FROM tb_ticket ORDER BY NumeroTicket ASC');
            while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les résultats
            {
            ?>
            
            <tr>
            
            <td><?php echo $donnees['IndexTicket']; ?></td>
            <td><?php echo $donnees['NumeroTicket']; ?></td>
            <td><?php echo $donnees['NomClient']; ?></td>
            <td><?php echo $donnees['DateTicket']; ?></td>
            <td><?php echo $donnees['HeureTicket']; ?></td>
            <td><?php echo $donnees['RecepteurTicket']; ?></td>
            <td><?php echo $donnees['InterlocuteurClient']; ?></td>
            <td><?php echo $donnees['SujetTicket']; ?></td>
            <td><?php echo $donnees['AffectationTicket']; ?></td>
            
            <td><input type='checkbox' name="suppr_\".$donnees["IndexTicket"]."_".$donnees["NumeroTicket"]'></td>
            </tr>
            
            <?php
            } // Fin de la boucle
            ?>
            
            </table>
            <P align=left>
            <center><input name="suppression" type=submit value="Supprimer"></center><br><br>
            <p align="center"><a href="index.php?erreur=logout"><strong>Vous déconnecter</strong></a></p>
            </form>
            


            Essaye ça.
            0
            1. il me dit qu'il y a une erreur a cette ligne :

              if($_POST["suppression"])
              0
            2. @MIKARemplace par ça :
              if(isset($_POST) && $_POST["suppression"])
              0
            3. @Mikey_UFCbonjour

              j'ai bien remplacé par ce que tu m'avais donnée mais lorsque je clique sur supprimé sa m'envoie vers une otre page qui ne trouve pas.
              on dirait qu'il recherche une page !!
              voila si t'est toujour la ou que quelqu'un d'autre puisse m'aider sa serez tres jentil de votre part merci beaucoup.
              0
          2. C'est dans cette ligne :
            <form method="POST" action="tickets.php">
            qu'il faut que tu mettes la bonne page (celle de la page ou tu te trouves).
            0
            1. Tout merci de ton aide c 'est jenti ta part :

              oui

              j'ai deja modifier par la bonne page mais sa essaye toujour de m'envoyer sur une autre page qui me di introuvable!

              <form method="POST" action="LesTickets.php">
              0
            2. @lamzo74Quelle page ?
              0
            3. @Mikey_UFCcomment sa quelle page ? .....
              0
            4. @lamzo74Quelle page est introuvable ? quelle URL ?
              0
            5. @Mikey_UFCsa me m'afficher sa une page vierge avec comme titre :
              HTTP 404 Non trouvé

              et dans l url il y a bien la page concerné : http://localhost/test/LesTickets.php
              0
          3. je pensse que sa va vient lorsque qu'on clique sur supprimer il faut peut etre rajouter quelque chose au niveau de ce bouton pour que lorsqu'on clique sur supprimer sa va chercher le code qui permet de supprimer ? nan ?
            Qu'est ce que t'en pensse ?

            Ou alors mettre le code sur autre page qu'on appelle supprimer.php et on met le code dedans ou sur le form on renvoie ce code quand on clique sur supprimer ?

            J'attends ton avis! ^^
            0
            1. Bon, teste les valeurs de retour avec des echo :
              un
              echo "$nom $val<br />";
              juste après le foreach
              un
              echo "DELETE FROM tb_ticket WHERE NumeroTicket=$NumeroTicket and IndexTicket=$IndexTicket<br />"

              avant
              mysql_query("DELETE FROM tb_ticket WHERE NumeroTicket=$NumeroTicket and IndexTicket=$IndexTicket");
              0
              1. non il me met une faute a chaque endroit ou il y a le echo !
                0
            2. re je voudrais savoir a quoi sert " $cle" !

              Je voulais aussi te demander si on metté sa sur une autre page sa serez pa mieux ?
              0
              1. if($_POST["suppression"])
                {
                  foreach($_POST as $nom => $val) // Pour chaque valeur venant du formulaire
                  {
                    echo "$nom $val<br />";
                    if(substr($nom,0,6)=="suppr_") // Si c'est une case à cocher de suppression
                    {
                      $cle = substr($nom,6); // On enlève suppr_
                      $IndexTicket = substr($cle,0,strpos($cle,"_")); // On récupère l'index
                      $NumeroTicket = substr($cle,6); // On récupère le numéro
                      echo "DELETE FROM tb_ticket WHERE NumeroTicket=$NumeroTicket and IndexTicket=$IndexTicket<br />";
                      mysql_query("DELETE FROM tb_ticket WHERE NumeroTicket=$NumeroTicket and IndexTicket=$IndexTicket"); // Suppression
                    }
                  }
                }
                


                Si il n'y avait pas d'erreur avant, le echo ne peut pas faire d'erreur à moins biensur de ne pas mettre de ;
                0
                1. oui j'ai du faire des oubli de guillemet
                  alors je fait la procedure et sa m'affiche sa :

                  suppr_\ on
                  DELETE FROM tb_ticket WHERE NumeroTicket= and IndexTicket=
                  suppression Supprimer

                  avec en dessous toujour le tableaux avec les ligne .
                  0
                2. @lamzo74Il doit y avoir une erreur dans le nom des checkbox.
                  Affiche le code source de ta page web : (click droit => afficher la source) et vérifie que le nom de tes checkbox est de la forme :
                  suppr_XXXX_YYYY ou XXXX est l'indexTicket et YYYY le numéroTicket ou inversement.
                  0
                3. @Mikey_UFCdans la source mes checkbox je retrouve sa :

                  <td><input type='checkbox' name="suppr_\".<?php$donnees["IndexTicket"]."_".$donnees["NumeroTicket"]?></td>
                  </tr>

                  p.s: je sais si je te l'ai deja di mais pour créer la case a cocher j'ai rajouter un champs dans la table ticket que j'ai appelé "EditerTicket" donc ce qui donne que au dessus de la case a coche on retrouve editer un ticket.

                  il faudrait peut s'en servir nan ? pour dir "si case a cocher et que click supprimer" alors supprimer la ligne sinon rien faire" quelque chose comme ca.
                  J'ai vu aussi sur un forum que la personne avait di de faire que quand la case est coché s'est egal a 1 sinon c'est 0 quand elle n'est pas cocher.

                  Donc ce qui donnerais : si case a cocher=1 et que click supprimer" alors supprimer la ligne(via la requete delete) sinon rien faire
                  0
                4. @Mikey_UFCEt Au niveau du suppr j'ai sa dans le code source :

                  </head>
                  suppr_\ on<br />DELETE FROM tb_ticket WHERE NumeroTicket= and IndexTicket=<br />suppression Supprimer<br /><form method="POST" action="?page=4">
                  0
              2. La colonne que tu as rajouter dans la table ne sert à rien.
                <td><input type='checkbox' name="suppr_<?php echo $donnees["IndexTicket"]."_".$donnees["NumeroTicket"]?>"</td>

                Il faut que quand tu regardes la sources tu es :
                <input type='checkbox' name="suppr_A_32</td> 


                Sinon si ça ne marche pas remplace par :
                <?php
                echo "<td><input type='checkbox' name='suppr_".$donnees["IndexTicket"]."_".$donnees["NumeroTicket"]."'</td>
                ";
                ?>
                0
                1. okok merci!

                  On y est presque lol parce que maintenan sa m'affiche sa :

                  suppr_A_1 on
                  DELETE FROM tb_ticket WHERE NumeroTicket= and IndexTicket=A
                  suppression Supprimer

                  le suppr A_1 correspond bien a l'index et au numeroticket donc il sait quelle ligne à été cocher!

                  cependant la ligne ne supprime pas il manque que sa la suppression .
                  0
              3. Oups, c'est moi, remplace
                $NumeroTicket = substr($cle,6);
                par
                $NumeroTicket = substr($cle,strpos($cle,"_")+1);


                et si ça ne marche pas par :
                $temp_pos = strpos($cle,"_")+1;
                $NumeroTicket = substr($cle,$temp_pos);
                0
                1. c'est ce que j'ai fait, le numero ticket s'affiche maintenan mais sa ne supprime toujour pas la ligne
                  suppr_A_1 on
                  DELETE FROM tb_ticket WHERE NumeroTicket=1 and IndexTicket=A
                  suppression Supprimer

                  avec le tableau en dessous.
                  0
                2. Il me di aussi qu'il y a une faute a cette ligne decidement il aime pas cette ligne ^^:

                  if(isset($_POST) && $_POST["suppression"])
                  0
                3. @lamzo74C'est quoi le message d'erreur ?
                  0
                4. @Mikey_UFCle message d'erreur c'est celui la :

                  Notice: Undefined index: suppression in F:\Program Files\wamp\www\test\pages\LesTickets.php on line 18
                  0
                5. @lamzo74alors remplace par if(isset($_POST["suppression"])
                  0