Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/07/2011, 16h17   #1
Invité de passage
 
Inscription : novembre 2010
Messages : 8
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 8
Points : 0
Points : 0
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 :
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
AlexFr99 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 17h28   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 551
Points : 2 551
Envoyer un message via Skype™ à rawsrc
Salut,

Code :
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.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 18h10   #3
Invité de passage
 
Inscription : novembre 2010
Messages : 8
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 8
Points : 0
Points : 0
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
AlexFr99 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 22h15   #4
Invité de passage
 
Inscription : novembre 2010
Messages : 8
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 8
Points : 0
Points : 0
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 :
$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 :
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>';
AlexFr99 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 22h59   #5
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 551
Points : 2 551
Envoyer un message via Skype™ à rawsrc
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 :
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é.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 23h07   #6
Invité de passage
 
Inscription : novembre 2010
Messages : 8
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 8
Points : 0
Points : 0
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
AlexFr99 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h00.


 
 
 
 
Partenaires

Hébergement Web