checkbox

checkbox - PHP - Programmation

Marsh Posté le 20-10-2006 à 21:42:57    

Bonjour,
 
J'aurai besoin de récupérer des données en utilisant les checkbox mais dans les 2 sens :
 
- Cocher dans une liste apparente, le nom des personnes que je souhaite ajouter à ma requête d'insertion.
- Cocher également sur chacune d'entre elle sur la ligne  3 autre case checkbox qui m'indique le "statut" de ces personnes.
 
Voici mon code du tableau de sélection :
 
    <?php  
       
   // Requete de sélection dans la base :  infos adhérents = Table NAGEURS
   $sql = "SELECT nom, prenom  FROM nageurs WHERE ID_club='$ID_club_EM' ORDER BY nom ASC";
   $result = @mysql_query($sql);
   $nombre_resultat = @mysql_num_rows($result);
 
       
      for ($i=0;$i<$nombre_resultat;$i++) {  
              // On récupère les valeurs :
                  $nom = @mysql_result($result,$i,'nageurs.nom');
                  $prenom = @mysql_result($result,$i,'nageurs.prenom');
           
       
                         
?>
    <tr>  
      <td> <div align="center">  
          <input type="checkbox" name="checkbox[]" value="<?=$ID_nageur ?>">
        </div></td>
      <td><div align="left"><font color="#3E3E7D" size="2" face="Arial, Helvetica, sans-serif"><? echo "$nom, $prenom"; ?></font></div></td>
      <td><div align="center">  
          <input type="checkbox" name="checkbox_encadrant[]" value="encadrant">
        </div></td>
      <td><div align="center">  
          <input type="checkbox" name="checkbox_ouvreur[]" value="ouvreur">
        </div></td>
      <td><div align="center">  
          <input type="checkbox" name="checkbox_serre_file[]" value="serre_file">
        </div></td>
      <td><div align="center">  
          <input name="nb_descente" type="text" size="5" maxlength="2">
        </div></td>
    </tr>
    <?
}
 ?>
 
 
et voici mon code de récupération avant insertion :
 
 
// On récupère la valeur MM_insert4 envoyé par le formulaire ------------------------------------------------------- 4
      $MM_insert4 = $HTTP_POST_VARS["MM_insert4"];
      // Si cette valeur existe , c'est qu'on a posté via le formulaire
      if ($MM_insert4=="form4" )
      {
                               
   // On récupère toutes les valeurs passées dans le formulaire
      $post_ID_carnet_NEV= $HTTP_POST_VARS['ID_carnet_NEV'];
 
   for ($u = 0; $u < count($checkbox); $u++)  
         {  
         $post_ID_nageur= $checkbox[$u];
         $post_encadrant= $checkbox_encadrant[$u];
         $post_ouvreur= $checkbox_ouvreur[$u];
         $post_serre_file= $checkbox_serre_file[$u];
         $post_nb_descente= $HTTP_POST_VARS['nb_descente'];
 
                         
 
   // On crée la requete d'insertion
   $sql_participants_sortie_club = "INSERT INTO carnet_nev_participants (ID_carnet_NEV, ID_nageur, encadrant, ouvreur, serre_file, nb_descente)
   VALUES ('$post_ID_carnet_NEV', '$post_ID_nageur', '$post_encadrant', '$post_ouvreur', '$post_serre_file', '$post_nb_descente')";
                         
   // On éxécute la requete
   @mysql_query($sql_participants_sortie_club);
   
                                                 }
                                                 
       
    } // fin du post formulaire

Reply

Marsh Posté le 20-10-2006 à 21:42:57   

Reply

Marsh Posté le 20-10-2006 à 21:58:22    

Remarques sur la requête SQL:
http://php.net/mysql_real_escape
http://php.net/get_magic_quotes_gpc
http://php.net/get_magic_quotes_runtime
http://php.net/stripslashes
ORDER BY est ASC par défaut
 
Ajoute une balise [ code ] dans ton poste pour qu'on puisse te donner les numéros de ligne où ça coince.

Reply

Marsh Posté le 20-10-2006 à 22:47:10    

@ sert à ne pas afficher le message d'erreur éventuellement retourné par la fonction.
Si tu le mets partout, comment peux tu savoir si ca merde quelque part ou si tout se passe bien?
 
PS : Vu l'absence de balise code pour différencier le code et les questions, je n'ai pas poussé mon analyse plus loin.

Reply

Marsh Posté le 22-10-2006 à 13:34:32    

Voici mon code du tableau de sélection :  
 

