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 :

affichage horizontal dans une table d'un formulaire [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Points : 16
    Points
    16
    Par défaut affichage horizontal dans une table d'un formulaire
    bonjour à tous !

    Je bug depuis plusieurs jours, merci d'avance de votre aide. voilà où j'en suis:
    Table renfort
    id_renfort | date_debut | date_fin
    ------------------------------------
         5     | 2012-09-01 | 2012-09-03
    
    Table renfort_volontaires
    id_renfort_volontaires | k_id_renfort | k_id_volontaire
    -------------------------------------------------------
              1            |      5       |      222
              2            |      5       |      223
     
    Table volontaires_dispo
    id_volontaires_dispo | k_id_renfort_volontaires | date_dispo | ok
    -----------------------------------------------------------------
              1          |             1            | 2012-09-01 | 0
              2          |             1            | 2012-09-02 | 0
              3          |             1            | 2012-09-03 | 0
              4          |             2            | 2012-09-01 | 0
              5          |             2            | 2012-09-02 | 0
              6          |             2            | 2012-09-03 | 0
    Voilà mon problème:
    Après un submit envoyant l'id_renfort ici 5, je voudrais dans un formulaire présenter une table ayant cette forme:

    volontaire | 2012-09-01 | 2012-09-02 | 2012-09-03
    -------------------------------------------------
        222    |     1      |     2      |     3
        223    |     4      |     5      |     6
    Les 1 - 2 - 3 - 4 - 5 - 6 correspondent aux id_volontaires_dispo. Mais voilà ça ne se passe pas comme je voudrais. Grâce à ce code qui pour l'instant me donne un résultat mais qui est loin d'être ce que je voudrais voir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $select4 = $PDO->query("SELECT  volontaires_dispo.*, renfort_volontaires.* 
                            FROM volontaires_dispo 
                            LEFT JOIN renfort_volontaires ON renfort_volontaires.id_renfort_volontaires =volontaires_dispo.k_id_renfort_volontaires
    		        WHERE k_id_renfort = $modif_renfort_id
    		      ");
    $select4->setFetchMode(PDO::FETCH_OBJ);
    while( $enregistrement4 = $select4->fetch()){
    	   $a = array($enregistrement4->k_id_volontaire);
    	   $b = array($enregistrement4->k_id_volontaire=>$enregistrement4->id_volontaires_dispo);
     
    	foreach ($a as $k);
    	foreach ($b as $l=>&$n);
    	echo '<td bgcolor="#CCCCCC">'.("$k").'</td><td bgcolor="#CCCCCC">'.("$n").'</td>';
    }
    J'obtiens ce malheureux résultat :
    volontaire | 2012-09-01 | 2012-09-02 | 2012-09-03
    --------------------------------------------------------------------------
        222    |     1      |    222     |     2       | 222 3 223 4 223 5 223 6
    Je ne sais plus quoi faire, des tonnes d'essais pour des résultats tous aussi loufoques les uns que les autres !

    Je remercie d'avance celui, celle, tout ceux qui m’éclaireront de leurs projecteurs.
    Mimosa21

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Je n'ai pas tout compris : tu veux lister quoi exactement dans ton tableau ?
    Parcque je ne vois pas trop l'intérêt de lister des id.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Merci rawsrc de me répondre,

    Pour l'instant je travaille sur les id mais par la suite ce sera avec des noms et pour les 1 - 2 - 3 -4 -5 -6 ce sera des cases à cochées validant ou non la date pour le volontaire.

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bon je te porpose 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
    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
    <?php
     
    $mission_id = $pdo->quote($modif_renfort_id, PDO::PARAM_INT);
    $sql        = <<<SQL
    SELECT
        d.*,
        v.*,
        m.date_debut,
        m.date_fin
    FROM
        volontaires_dispo d
        INNER JOIN renfort_volontaires v ON v.k_id_renfort_volontaires = d.id_renfort_volontaires
        INNER JOIN renfort m             ON m.id_renfort               = v.k_id_renfort
    WHERE
        m.id_renfort = {$mission_id}
        AND d.date_dispo BETWEEN m.date_debut AND m.date_fin
    ORDER BY
        d.date_dispo
    SQL;
     
    $data = $pdo->query($sql, PDO::FETCH_ASSOC)->fetchAll(); // j'avais oublié le fetchAll()
     
    if (empty($data)) {
        // aucun volontaire disponible
     
    }
    else {
        // les dates sont déterminées par les bornes des dates de la mission
        // qu'on récupère du 1er enregistrement
        $debut    = DateTime::createFromFormat('Y-m-d', $data[0]['date_debut']);
        $fin      = DateTime::createFromFormat('Y-m-d', $data[0]['date_fin']);
        $interval = new DateInterval('P1D');
        $dates    = array($debut->format('y-m-d'));
        while($debut < $fin) {
            $dates[] = $debut->add($interval)->format('Y-m-d');
        }
     
        // par défaut on considère qu'il n'y a aucune disponibilité pour chaque date
        $default_dispo = array_fill_keys(array_values($dates), false);
     
        $rows = array();
        foreach($data as $row) {
            $id = $row['k_id_volontaire'];
            // si on n'a pas déjà rencontré le volontaire on le crée
            if (empty($rows[$id])) {
                $rows[$id] = array(
                    'dispo' => $default_dispo,
                    'nom'   => $row['nom']
                    // d'autres valeurs à la place des * dans ton SELECT
                );
            }
            // on récupère les diponibilités
            $rows[$id]['dispo'][$row['date_dispo']] = true;
        }
     
        // rendu
    ?>
        <table>
            <thead>
                <tr>
                    <th>&nbsp;</th>
                    <?php foreach($dates as $d): ?>
                    <th><?php echo $d ?></th>
                    <?php endforeach ?>
                </tr>
            </thead>
            <tbody>
                <?php foreach($rows as $id => $row): ?>
                <tr>
                    <td><?php echo $row['nom'] ?></td>
                    <?php foreach($row['dispo'] as $v): ?>
                    <td>
                        <?php if ($v): ?>
                        <input type="checkbox" />
                        <?php else: ?>
                        &nbsp;
                        <?php endif ?>
                    </td>
                    <?php endforeach ?>
                </tr>
                <?php endforeach ?>
            </tbody>
        </table>
    <?php
    }
    Je n'ai rien testé donc croisage des doigts.
    Je t'ai commenté le code et je pense que tu devrais renommer ta table renfort en mission parce que tu cherches des volontaires en renfort d'une mission.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Je viens de rentrer du boulot, je teste de suite.

    Merci

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    J'ai un problème d'array sur les dates pour l'instant. J'ai déjà rencontré problème et je sais le corriger mais Je le rectifierai demain matin car c'est fini pour ce soir la soupe va être froide.

    En bonne voie la suite demain

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Bon ben je ne trouve pas comment contrer Fatal error: Cannot use object of type PDOStatement as array
    sur la ligne 30
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $debut    = DateTime::createFromFormat('Y-m-d', $data[0]['date_debut']);
    Merci de me donner une voie.

    Ps je travaille toute la journée (dur pour un dimanche)
    Mimosa21

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    j'ai oublié un bout de code, je corrige de suite :ane:

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    J'ai enfin la solution . J'ai du rajouter le champ "vd_renfort_id" et le champ "k_id_volontaire" à ma table volontaires_dispo mais le résultat me donne un array ma foi fort sympathique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Table volontaires_dispo avant
    id_volontaires_dispo | date_dispo | ok
    -----------------------------------------------------------------
              1          | 2012-09-01 | 0
              2          | 2012-09-02 | 0
              3          | 2012-09-03 | 0
              4          | 2012-09-01 | 0
              5          | 2012-09-02 | 0
              6          | 2012-09-03 | 0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Table volontaires_dispo après rajout des champs
    id_volontaires_dispo | vd_renfort_id | k_id_volontaire| k_id_renfort_volontaires | date_dispo | ok
    ----------------------------------------------------------------------------------------------------
              1          |        5      |        222     |             1            | 2012-09-01 | 0
              2          |        5      |        222     |             1            | 2012-09-02 | 0
              3          |        5      |        222     |             1            | 2012-09-03 | 0
              4          |        5      |        223     |             2            | 2012-09-01 | 0
              5          |        5      |        223     |             2            | 2012-09-02 | 0
              6          |        5      |        223     |             2            | 2012-09-03 | 0
    Grâce au fetchAll et son option PDO::FETCH_GROUP, on a en sortie directement un array formaté, avec en clé la catégorie et en valeur les entrées correspondantes
    (par contre attention contraiement a PDO::FETCH_COLUMN, on ne choisie pas qui est la catégorie, ca sera uniquement la première colonne ici -> k_id_renfort_volontaires)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $query = $PDO->query("SELECT k_id_volontaire, id_volontaires_dispo, ok FROM volontaires_dispo WHERE vd_renfort_id = $modif_renfort_id");
     
    if($query)
    {
        $result = $query->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP);
        echo "<pre>"; print_r($result); echo "</pre>";
    }
    Cela me 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
    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
    Array
    (
        [4] => Array
            (
                [0] => Array
                    (
                        [vd_id] => 211
                        [vd_date_selectionnee] => 0
                    )
     
                [1] => Array
                    (
                        [vd_id] => 212
                        [vd_date_selectionnee] => 0
                    )
     
                [2] => Array
                    (
                        [vd_id] => 213
                        [vd_date_selectionnee] => 0
                    )
     
            )
     
        [6] => Array
            (
                [0] => Array
                    (
                        [vd_id] => 214
                        [vd_date_selectionnee] => 0
                    )
     
                [1] => Array
                    (
                        [vd_id] => 215
                        [vd_date_selectionnee] => 0
                    )
     
                [2] => Array
                    (
                        [vd_id] => 216
                        [vd_date_selectionnee] => 0
                    )
     
            )
     
    )
    Par contre maintenant que le résultat obtenu est un array pile poils comme il faut, je ne sais pas comment le mettre en forme sur mon formulaire de visualisation pour obtenir ce résultat en php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     k_id_volontaire|vd_renfort_id | 2012-09-01 | 2012-09-02 | 2012-09-02 | 
    ---------------------------------------------------------------------
            222     |        5     |     0      |     0      |     0      |
                    |        5     |     0      |     0      |     0      |
                    |        5     |     0      |     0      |     0      |
            223     |        5     |     0      |     0      |     0      |
                    |        5     |     0      |     0      |     0      |
                    |        5     |     0      |     0      |     0      |
    Il y aurait-il une âme charitable qui pourrait m'aiguiller pour obtenir ce résultat avec des Merci d'avance

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    dépieutes le code de mon post n°4, tu as la réponse dedans.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Bonjour rawsrc

    Merci de continuer à porter de l'intérêt pour mon post

    J'ai dejà essayé mais je n'arrive pas à extraire par foreach mes données récupérées de mon array. Est ce à cause de fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP);

  12. #12
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    tu n'aurais pas dû rajouter tes champs à la table volontaires_dispo parce que tu va finir par te perdre dans les redondances sans compter que du coup tu plombes sérieusement le design de ta base.
    La redondance est nécessaire que dans certains cas spéciaux et en aucun cas pour ta problématique qui est fort simple à gérer.

    Quand je te parle de redondance c'est pour la valeur de id_volontaire que tu obtiens de 2 manières différentes à partir de la nouvelle version de ta table volontaires_dispo.
    volontaires_dispo.k_id_volontaire
    renfort_volontaires[k_id_renfort_volontaires].k_id_volontaire
    Que produit le code du post n°4 ?

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Bonjour rawsrc et tout le forum,
    Je m'excuse de ne pas avoir répondu plus tôt mais j'ai cherché un peu dans tous les sens pour finalement revenir en te demandant de l'aide.

    Ton post #4 me donne le tableau suivant:

           nom       | 2012-09-01 | 2012-09-02 | 2012-09-03 | 
    --------------------------------------------------------
            nom1     |      0     |     0      |     0      |
            nom2     |      0     |     0      |     0      |
    
    L'apparence y est, les 0 étant les checkbox non cochés. Le truc maintenant c'est qu'il faut que la valeur de chaque case

    corresponde à celle de ma base de données sql:
    Table volontaires_dispo
    id_volontaires_dispo | k_id_renfort_volontaires | nom  | date_dispo | ok
    ----------------------------------------------------------------------
              1          |             1            | nom1 | 2012-09-01 | 0
              2          |             1            | nom1 | 2012-09-02 | 0
              3          |             1            | nom1 | 2012-09-03 | 0
              4          |             2            | nom2 | 2012-09-01 | 0
              5          |             2            | nom2 | 2012-09-02 | 0
              6          |             2            | nom2 | 2012-09-03 | 0
    - id_volontaires_dispo étant l'identifiant de la ligne.
    - ok : la case à cocher correpondant à la ligne id_volontaires_dispo donc si ma table était composé comme ceci:
    Table volontaires_dispo
    id_volontaires_dispo | k_id_renfort_volontaires | nom  | date_dispo | ok
    ----------------------------------------------------------------------
              1          |             1            | nom1 | 2012-09-01 | 1
              2          |             1            | nom1 | 2012-09-02 | 0
              3          |             1            | nom1 | 2012-09-03 | 0
              4          |             2            | nom2 | 2012-09-01 | 1
              5          |             2            | nom2 | 2012-09-02 | 0
              6          |             2            | nom2 | 2012-09-03 | 0
    - id_volontaires_dispo = 1, nom serait = à nom 1, ok = 1 (validé)
    - id_volontaires_dispo = 2, nom serait = à nom1, ok = 0 (non validé)
    - id_volontaires_dispo = 3, nom serait = à nom1, ok = 0 (non validé)
    - id_volontaires_dispo = 4, nom serait = à nom2, ok = 1 (validé)
    - id_volontaires_dispo = 5, nom serait = à nom2, ok = 0 (non validé)
    - id_volontaires_dispo = 6, nom serait = à nom2, ok = 0 (non validé)
    Je devrai visualiser ceci:
           nom       | 2012-09-01 | 2012-09-02 | 2012-09-03 | 
    --------------------------------------------------------
            nom1     |     1      |     0      |     0      |
            nom2     |     1      |     0      |     0      |
    
    Hors j'obtiens cela:
           nom       | 2012-09-01 | 2012-09-02 | 2012-09-03 | 
    --------------------------------------------------------
            nom1     |     1      |     1      |     1      |
            nom2     |     1      |     1      |     1      |
    
    J'ai beau chercher, je ne trouve pas la réponse (plusieurs semaines de recherche, beurk). De plus c'est pour faire un update et la les choses se compliquent encore. Je suis en très en retard sur mon planing et là je stresse.

    Merci de ton aide fort appréciable!

  14. #14
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    pour faire ce que tu souhaites, y a pas trop de modifs par rapport à mon code initial :
    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
    <?php
     
    $mission_id = $pdo->quote($modif_renfort_id, PDO::PARAM_INT);
    $sql        = <<<SQL
    SELECT
        d.*,
        v.*,
        m.date_debut,
        m.date_fin
    FROM
        volontaires_dispo d
        INNER JOIN renfort_volontaires v ON v.k_id_renfort_volontaires = d.id_renfort_volontaires
        INNER JOIN renfort m             ON m.id_renfort               = v.k_id_renfort
    WHERE
        m.id_renfort = {$mission_id}
        AND d.date_dispo BETWEEN m.date_debut AND m.date_fin
    ORDER BY
        d.date_dispo
    SQL;
     
    $data = $pdo->query($sql, PDO::FETCH_ASSOC)->fetchAll();
     
    if (empty($data)) {
        // aucun volontaire disponible
     
    }
    else {
        // les dates sont déterminées par les bornes des dates de la mission
        // qu'on récupère du 1er enregistrement
        $debut    = DateTime::createFromFormat('Y-m-d', $data[0]['date_debut']);
        $fin      = DateTime::createFromFormat('Y-m-d', $data[0]['date_fin']);
        $interval = new DateInterval('P1D');
        $dates    = array($debut->format('y-m-d'));
        while($debut < $fin) {
            $dates[] = $debut->add($interval)->format('Y-m-d');
        }
     
        // par défaut on considère qu'il n'y a aucune disponibilité pour chaque date
        $default_dispo = array_fill_keys(array_values($dates), false);
     
        $rows = array();
        foreach($data as $row) {
            $id = $row['k_id_volontaire'];
            // si on n'a pas déjà rencontré le volontaire on le crée
            if (empty($rows[$id])) {
                $rows[$id] = array(
                    'dispo' => $default_dispo,
                    'nom'   => $row['nom'],
                    'ok'    => array()
                    // d'autres valeurs à la place des * dans ton SELECT
                );
            }
            // on récupère les disponibilités
            $rows[$id]['dispo'][$row['date_dispo']] = true;
            // on récupère la colonne ok
            $rows[$id]['ok'][$row['date_dispo']] = ( ! empty($row['ok']));
        }
     
        // rendu
    ?>
        <table>
            <thead>
                <tr>
                    <th>&nbsp;</th>
                    <?php foreach($dates as $d): ?>
                    <th><?php echo $d ?></th>
                    <?php endforeach ?>
                </tr>
            </thead>
            <tbody>
                <?php foreach($rows as $id => $row): ?>
                <tr>
                    <td><?php echo $row['nom'] ?></td>
                    <?php foreach($row['dispo'] as $date => $v): ?>
                    <td>
                        <?php if ($v): ?>
                        <input type="checkbox" <?php echo (($row['ok'][$date]) ? '' : 'checked="checked" ') ?>/>
                        <?php else: ?>
                        &nbsp;
                        <?php endif ?>
                    </td>
                    <?php endforeach ?>
                </tr>
                <?php endforeach ?>
            </tbody>
        </table>
    <?php
    }
    Un mois sur ça ! Tu aurais dû te pointer ici plus tôt.
    Bon stress alors

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Salut rawsrc
    Lol, tu as raison moques toi !!!

    Je viens de rentrer du boulot, j'ai testé ton code et il marche parfaitement, si ce n'est que j'ai rectifié une ligne car ton code me cochait les cases 0 et non les cases 1.
    Ta ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rows[$id]['ok'][$row['date_dispo']] = ( ! empty($row['ok']));
    Changée par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rows[$id]['ok'][$row['date_dispo']] = ( empty($row['ok']));
    => j'ai fait sauter le !

    Merci beaucoup
    Je code l'update. Si demain tu vois un post intitulé "update de cases à cocher qui ne fonctionne pas" ça sera moi. Je n'attendrai pas un mois, promis

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/07/2007, 12h05
  2. Affichage multiple dans une table
    Par elgigante dans le forum WinDev
    Réponses: 7
    Dernier message: 22/03/2007, 13h57
  3. Réponses: 5
    Dernier message: 09/03/2007, 19h39
  4. Recherche dans une table via un formulaire
    Par Z[ee]k dans le forum Access
    Réponses: 3
    Dernier message: 05/06/2006, 11h14

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