IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Tableau avec jours du mois


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Tableau avec jours du mois
    Bonjour tout le monde,

    je viens ici toujours en cas extreme apres avoir fouillé partout.

    j'ai un tableau de stats, dont j'extrait tout d'une base de données.
    par exemple si l'on est le 15 du mois, ma requete extrait les stats du 1er au 15 a l'affiche dans un tableau.

    avec ma boucle while et mon mysql_fetch_array, le tableau s'arrete au 15 ( logique ). mais j'aimerais afficher les jours restant jusqu'a la fin du mois meme s'il n'y a rien a afficher.

    mon probleme est donc comment structurer mon tableau, j'ai ma requete et mon "while" et je ne sais pas comment/où faire une autre boucle pour afficher les jours restant.

    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
     
        <div id="statst">
            <h1>Grafique</h1>
            <?php
            $sql = "SELECT visits,date FROM stats_site WHERE client_id = '$client_id' AND MONTH(date) = '$month' AND YEAR(date) = '$year' ORDER BY date ASC";
            $req = mysql_query($sql) or die($error . 'Erreur SQ!' . $sql . '' . mysql_error());
            while ($data = mysql_fetch_array($req)) {
                $visits = $data['visits'];
                $visits_day = $data['date'];
                $visits_graph = ($visits / $max_visits_day) * 100;
                    // J'ai supprimé du code de l'echo pour que ça soit plus court
                    echo "<span id='stats_display'><em>" . $visits . " visites jour " . $visits_day . "</em>" . date("d", strtotime($visits_day)) . "</span>";
                }
            }
            ?>
        </div>
    Merci pour votre aide et tant que j'y suis merci à developpez.net pour toutes les infos
    Alex

  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 : 47
    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,

    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
    <?php
     
    $sql = "SELECT visits, date, DAY(date) AS 'dayNum' FROM stats_site WHERE client_id = '$client_id' AND MONTH(date) = '$month' AND YEAR(date) = '$year' ORDER BY date ASC";
    $req = mysql_query($sql) or die($error . 'Erreur SQ!' . $sql . '' . mysql_error());
     
    # on prépare un tableau vide ayant pour clés les jours du mois correspondant
    $daysInMonth = date("t", strtotime("$year-$month-01"));
    $activity    = array_fill(1, $daysInMonth, NULL);
     
    # on remplit les jours sélectionnés
    while($data = mysql_fetch_array($req)) {
       $activity[$data['dayNum']] = '<span id="stats_display"><em>' 
                                    . $data['visits'] . " visites jour " . $data['date'] . '</em>' 
                                    . $data['dayNum'] . "</span>";
     
       $visits_graph = ($visits / $max_visits_day) * 100;   
    }
     
    # on complète les jours manquants
    foreach($activity as &$v) {
       if (NULL === $v) {
          $v = "<span id=\"stats_display\"><em>0 visites jour $year-$month-{$data['dayNum']}</em>{$data['dayNum']}</span>";
       }
    }
     
    echo '<div id="statst"><h1>Graphique</h1>' . implode("\n", $activity) . '</div>';
     
    ?>
    J'ai légèrement modifié ta requête SQL.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    waouuuh, j'en demandais pas tant.

    ça depasse un peu mon niveau de competence mais j'ai toute la soirée pour decrypter tout ça afin de comprendre l'ensemble.

    Cela va me faire progresser, merci beaucoup pour ton aide Xysyo

    Alex

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    désolé Xysyo,

    un petit soucis, j'ai pu realiser l'objectif en grande partie.

    le soucis est que array_fill ne joue pas sont role, d'apres la doc, il rempli tout les index (de 1 à 31 ) avec NULL

    du coup, a la fin des jours ecoulés (28 aujourd'hui) il me sort NULL pour les suivants.

    j'ai pensé a faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $last_day = $data['dayNum'];
    a la fin du while puis une boucle tant que $last_day n'est pas egal a $daysInMonth incrementer jusqu'a la fin.

    ou quelque chose comme ça.

    jva voir.

    Merci,
    Alex

    edit:

    ben non, j'ai pu reflechir quelques secondes et finalement c'est plus simple encore.

    J'ai mis le dernier jours dispo dans une variable $last_day puis dans le foreach
    je l'ai placée avec incrementation car la boucle ne fonctionne que si === NULL

    donc comme sur des roulettes...

    si ça peux aider quelqu'un je replace le code ici

    Merci beaucoup Xysyo, tu m'a vachement aidé et appris.
    Alex

    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
    <?php
     
    $sql = "SELECT visits, date, DAY(date) AS 'dayNum' FROM stats_site WHERE client_id = '$client_id' AND MONTH(date) = '$month' AND YEAR(date) = '$year' ORDER BY date ASC";
    $req = mysql_query($sql) or die($error . 'Erreur SQ!' . $sql . '' . mysql_error());
     
    # on prépare un tableau vide ayant pour clés les jours du mois correspondant
    $daysInMonth = date("t", strtotime("$year-$month-01"));
    $activity    = array_fill(1, $daysInMonth, NULL);
     
    # on remplit les jours sélectionnés
    while($data = mysql_fetch_array($req)) {
       $activity[$data['dayNum']] = '<span id="stats_display"><em>' 
                                    . $data['visits'] . " visites jour " . $data['date'] . '</em>' 
                                    . $data['dayNum'] . "</span>";
     
            $last_day = $data['dayNum']; 
    }
     
    # on complète les jours manquants
    foreach($activity as &$v) {
       if (NULL === $v) {
    $last_day++;
          $v = "<span id=\"stats_display\"><em>0 visites jour $year-$month-{$last_day}</em>{$last_day}</span>";
       }
    }
     
    echo '<div id="stats"><h1>Graphique</h1>' . implode("\n", $activity) . '</div>';

  5. #5
    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 : 47
    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
    Oui j'ai raté le coche mais vu que ça sortait du four

    Ton $last_day est inutile.

    Remplace le bout du code par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # on complète les jours manquants
    foreach($activity as $day => &$v) {
       if (NULL === $v) {
          $v = "<span id=\"stats_display\"><em>0 visites jour $year-$month-$day</em>$day</span>";
       }
    }
    Et le tour est joué.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    c'est nickel

    je code pas de la meilleure maniere, je fait avec les moyens du bord !

    encore pas mal de choses a apprendre...

    merci encore
    Alex

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

Discussions similaires

  1. Créer un tableau avec jours d'ouverture du magasin
    Par lordbdp dans le forum Langage
    Réponses: 9
    Dernier message: 02/05/2015, 18h32
  2. [AC-2003] La somme entre 2 années successives avec jours et mois fixes
    Par mouhamadrouabha dans le forum Access
    Réponses: 15
    Dernier message: 07/02/2012, 09h27
  3. Remplir datagrid avec jour du mois
    Par koutbino dans le forum Flex
    Réponses: 2
    Dernier message: 03/03/2010, 11h42
  4. Réponses: 3
    Dernier message: 07/11/2008, 09h45

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