Page 1 sur 1

Tableau de résultats mensuel par semaine en PHP

Posté : 10 nov. 2014, 13:57
par Bisvan
Bonjour !

Je tente de faire un script afin d'afficher des résultats mensuels provenant d'une bdd mysql et tout ça dans un tableau html classé par semaine.

Ma table mysql est la suivante :
[table_resultat]
idresult
result
date (au format Y-m-d).

Voici un exemple de ce que j'aimerai générer (exemple sur le mois de novembre 2014)
<?php
echo '
<table width="100%" border="1" cellspacing="0" cellpadding="0">
<tr>
   <td>Novembre 2014</td>
   <td>01 to 02</td>
   <td>03 to 09</td>
   <td>10 to 16</td>
   <td>17 to 23</td>
   <td>24 to 30</td>
</tr>
<tr>
   <td >Lundi</td>
   <td ></td>
   <td >2014.11.03 : '.$result[date].'</td>
   <td >2014.11.10 : '.$result[date].'</td>
   <td >2014.11.17 : '.$result[date].'</td>
   <td >2014.11.24 : '.$result[date].'</td>
</tr>
   <td >Mardie</td>
   <td ></td>
   <td >2014.11.04 : '.$result[date].'</td>
   <td >2014.11.11 : '.$result[date].'</td>
   <td >2014.11.18 : '.$result[date].'</td>
   <td >2014.11.25 : '.$result[date].'</td>
</tr>
   <td >Mercredi</td>
   <td ></td>
   <td >2014.11.05 : '.$result[date].'</td>
   <td >2014.11.12 : '.$result[date].'</td>
   <td >2014.11.19 : '.$result[date].'</td>
   <td >2014.11.26 : '.$result[date].'</td>
</tr>
    <td >Jeudi</td>
    <td ></td>
    <td >2014.11.06 : '.$result[date].'</td>
    <td >2014.11.13 : '.$result[date].'</td>
    <td >2014.11.20 : '.$result[date].'</td>
    <td >2014.11.27 : '.$result[date].'</td>
</tr>
    <td >Vendredi</td>
    <td ></td>
    <td >2014.11.07 : '.$result[date].'</td>
    <td >2014.11.14 : '.$result[date].'</td>
    <td >2014.11.21 : '.$result[date].'</td>
    <td >2014.11.28 : '.$result[date].'</td>
</tr>
    <td >Samedi</td>
    <td >2014.11.01 : '.$result[date].'</td>
    <td >2014.11.08 : '.$result[date].'</td>
    <td >2014.11.15 : '.$result[date].'</td>
    <td >2014.11.22 : '.$result[date].'</td>
    <td >2014.11.29 : '.$result[date].'</td>
</tr>
    <td >Dimanche</td>
    <td >2014.11.02 : '.$result[date].'</td>
    <td >2014.11.09 : '.$result[date].'</td>
    <td >2014.11.16 : '.$result[date].'</td>
    <td >2014.11.23 : '.$result[date].'</td>
    <td >2014.11.30 : '.$result[date].'</td>
</tr>
</table>';
?>
J'ai réalisé un script php en utilisant date() et des boucles for() mais mon script est très laid et fait 500 lignes (!)
Je n'arrive pas à trouver la "logique" pour faire quelque chose de simple et propre.
Auriez vous une idée ?
Merci bcp !!

:)

Re: Tableau de résultats mensuel par semaine en PHP

Posté : 11 nov. 2014, 20:10
par Nestecha
Cherche du côté de date_format, et date_create.

Avec date_create tu pourras créer des objets dates avec les infos contenues dans ta database, que tu pourras mettre dans un tableau.

Ensuite avec date_format, tu pourras avoir le jour, le mois, la date, enfin toutes les infos que tu veux pour savoir quel jour était le premier jour du mois etc.

http://php.net/manual/en/datetime.format.php

Re: Tableau de résultats mensuel par semaine en PHP

