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 :

insertions multiples cases à cocher [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué

    Profil pro
    Pompier
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 171
    Points
    171
    Par défaut insertions multiples cases à cocher
    bonjour,
    je voudrais via un formulaire tenir un registre de présence.

    J'ai donc une liste de toutes les personnes et en face, une case à cocher.
    Le référant entre les présents et quand on clique sur "enregistrer",
    soit ça n'ajoute que ceux pour qui case cochée
    soit ça ajout 0 ou 1

    Nom : liste.jpg
Affichages : 65
Taille : 65,4 Ko

    je n'ai aucune idée de la façon dont il faut procéder car je n'ai jamais eu à gérer un enregistrement multi-lignes.

    (J'y connais pas grand chose)

    Faut-il faire un SELECT Name puis un tableau
    ou
    Faire un array?

    Et comment procède-t-on pour l'enregistrement??????

    Merci d'avance pour votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    pour chaque ligne, je crois que tu peux faire quelque chose dans le genre, on considérant que tu affiche ton tableau une ligne= une personne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <tr>
      <td>
        <input type="checkbox" name="inputName[<? echo $person_id; ?>][]" value="taValue1"/>
      </td>
      <td>
        <input type="checkbox" name="inputName[<? echo $person_id; ?>][]" value="taValue2"/>
      </td>
      <td>
        <input type="checkbox" name="inputName[<? echo $person_id; ?>][]" value="taValue3"/>
      </td>
    </tr>

    coté récupération, quelque chose dans le genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $inputNames= $_POST['inputName']; //on récupère le tableau de tes inputs de name inputName
    //pour chaque inputs, on récupère la clef de la personne, et son tableau de choix checkboxes
    foreach($inputNames as $person_id => $person_values){ //traitement
      echo "<br/>j'ai récupérer la personne : ".$person_id; //juste pour que t'es de l'info si tu test le script
      foreach($values as $value){
        var_dump($value);//affiche la valeur (taValue1 etc..) des cases cochées
      }
    }

  3. #3
    Membre habitué

    Profil pro
    Pompier
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 171
    Points
    171
    Par défaut
    merci pour ta réponse je test ça et je te tiens au courant.

  4. #4
    Membre habitué

    Profil pro
    Pompier
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 171
    Points
    171
    Par défaut
    Bon j'ai réussi a obtenir la donnée,
    mais la mise en page est pourrie et je n'ai pas encore réglé le problème pour l'enregistrement.
    Je pense effectivement que c'est dans le nom de la chekbox que tout se joue.

    voici la mise en page actuelle
    Nom : img.jpg
Affichages : 57
Taille : 29,1 Ko

    le code
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    <?php
     
    // on se connecte à notre base
    $base = mysql_connect ('localhost', 'root', '');  
    mysql_select_db ('tuto', $base) ;  
    ?>
     
    <html>
    <head>
    <title>SGDF</title>
    </head>
    <body>
    <table border=1>
    <tr>
    <td>
     Nom <br/>
    <?php
    //LISTE DES NOMS
     
    $sql5 = 'SELECT scout.matricule, scout.nom, mutuelle.mutuelle FROM scout LEFT JOIN mutuelle ON scout.matricule = mutuelle.matricule ORDER by nom ';  
    // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
      $req5 = mysql_query($sql5) or die('Erreur SQL !<br />'.$sql5.'<br />'.mysql_error());  ?>
     
     
     
    <table border=1>
    <?php
    // on va scanner tous les tuples un par un
    while ($data5 = mysql_fetch_array($req5)) {
      ?>
    <tr><td>
    <?php
    // on affiche les résultats
    echo ''.$data5['nom'].'<br/> ';
     ?>
    </td><td> 
    <?php
    echo ''.$data5['mutuelle'].'<br/> ';
     ?>
    </td></tr></td>
    <?php
    }
     ?>
    </table>
    </td>
     
     
    <?php
    // LISTE DES DATES
     
    $sql3 = 'SELECT presence.date FROM presence GROUP BY presence.date';  
    // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
      $req3 = mysql_query($sql3) or die('Erreur SQL !<br />'.$sql3.'<br />'.mysql_error());  ?>
     
    <?php
    // on va scanner tous les tuples un par un
    while ($data3 = mysql_fetch_array($req3)) {
     ?>
     <td>
    <?php
    // on affiche les résultats
    echo ''.$data3['date'].'<br/> ';
    // lancement de la requete
    $sql2 = 'SELECT * FROM scout LEFT JOIN presence ON scout.matricule = presence.matricule  WHERE date=" '.$data3['date'].'"   Group By nom ';  
    //echo $sql2;
    // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
      $req2 = mysql_query($sql2) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error()); 
    ?>
    <table border=1>
    <?php
    // on va scanner tous les tuples un par un
    while ($data2 = mysql_fetch_array($req2)) { 
    ?>
    <tr><td>
    <input type="checkbox" name="tranche5" accesskey="7" tabindex="7" <?php if ($data2['presence']=="1"){?>checked="checked"?>
        <?php }?>
    </td></tr></td>
    <?php
    }
    ?>
     
     
    </table>
    <?php
     $sql4='SELECT mutuelle.mutuelle, Count(mutuelle.mutuelle) AS CompteDemutuelle, presence.date FROM (mutuelle INNER JOIN scout ON mutuelle.matricule = scout.matricule) INNER JOIN presence ON scout.matricule = presence.matricule WHERE presence.presence=1 AND  date=" '.$data3['date'].'" GROUP BY mutuelle.mutuelle, presence.date order by presence.date';
     $req4 = mysql_query($sql4) or die('Erreur SQL !<br />'.$sql3.'<br />'.mysql_error());
    while ($data4 = mysql_fetch_array($req4)) {
     
    echo (''.$data4['mutuelle'].'  '.$data4['CompteDemutuelle'].'<br/>');}
     
     }
    ?>
     </td>
     
    </table>
    Par rapport à mon code, est-ce que ça pourrait pas être plus simple.
    Surtout pour la mise en page???

    Merci d'avance

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    en effet, c'est super moche ^^

    Deja, il faut nommer ses variables avec des noms compréhensible quand je regarde ton code $req5 j'ai aucune idée de ce que ca contient.
    Puis on essaye de séparer son code pour garder le tout lisible et surtout, ne pas faire d'erreurs de logique

    essaye donc ceci
    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
    <?php
     
    // on se connecte à notre base
    $base = mysql_connect ('localhost', 'root', '');  
    mysql_select_db ('tuto', $base) ;  
     
    //LISTE DES NOMS
     
    $sql5 = 'SELECT scout.matricule, scout.nom, mutuelle.mutuelle FROM scout LEFT JOIN mutuelle ON scout.matricule = mutuelle.matricule ORDER by nom ';  
      $req_nom = mysql_query($sql5) or die('Erreur SQL !<br />'.$sql5.'<br />'.mysql_error()); 
     
    // LISTE DES DATES
     
    $sql3 = 'SELECT presence.date FROM presence GROUP BY presence.date';  
    $req_date = mysql_query($sql3) or die('Erreur SQL !<br />'.$sql3.'<br />'.mysql_error());  
     
    // OPERATION PAR DATE: présences et totaux
    $totaux=array();
    $presences=array();
     
    while($data_date = mysql_fetch_array($req_date)) {
          $sql4='SELECT mutuelle.mutuelle, Count(mutuelle.mutuelle) AS CompteDemutuelle, presence.date FROM (mutuelle INNER JOIN scout ON mutuelle.matricule = scout.matricule) INNER JOIN presence ON scout.matricule = presence.matricule WHERE presence.presence=1 AND  date=" '.$data_date['date'].'" GROUP BY mutuelle.mutuelle, presence.date order by presence.date';
          $req_totaux = mysql_query($sql4) or die('Erreur SQL !<br />'.$sql3.'<br />'.mysql_error());
     
          $sql2 = 'SELECT * FROM scout LEFT JOIN presence ON scout.matricule = presence.matricule  WHERE date=" '.$data_date['date'].'"   Group By nom ';  
     
          $req_presence = mysql_query($sql2) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error()); 
     
     
          while ($data_totaux = mysql_fetch_array($req_totaux)) {
            //on remplit un tableau qui contient uniquement les informations qu'on va manipuler, c'est plus pratique
            $totaux[$data_date['date']][$data_totaux['mutuelle']] = $data4['CompteDemutuelle']);
     
          }
     
         $presences[$data_date['date']]=array();
          while ($data_presence = mysql_fetch_array($req_presence )) {
     
            $presences[$data_date['date']][$data_presence['nom']] = $data_presence['presence'];
     
          }
     
    //ici il faut continuer a mettre des traitements
    ?>
    puis la présentation, a la suite
    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
     
    <!-- entete du tableau -->
    <table border=1>
      <tr>
       <th>Nom</th>
       <?php
        while($data_date = mysql_fetch_array($req_date)) {
          echo "<th>".$data_date['date']."</th>";
        }?>
      </tr>
     
     
    <!-- une ligne = une personne -->
    <?php
    while( $data_nom = mysql_fetch_array($req_nom) ) {?>
      <tr>
        <td><?php echo $data_nom ['nom'] ?> mutuelle <?php echo $data_nom ['mutuelle'] ?></td> <?php
        while($data_date = mysql_fetch_array($req_date)) { ?>
          <td>
              <input type="checkbox" name="tranche5" <?php echo $presences[$data_date['date']][$data_nom ['nom']]==1?'checked="checked"':'' ?>
          </td> <?php
        } ?>
      </tr><?php
    }?>
    <tr>
     <th>Totaux</th>
    <?php
       while($data_date = mysql_fetch_array($req_date)) {   ?>
         <td>
            <? foreach($totaux[$data_date['date']] as $mutuelle => $count_value) {
                echo $mutuelle.": ".$count_value;
             }?>
          </td>;
        }?>
    </tr>
    </table>
    Ca ne contient pas les checkboxes car je ne comprend pas a quoi elles correspondes. Tu regardes la présence d'une personne a une mutuelle pour n dates ou tu essaye de connaitre la présence d'une personne pour beaucoup de mutuelles pour chaque date?

  6. #6
    Membre habitué

    Profil pro
    Pompier
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 171
    Points
    171
    Par défaut
    en fait c'est une liste de personnes avec à côté la mutuelle à laquelle ils appartiennent.
    les dates correspondent à 1 journée de réunion et la case à cocher à savoir s'ils étaient présent ou absent.
    En dessous, c'est le total de présences par type de mutuelle pour la date donnée.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    j'ai édité le code. ca devrait marcher (même si j'ai surement fait quelques erreurs d'inatention que tu vas devoir debugger: j'ai pas testé)

  8. #8
    Membre habitué

    Profil pro
    Pompier
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 171
    Points
    171
    Par défaut
    bon ça a déjà une meilleur forme

    Nom : img.jpg
Affichages : 48
Taille : 24,5 Ko

    le code:

    En fait pour chaque personne à la date de la colonne je voudrais que la case à cocher soit cochée si la personne était présente à la réunion
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    <?php
    
    // on se connecte à notre base
    $base = mysql_connect ('localhost', 'root', '');  
    mysql_select_db ('tuto', $base) ;  
    ?>
    
    <html>
    <head>
    <title>SGDF</title>
    </head>
    <body>
    
    <?php
     
    // on se connecte à notre base
    $base = mysql_connect ('localhost', 'root', '');  
    mysql_select_db ('tuto', $base) ;  
     
    //LISTE DES NOMS
     
    $sql5 = 'SELECT scout.matricule, scout.nom, mutuelle.mutuelle FROM scout LEFT JOIN mutuelle ON scout.matricule = mutuelle.matricule ORDER by nom ';  
      $req_nom = mysql_query($sql5) or die('Erreur SQL !<br />'.$sql5.'<br />'.mysql_error()); 
     
    // LISTE DES DATES
     
    $sql3 = 'SELECT presence.date FROM presence GROUP BY presence.date';  
    $req_date = mysql_query($sql3) or die('Erreur SQL !<br />'.$sql3.'<br />'.mysql_error());  
     
    
    ?>
    
     
    <!-- entete du tableau -->
    <table border=1>
      <tr>
       <th>Nom</th>
       <th>Mutuelle</th>
       <?php
        while($data_date = mysql_fetch_array($req_date)) {
          echo "<th>".$data_date['date']."</th>";
        }?>
      </tr>
     
     
    <!-- une ligne = une personne -->
    <?php
    while( $data_nom = mysql_fetch_array($req_nom) ) {?>
      <tr>
        <td><?php echo $data_nom ['nom'] ?></td>
        <td><?php echo $data_nom ['mutuelle'] ?></td> 
    <?php
    // LISTE DES DATES (SI je remets pas la requête, je n'ai pas d'affichage à chaque ligne)
     
     $sql3 = 'SELECT presence.date FROM presence GROUP BY presence.date';  
     $req_date = mysql_query($sql3) or die('Erreur SQL !<br />'.$sql3.'<br />'.mysql_error());  
     
    
        while($data_date = mysql_fetch_array($req_date)) {  
    
    
          //LA JE VOUDRAIS pour l'intersection matricule-date si présent case à cocher = checked
          // $sql2 = 'SELECT * FROM scout LEFT JOIN presence ON scout.matricule = presence.matricule  WHERE presence.date=" '.$data_date['date'].'" AND presence.matricule='.$data_nom ['matricule'].'    Group By nom ';  
         
          // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
          // $req2 = mysql_query($sql2) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error()); 
     
          // on va scanner tous les tuples un par un
          // while ($data2 = mysql_fetch_array($req2)) {
     
         ?>
    
         <td align=center><div>
          <input type="checkbox" name="tranche5" accesskey="7" tabindex="7" <?php //if ($data2['presence']=="1"){?>checked="checked"?>
         
         <?php 
         //} 
         ?> 
         </div> 
         </td>
         <?php
         } ?>
      </tr>
    <?php
    }?>

  9. #9
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    en théorie ta requête va marcher (enfin si tu enleve le group by ) mais si tu as 50 personnes et 10 dates ca va faire 500 requete, c'est beaucoup trop.
    Essaye de trouver un moyen de faire une seule requete qui prend toutes les présences des personnes mais qu'on stock sous la forme d'un tableau $tableau['matriculePersonne']['date']

    un fois dans le tableau, tu as deja accès au matricule et date de la ligne/colonne en cours, tu peux donc retrouver si la case est a coché ou non.

    Je ne pisse plus de code a toi de trouver

  10. #10
    Membre habitué

    Profil pro
    Pompier
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 171
    Points
    171
    Par défaut
    bon et bien la partie croidée dynamique fonctionne très bien.
    Merci bien pour l'aide de gototoq

    Nom : img.jpg
Affichages : 47
Taille : 24,4 Ko

    Par contre, si je mets le code que tu as donné, je n'ai plus les dates en tête de colonne et rien d'inscrit dans la colonne des totaux ?

    code de l'image
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    <html>
    <head>
    <title>SGDF</title>
    </head>
    <body>
     
    <?php
     
    // on se connecte à notre base
    $base = mysql_connect ('localhost', 'root', '');  
    mysql_select_db ('scout', $base) ;  
     
    //LISTE DES NOMS
     
    $sql5 = 'SELECT scout.matricule, scout.nom, mutuelle.mutuelle FROM scout LEFT JOIN mutuelle ON scout.matricule = mutuelle.matricule ORDER by nom ';  
      $req_nom = mysql_query($sql5) or die('Erreur SQL !<br />'.$sql5.'<br />'.mysql_error()); 
     
    // LISTE DES DATES
     
    $sql3 = 'SELECT presence.date FROM presence GROUP BY presence.date';  
    $req_date = mysql_query($sql3) or die('Erreur SQL !<br />'.$sql3.'<br />'.mysql_error());  
     
    ?>
     
     
    <!-- entete du tableau -->
    <table border=1>
      <tr>
       <th>Nom</th>
       <th>Mutuelle</th>
       <?php
        while($data_date = mysql_fetch_array($req_date)) {
          echo "<th>".$data_date['date']."</th>";
        }?>
     
      </tr>
     
     
    <!-- une ligne = une personne -->
    <?php
    while( $data_nom = mysql_fetch_array($req_nom) ) {?>
      <tr>
        <td><?php echo $data_nom ['nom'] ?></td>
        <td><?php echo $data_nom ['mutuelle'] ?></td> 
    <?php
    // LISTE DES DATES (SI je remets pas la requête, je n'ai pas d'affichage à chaque ligne)
     
     $sql3 = 'SELECT presence.date FROM presence GROUP BY presence.date';  
      $req_date = mysql_query($sql3) or die('Erreur SQL !<br />'.$sql3.'<br />'.mysql_error());  
     
     
        while($data_date = mysql_fetch_array($req_date)) {  
     
     
          //LA JE VOUDRAIS pour l'intersection matricule-date si présent case à cocher = checked
            $sql2 = 'SELECT presence.presence FROM scout LEFT JOIN presence ON scout.matricule = presence.matricule  WHERE presence.date=" '.$data_date['date'].'" AND presence.matricule='.$data_nom ['matricule'].'    Group By nom ';  
     
          // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
             $req2 = mysql_query($sql2) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error()); 
     
          // on va scanner tous les tuples un par un
             $data2 = ($data = mysql_fetch_array($req2));  
     
         ?>
     
         <td align=center><div>
         <?php
    	// echo $data2['presence'];
    	 ?>
          <input type="checkbox" name="tranche5" accesskey="7" tabindex="7" <?php  if ($data2['presence']=="1"){?>checked="checked">
     
         <?php 
          }
         ?> 
         </div> 
         </td>
         <?php
         } }
    	 ?>
      </tr>
    </table>
    </body>
    </html>
    voici le code avec la somme des présents en fonction de la mutuelle

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    <html>
    <head>
    <title>SGDF</title>
    </head>
    <body>
     
    <?php
     
    // on se connecte à notre base
    $base = mysql_connect ('localhost', 'root', '');  
    mysql_select_db ('scout', $base) ;  
     
    //LISTE DES NOMS
     
    $sql5 = 'SELECT scout.matricule, scout.nom, mutuelle.mutuelle FROM scout LEFT JOIN mutuelle ON scout.matricule = mutuelle.matricule ORDER by nom ';  
      $req_nom = mysql_query($sql5) or die('Erreur SQL !<br />'.$sql5.'<br />'.mysql_error()); 
     
    // LISTE DES DATES
     
    $sql3 = 'SELECT presence.date FROM presence GROUP BY presence.date';  
    $req_date = mysql_query($sql3) or die('Erreur SQL !<br />'.$sql3.'<br />'.mysql_error());  
     
    // OPERATION PAR DATE: présences et totaux
     $totaux=array();
     $presences=array();
     
     while($data_date = mysql_fetch_array($req_date)) {
          $sql4='SELECT mutuelle.mutuelle, Count(mutuelle.mutuelle) AS CompteDemutuelle, presence.date FROM (mutuelle INNER JOIN scout ON mutuelle.matricule = scout.matricule) INNER JOIN presence ON scout.matricule = presence.matricule WHERE presence.presence=1 AND  date=" '.$data_date['date'].'" GROUP BY mutuelle.mutuelle, presence.date order by presence.date';
          $req_totaux = mysql_query($sql4) or die('Erreur SQL !<br />'.$sql4.'<br />'.mysql_error());
     
          $sql8 = 'SELECT presence.presence, scout.nom FROM scout LEFT JOIN presence ON scout.matricule = presence.matricule  WHERE date=" '.$data_date['date'].'"    ';  
     
          $req_presence = mysql_query($sql8) or die('Erreur SQL !<br />'.$sql8.'<br />'.mysql_error()); 
     
     
          while ($data_totaux = mysql_fetch_array($req_totaux)) {
            //on remplit un tableau qui contient uniquement les informations qu'on va manipuler, c'est plus pratique
            $totaux[$data_date['date']][$data_totaux['mutuelle']] = $data_totaux['CompteDemutuelle'];
     
          }
     
         $presences[$data_date['date']]=array();
          while ($data_presence = mysql_fetch_array($req_presence )) {
     
            $presences[$data_date['date']][$data_presence['nom']] = $data_presence['presence'];
     
          }
    }
     
    ?>
     
     
    <!-- entete du tableau -->
    <table border=1>
      <tr>
       <th>Nom</th>
       <th>Mutuelle</th>
       <?php
        while($data_date = mysql_fetch_array($req_date)) {
          echo "<th>".$data_date['date']."</th>";
        }?>
     
      </tr>
     
     
    <!-- une ligne = une personne -->
    <?php
    while( $data_nom = mysql_fetch_array($req_nom) ) {?>
      <tr>
        <td><?php echo $data_nom ['nom'] ?></td>
        <td><?php echo $data_nom ['mutuelle'] ?></td> 
    <?php
    // LISTE DES DATES (SI je remets pas la requête, je n'ai pas d'affichage à chaque ligne)
     
     $sql3 = 'SELECT presence.date FROM presence GROUP BY presence.date';  
      $req_date = mysql_query($sql3) or die('Erreur SQL !<br />'.$sql3.'<br />'.mysql_error());  
     
     
        while($data_date = mysql_fetch_array($req_date)) {  
     
     
          //LA JE VOUDRAIS pour l'intersection matricule-date si présent case à cocher = checked
            $sql2 = 'SELECT presence.presence FROM scout LEFT JOIN presence ON scout.matricule = presence.matricule  WHERE presence.date=" '.$data_date['date'].'" AND presence.matricule='.$data_nom ['matricule'].'    Group By nom ';  
     
          // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
             $req2 = mysql_query($sql2) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error()); 
     
          // on va scanner tous les tuples un par un
             $data2 = ($data = mysql_fetch_array($req2));  
     
         ?>
     
         <td align=center><div>
         <?php
    	// echo $data2['presence'];
    	 ?>
          <input type="checkbox" name="tranche5" accesskey="7" tabindex="7" <?php  if ($data2['presence']=="1"){?>checked="checked">
     
         <?php 
          }
         ?> 
         </div> 
         </td>
         <?php
         } }
    	 ?>
      </tr>
     
    <tr><th></th>
     <th>Totaux</th>
    <?php
       while($data_date = mysql_fetch_array($req_date)) {   ?>
         <td>
            <? foreach($totaux[$data_date['date']] as $mutuelle => $count_value) {
                echo $mutuelle.": ".$count_value;
             }?>
          </td><?php
        }?>
    </tr>
     
     
    </table>
    </body>
    </html>

  11. #11
    Membre habitué

    Profil pro
    Pompier
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 171
    Points
    171
    Par défaut
    bon, comme quoi à force de perséverance, j'ai le résultat escompté.
    Merci à vous pour votre aide.

    Nom : img1.JPG