Code :
  1. <?php 
  2.      
  3.    // Requete de sélection dans la base :  infos adhérents = Table NAGEURS  
  4.    $sql = "SELECT nom, prenom  FROM nageurs WHERE ID_club='$ID_club_EM' ORDER BY nom ASC";
  5.    $result = @mysql_query($sql);
  6.    $nombre_resultat = @mysql_num_rows($result);
  7.      
  8.       for ($i=0;$i<$nombre_resultat;$i++) { 
  9.               // On récupère les valeurs :  
  10.                   $nom = @mysql_result($result,$i,'nageurs.nom');
  11.                   $prenom = @mysql_result($result,$i,'nageurs.prenom');
  12.          
  13.      
  14.                        
  15. ?>
  16.     <tr> 
  17.       <td> <div align="center"> 
  18.           <input type="checkbox" name="checkbox[]" value="<?=$ID_nageur ?>">
  19.         </div></td>
  20.       <td><div align="left"><font color="#3E3E7D" size="2" face="Arial, Helvetica, sans-serif"><? echo "$nom, $prenom"; ?></font></div></td>
  21.       <td><div align="center"> 
  22.           <input type="checkbox" name="checkbox_encadrant[]" value="encadrant">
  23.         </div></td>
  24.       <td><div align="center"> 
  25.           <input type="checkbox" name="checkbox_ouvreur[]" value="ouvreur">
  26.         </div></td>
  27.       <td><div align="center"> 
  28.           <input type="checkbox" name="checkbox_serre_file[]" value="serre_file">
  29.         </div></td>
  30.       <td><div align="center"> 
  31.           <input name="nb_descente" type="text" size="5" maxlength="2">
  32.         </div></td>
  33.     </tr>
  34.     <?
  35. }
  36. ?>


 
et voici mon code de récupération avant insertion :  
 

Code :
  1. // On récupère la valeur MM_insert4 envoyé par le formulaire ------------------------------------------------------- 4  
  2.       $MM_insert4 = $HTTP_POST_VARS["MM_insert4"];
  3.       // Si cette valeur existe , c'est qu'on a posté via le formulaire  
  4.       if ($MM_insert4=="form4" )
  5.       {
  6.                              
  7.    // On récupère toutes les valeurs passées dans le formulaire  
  8.       $post_ID_carnet_NEV= $HTTP_POST_VARS['ID_carnet_NEV'];
  9.    for ($u = 0; $u < count($checkbox); $u++) 
  10.          { 
  11.          $post_ID_nageur= $checkbox[$u];
  12.          $post_encadrant= $checkbox_encadrant[$u];
  13.          $post_ouvreur= $checkbox_ouvreur[$u];
  14.          $post_serre_file= $checkbox_serre_file[$u];
  15.          $post_nb_descente= $HTTP_POST_VARS['nb_descente'];
  16.                        
  17.    // On crée la requete d'insertion  
  18.    $sql_participants_sortie_club = "INSERT INTO carnet_nev_participants (ID_carnet_NEV, ID_nageur, encadrant, ouvreur, serre_file, nb_descente)
  19.    VALUES ('$post_ID_carnet_NEV', '$post_ID_nageur', '$post_encadrant', '$post_ouvreur', '$post_serre_file', '$post_nb_descente')";
  20.                        
  21.    // On éxécute la requete  
  22.    @mysql_query($sql_participants_sortie_club);
  23.    
  24.                                                  }
  25.                                                
  26.      
  27.     } // fin du post formulaire

Reply

Marsh Posté le 22-10-2006 à 13:37:37    


OK merci Omega2 pour l'astuce du @ ! :p  
 
Mon soucis réside dans le lien entre les valeurs apporté aux checkbox entre les lignes 19 et 32 du premier code et le for qui récupère les données entre les lignes 10 et 16 du 2ème code


Message édité par Ma' Dalton le 22-10-2006 à 13:39:04
Reply

Marsh Posté le 23-10-2006 à 15:21:48    

Si je comprend bien, dans le premier script, t'as une boucle qui cré des séries de checkbox et dans le second une seconde boucle qui relit le contenu de ces checkbox là.
 
Vu que les navigateur ne retourne pas de valeur pour les checkbox décoché (pas même une valeur vide) comment espéres tu savoir laquelle n'est pas coché alors que tu mets la même valeur pour toutes les checkbox qui ont le même nom? Avec ton code actuel le mieux que tu peux savoir c'est combien ont été coché.
 