Posté : 12 nov. 2014, 13:03
par Bisvan
Merci pour la réponse.
En fait mon problème n'est pas tant dans la recherche des semaines/mois et jour.
Mais plutôt dans le développement de la boucle pour l'affichage en tableau.
En effet pour l'heure j'ai beaucoup trop de boucles dans des boucles, ce qui est très lourd.
Car pour l'affichage je dois vérifier pour la 1e semaine :
- si le mois commence un lundi alors on affiche les résultats dès la 2e ligne et la 1e colonne
- si le mois commence un mard alors on affiche les résultats dès la 3e ligne et la 1e colonne
etc..
Pour les semaines complètes c'est simple.
Enfin pour la dernière semaine, je dois revérifier comme pour la 1e semaine si :
- si le mois se termine par un lundi alors on stop les résultats dès la 1e ligne, dernière colonne
- si le mois se termine par un mardi alors on stop les résultats dès la 2e ligne, dernière colonne
etc..

C'est donc cela qui me pose problème...

Re: Tableau de résultats mensuel par semaine en PHP

Posté : 12 nov. 2014, 17:47
par tesmet
Il n'y a pas beaucoup d'information sur les données à afficher dans le calendrier, à toi de compléter et d'ajuster.
<?php

function afficher_calendrier($array_date) { // ISO-8601 ?
  $noms_mois = array('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',
                     'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
  $noms_jour = array('Lundis', 'Mardis', 'Mercredis', 'Jeudis', 'Vendredis', 'Samedis', 'Dimanches');
  list($annee, $mois,) = explode('.', key($array_date)); // quel mois somme nous
  $premier = date('N', mktime(0, 0, 0, $mois, 1, $annee)); // jour de la semaine du premier du mois - PHP 5.1.0
  $dernier = date('j', mktime(0, 0, 0, $mois+1, 0, $annee)); // dernier jour du mois
  $debut = 2 - $premier; // premier indice de boucle
  $fin = date('N', mktime(0, 0, 0, $mois, $dernier, $annee)); // jour de la semaine du dernier du mois  - PHP 5.1.0
  $fin = ($fin<7) ? 7-$fin+$dernier : $dernier; // dernier indice de boucle
  echo '<table width="100%" border="1" cellspacing="0" cellpadding="0">', PHP_EOL;
  printf("<tr>\n  <th>%s %4d</th>\n", $noms_mois[$mois-1], $annee);
  for($i = $debut; $i < $dernier+1; $i+=7) {
    $x = ($i > 0) ? $i : 1;
    $y = ($i+6 < $dernier+1) ? $i+6 : $dernier;
    printf("  <th>du %02d au %02d</th>\n", $x, $y);
  }
  echo '</tr>', PHP_EOL;
  $j = -1;
  foreach($noms_jour as $jour_semaine) {
    printf("<tr>\n  <th>%s</th>\n", $jour_semaine);
    $j++;
    for($i=$debut+$j; $i <= $fin; $i+=7) {
      $jour = ($i > 0) ? ($i <= $dernier) ? $i : 0 : 0;
      if($jour) {
        $date = date('Y.m.d', mktime(0, 0, 0, $mois, $jour, $annee));
        if(isset($array_date[$date])) printf("<td>%s : %s</td>\n", $date, $array_date[$date]);
        else echo '<td>&nbsp;</td>', PHP_EOL;
      }
      else echo '<td>&nbsp;</td>', PHP_EOL;
    }
    echo '</tr>', PHP_EOL;
  }
  echo '</table>', PHP_EOL;
}

$result['2014.11.23'] = 'Salut et Bonjour';
$result['2014.11.15'] = 'Aujourd\'hui et pour toujours';
$result['2014.11.30'] = 'Est-ce la fin ?';
$result['2014.11.01'] = 'Somme nous au début ?';
$result['2014.11.07'] = 'J\'ai un faible pour le 7';
$result['2014.11.10'] = 'Stupide lundi du 10';
$result['2014.11.25'] = 'C\'est bien le mardi 25?';
$result['2014.11.05'] = 'Le Mercredi est le milieu de semaine.';
$result['2014.11.20'] = 'Le 20 semble être un jeudi.';
afficher_calendrier($result);

?>
bonne chance