Affichages : 44
Taille : 18,7 Ko

    Je vais maintenant essayer de m'attaquer à l'insertion multiple...

  12. #12
    Membre habitué

    Profil pro
    Pompier
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 171
    Points
    171
    Par défaut
    voilà après quelques recherches et correction de petites coquilles; voici le code qui fonctionne


    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
    <!DOCTYPE HTML>
    <html>
    	<head>
    		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    		<title>Gestion des présences</title>
    		<link rel="stylesheet" type="text/css" href="styles/screen.css" />
    	</head>
    	<body>
        <form method="post" action="modificationp.php" >
        <input type="submit" name="Valider" value="Valider">
     <?php
     if (isset($_POST['Valider'])){ 
    	$inputName= $_POST['inputName'];
    	foreach ($inputName as $inputName){
    		echo"<br/> j'ai récupéré la personne :".$inputName."";
    	}
     }
     
    	  // on se connecte à notre base
    $base = mysql_connect ('localhost', 'root', '');  
    mysql_select_db ('scout', $base) ; 
     // Requete unité
    	  $sqlcentre = "SELECT * FROM scout WHERE unite=4" ;
    	   $requeteC = mysql_query($sqlcentre) or die('Erreur SQL !<br />'.$sqlcentre.'<br />'.mysql_error()); 
     
    		 while( $resultC = mysql_fetch_array( $requeteC ) )
    		 { $B=$resultC['matricule'];
    		  $A=$resultC['nom'];
    		 ?>
             <input type="checkbox" name="inputName['<?php echo $B; ?>]" value="<?php echo $B; ?>">
     
             <?php
    		 echo 'nom:'.$A.' matricule:'.$B.'<br/>';
    		 }
    		 ?>
     
    		</form>
     
     
    	</body>
    </html>
    merci pour votre aide

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

Discussions similaires

  1. Multiple cases à cocher pour filtrer SubForm
    Par pop.paki dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 19/08/2011, 17h09
  2. [AC-2007] Choix multiples (case à cocher)
    Par ulrichv dans le forum IHM
    Réponses: 8
    Dernier message: 21/12/2009, 15h02
  3. Test sur multiple cases à cocher
    Par Gueuz dans le forum Langage
    Réponses: 5
    Dernier message: 24/02/2009, 10h55
  4. modifier champ texte en cases à cocher multiples
    Par gator dans le forum Langage
    Réponses: 7
    Dernier message: 03/07/2006, 11h41
  5. [forms 9i] case à cocher : suppression multiple
    Par ramaro dans le forum Forms
    Réponses: 3
    Dernier message: 05/04/2006, 09h33

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