Solution : donner une valeur numérique (celui de l'id du nageur) à chaque checkbox de même nom. De cette maniére, il suffit de vérifier si l'id de chaque nageur est contenu par le tableau correspondant à une série de checkbox (par exemple "checkbox_ouvreur[]" ) pour savoir si la checkbox était ou non coché.

Reply

Marsh Posté le 23-10-2006 à 21:09:09    

Bonsoir Omega2,
Alors j'essaye de te suivre ....
J'ai inclu une valeur numérique aux checkbox de même nom, afin de les différencier , c'est ça ?
 
[ code ]
    <?php  
   
 // Requete de sélection dans la base :  infos adhérents = Table NAGEURS
 $sql = "SELECT nom, prenom, ID_nageur  FROM nageurs WHERE ID_club='$ID_club_EM' ORDER BY nom ASC";
 $result = @mysql_query($sql);
 $nombre_resultat = @mysql_num_rows($result);
 
   
  for ($i=0;$i<$nombre_resultat;$i++) {  
      // On récupère les valeurs :
      $nom = @mysql_result($result,$i,'nom');
      $prenom = @mysql_result($result,$i,'prenom');
      $ID_nageur_sortie = @mysql_result($result,$i,'ID_nageur');
   
         
?>
    <tr>  
      <td> <div align="center">  
          <input type="checkbox" name="checkbox[]" value="<? echo "$ID_nageur_sortie"; ?>">
        </div></td>
      <td><div align="left"><font color="#3E3E7D" size="2" face="Arial, Helvetica, sans-serif"><? echo "$nom, $prenom"; ?></font></div></td>
      <td><div align="center">  
          <input type="checkbox" name="checkboxE[]" value="<? echo "$ID_nageur_sortie"; ?>">
        </div></td>
      <td><div align="center">  
          <input type="checkbox" name="checkboxO[]" value="<? echo "$ID_nageur_sortie"; ?>">
        </div></td>
      <td><div align="center">  
          <input type="checkbox" name="checkboxS[]" value="<? echo "$ID_nageur_sortie"; ?>">
        </div></td>
      <td><div align="center">  
          <input name="nb_descente[]" type="text" size="5" maxlength="2">
        </div></td>
    </tr>
    <?
}
 ?>
[ / code ]
 
 
 
[ code ]
        // On récupère toutes les valeurs passées dans le formulaire
 
        for ($u = 0; $u < count($checkbox); $u++)  
        {  
        $post_ID_carnet_NEV= $HTTP_POST_VARS['ID_carnet_NEV']; // ok
        $post_ID_nageur= $checkbox[$u]; // ok
        $post_encadrant= $checkboxE[$u]; // encadrant
        $post_ouvreur= $checkboxO[$u]; // Ouvreur
        $post_serre_file= $checkboxS[$u]; // Serre file
        $post_nb_descente= $HTTP_POST_VARS['nb_descente[$u]'];
 
        // On crée la requete d'insertion
        $sql_participants_sortie_club = "INSERT INTO carnet_nev_participants (ID_carnet_NEV, ID_nageur, encadrant, ouvreur, serre_file, nb_descente)
         VALUES ('$post_ID_carnet_NEV', '$post_ID_nageur', '$post_encadrant', '$post_ouvreur', '$post_serre_file', '$post_nb_descente')";
         
        // On éxécute la requete
        @mysql_query($sql_participants_sortie_club);
        }
[ / code ]
 
 
ce que tu m'as dis marche,
J'ai les 2 première valeurs qui s'insert dans la bdd (  $post_ID_carnet_NEV et $post_ID_nageur)
mais maintenant .... comment récupérer les autres ?
La requête s'effectue effectivement exactement le nb de personne coché, pas de soucis de ce côté là, mais le contenu des insertion n'est pas complet sur à partir de la 2ème .... donc y a un bug ...


Message édité par Ma' Dalton le 23-10-2006 à 21:12:00
Reply

Marsh Posté le 24-10-2006 à 11:26:47    

lit la documentation sur les fonctions in_array ( http://fr2.php.net/manual/fr/function.in-array.php ) array_flip ( http://fr2.php.net/manual/fr/function.array-flip.php )
Ensuite essaye d'adapter ton code en utilisant une de ces deux fonctions.
A noter que print_r($tab) permet de savoir ce que contient un tableau. Utile pour comprendre ce qui se passe.

Reply

Marsh Posté le 25-10-2006 à 19:54:40    

j'vais essayer , merci :d

Reply

Marsh Posté le 26-10-2006 à 22:33:21    

Merci Omega2, la solution était bien en utilisant le in_array !
merci

Reply

Marsh Posté le 26-10-2006 à 22:33:21   

Reply

Marsh Posté le 14-12-2007 à 13:18:55    

Ma'Daltom tu peut m'envoyer le reste de ton code. merci

Reply

Marsh Posté le 14-12-2007 à 13:21:16    

OU bien un autre  pouras m'aide en m'envoyeant le reste du code de Ma'Dalton si peut le faire

Reply

Marsh Posté le 14-12-2007 à 13:30:07    

Pelle d'or of teh day. [:pingouino]
 
Si tu veux du code, tu prends tes mains et ton clavier, un beau notepad, et tu pianotes comme un grand...

Reply

Marsh Posté le 14-12-2007 à 13:30:45    

Ce sujet a été fermé par Elmoricq

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed