problème dates/explode

Petit nouveau ! | 2 Messages

22 déc. 2009, 23:24

Bonjour à tous,

désolé, ma question va certainement vous paraître bête, mais je ne suis que très peu avancé en ce qui concerne php.

Voilà mon souci:
dans une table de ma BDD, j'ai un champ date qui est spécifié, j'ai environ un millier de dates stockées.

J'affiche sur une page ces dates (seulement celles plus récentes qu'aujourd'hui) triées par ordre chronologique. Pas de problème pour ça.

Le « problème » est qu'ayant des centaines de lignes, la visualisation n'est pas très agréable.

Ce que je souhaiterais donc est qu'à chaque changement de semaine (ou de mois à défaut), un titre apparaisse, disant par exemple tout simplement Week 51, un trait horizontal, et toutes les dates qui font partie de cette semaine.
Si je ne suis pas claire, un exemple:

Week 52 – 21/27 dec 2009
xxxx 2009-12-24
XXX 2009-12-26

Week 53
xxxx 2009-12-28
xxxx 2009-12-31

Pour l'instant ce qu'il me semble que je doive faire est:
"exploder" mes dates afin d'avoir une variable avec tous les mois, une toutes les années et une tous les jours.
A partir de là, il me semble que je devrais pouvoir faire qque chose dans ce genre(?):
$xx = mktime(0, 0, 0, $mois, $jour, $annee);
$yy = date(W,$xx);

Pensez-vous que je suis totalement à côté de la plaque ou sur le principe ça vous parait juste?

Mon problème principal pour l'instant vient justement de l'"explodage" de mes dates:

$req = mysql_query('SELECT * FROM table1 ORDER BY `date`');
while ($data = mysql_fetch_assoc($req))

$raa = explode("-", $data['date']);

echo $raa[0];

En faisant cela je n'obtiens qu'une seule réponse (le formatage des dates dans ma table est YYYY-MM-DD), alors que si je ne fais pas le explode, et que je fais un echo $data['date'] toutes les dates de la table s'affichent bien.
Désolé, pour ce très long message, merci beaucoup en tout cas si quelqu'un peut me dire les milliers de choses que je fais mal!

Mammouth du PHP | 693 Messages

22 déc. 2009, 23:44

Ça peut être une possibilité. Regarde du coté de la fonction strtotime() qui peut te simplifier la vie.

Cependant, en ce qui te concerne, il s'agit d'un problème de syntaxe. Ce qui s'exécute dans ta boucle while est un bloc d'instruction. Et en PHP, les blocs sont entre accolades, sauf lorsqu'il n'ont qu'une ligne. Ce que tu as écris est équivalent à
while ($data = mysql_fetch_assoc($req)) {

   $raa = explode("-", $data['date']);

}
echo $raa[0];
Alors que tu veux
while ($data = mysql_fetch_assoc($req)) {

   $raa = explode("-", $data['date']);
   echo $raa[0];
}
UN petit conseil : utilise toujours les accolades et indente ton code, ca le rendra beaucoup plus lisible et donc plus maintenable. (et utilise les balises
 pour afficher ton code, pour bénéficier de la coloration syntaxique)

Petit nouveau ! | 2 Messages

23 déc. 2009, 01:36

Ahh c'était donc encore un problème d'accolade tout simplement, merci beaucoup!

Je n'ai vraiment pas du tout le réflexe avec ces fichues accolades, merci pour le conseil, ça devrait me permettre de me pencher sur la suite.