Question sur un calendrier php/mysql

Résolu/Fermé
vxs2b Messages postés 16 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 12 juin 2009 - 4 juin 2009 à 14:42
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 - 5 juin 2009 à 21:44
Bonjour,

Je suis en train de faire un petit calendrier tout simple ( en php ) me permettant d'afficher les jours jusqu'à 1 mois en arrière ( aller plus loin ne m'est pas utile ).
Je suis ne suis pas très calé en php ( ça fait environ depuis la mi novembre que je tate ce langage ).

actuellement, j'en suis la :

// Recuperation de la date

$year = date( 'Y' );
$mounth = date ( 'm' );
$day = date ( 'd' );
$date = $year.'-'.$mounth.'-'.$day;


/********************************************************************/

// Affichage pour les mois "pairs"

if($mounth%2){
$n=0;
while ($n!=30) {
for($i=0; $i<7; $i++) {
if($day==0) {
$day=$day+31;
$mounth--;
}
echo $day.' ';
$day--;
$n++;
if($n==30) break;
}
echo '<br>';
}
}



// Affichage pour les mois impairs

else {
$n=0;
while ($n!=31) {
for($i=0; $i<7; $i++) {
if($day==0) {
$day=$day+30;
$mounth--;
}
echo $day.' ';
$day--;
$n++;
if($n==31) break;
}
echo '<br>';
}
}

/********************************************************************/

Comme vous pouvez le voir (ça paraîtra d'ailleurs brouillon pour certains ^^ ), j'utilise simplement 2 boucles , pour repérer si on est dans un mois pair ou impaire, et quelques autres boucles pour l'affichage des jours.

Le résultat est impeccable ( si ce n'est que pour le jour actuel je me retrouve avec '04' ( par exemple ) a la place de '4' ( comme le sont ecrit les autres jours ) ) mais ce n'est pas ça le problème ^^.

Vous me direz maintenant :
"Pourquoi t'embêter a déclarer une variable pour le jour, une pour le mois et une pour l'année.
La réponse est simple, je pourrais me contenter de faire un :
" $date = date ( 'Y-m-d' ); " certe...
Mais ça m'a paru utile pour la suite, car ( et voila enfin le but de mon post ) je dois en fait rendre ce calendrier interactif.

Je m'explique:
Je voudrais rendre ce calendrier 'cliquable' pour que je puisse acceder a une table sql et ainsi l'afficher << en fonction de la date cliquée >>.

J'espère avoir été compris dans mes explications ^^.

Si vous avez des tuyaux a me filer, je vous en serais reconnaissant parce que la ca fait 2 jours que je me creuse le cerveau ( ainsi que la coque de mon clavier a force de taper des recherche sur google ), et je n'ai toujours rien trouver.

Merci d'avance
Cordialement, alex
A voir également:

9 réponses

Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46
5 juin 2009 à 09:58
bizarre ta méthode Oo et elle te sort des mois encore plus bizarre ...
passons le fait que si tu te retrouve en février, ta méthode ne fonctionne pas ...
mais tu commence a compter a partir du jour présent,
l'affichage va te faire 5 4 3 2 1 30 29 28 27 [...] 6
c'est pas vraiment la définition d'un mois pour moi =/

je te conseillerai de recuperer le timestamp du 1er jour du mois
( tu recuperes le mois et l'année et avec mktime tu lui donne mktime(0,0,0,$mounth,1,$year)
manuel ici : https://www.php.net/mktime )
ensuite tu te sers de timestamp et des fonction de php pour créer ton mois
( ça gérera les mois et les années bissextile )
de plus tu pourra te servir du timestamp pour identifier ton jour dans ta bdd
( 4octets au lieu d'une suite de char a 1octet chacun ^^ )
1
vxs2b Messages postés 16 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 12 juin 2009 1
4 juin 2009 à 15:20
Personne qui puisse m'aider ici ?
0
vxs2b Messages postés 16 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 12 juin 2009 1
5 juin 2009 à 09:22
up ^^
0
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46
5 juin 2009 à 10:00
voila un exemple de ce que tu peux faire avec le timestamp ( et de l'AJAX )
http://dtc.no.jutsu.free.fr/dtc.no.jutsu/Test/calendrier/

PS : je n'ai pas fait l'enregistrement ^^
donc si tu clique sur "enregistrer" ça n'enverra rien xD

EDIT : le problème du timestamp est qu'il est codé sur 32bits (2^32) donc pas éternel ^^
(valide jusqu'en fevrier 2037 =X)
mais d'ici la tous les serveurs seront en 64bits (2^64) (voir plus)
donc la on aura le temps ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vxs2b Messages postés 16 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 12 juin 2009 1
5 juin 2009 à 14:02
Merci de ta réponse Brachior.

Il est vrai que ma méthode est " bizarre " comme tu dis, j'ai fais ce bout de code avec les quelques notions que je connaissais, timestamp/mktime etc ... je ne connaissais pas vraiment donc j'ai voulu essayer de faire ça un peu à la barbare mais a priori ça complique les choses force 12 ^^.

Sinon, d'après les tests que j'ai effectués, les mois qui sortent me paraissaient justes, mais bon ... un peu tiré par les cheveux quand même ^^

Pour le coup des années bissextiles, c'est pas faux, je me demandais depuis le moment ou j'avais finit ce code comment j'allais faire pour les définir :x.



Je m'en vais de ce pas exécuter les quelques conseils que tu m'as donné, en espérant que ça passe comme dans du beurre ^^.
0
vxs2b Messages postés 16 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 12 juin 2009 1
5 juin 2009 à 14:10
Petite correction mineure, pour les personnes qui seraient amenées à lire ce sujet,
l'adresse du manuel d'mktime est : http://fr2.php.net/mktime
0
vxs2b Messages postés 16 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 12 juin 2009 1
5 juin 2009 à 14:40
Une petite question brachior, concernant le mktime, car la je suis perdu et je trouve pas la réponse au nouveau probleme qui se pose a moi ( si on peut appeler ca un probleme ^^ )

donc j'ai tester cette fonction avec un truc tout bete :

<?

$hier = mktime(0,0,0,date('m'),date('d')-1,date('Y'));
echo date('Y-m-d',$hier);
echo '<br>';
echo date('Y-m-d');

?>

jusque la rien d'anormal je me retrouve avec afficher sur l'ecran :

2009-06-04
2009-06-05



Maintenant je me pose cette question :
est ce que je dois faire un mktime pour chaque jour ( pour remonter jusqu'à 1 mois en arriere ) ou est ce qu'il y'a moyen de faire ca avec une boucle ? en gros, une fois qu'on a compris le fonctionnement du mktime, comment peut on l'exploiter ?
Car en fait, mon but n'est pas de créer un calendrier mais bel et bien de retracer les jours précedents ( d'ou le fait de se retrouver avec une liste comme tu as dis ressemblant a " 5 4 3 2 1 30 29 28 27 [...] " ) ( mais ca apres ce n'est que du poffinage de presentation )


si t'as des precisions a me donner, ou un tuto qui se rapproche de mon cas ( que je fasse pas du copier coller betement sans comprendre ^^ )
0
vxs2b Messages postés 16 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 12 juin 2009 1
5 juin 2009 à 16:37
apres m'etre battu avec une boucle qui n'en finissait pas, j'arrive finalement a ce resultat :

<?

$h=0;
echo '<table border=1>'."\n";
echo '<tr width="280" align="center"><b>Jour à afficher</b></tr>';
echo '<tr>';
for($k=1;$k<32;$k++){
echo '<td width="80" align="center">'
.date('d/M',mktime(0,0,0,date('m'),date('d')-$h,date('Y')))
.'</td>';
if($k%7==0) echo'</tr>';
$h++;
}
echo '</table>';

?>

Donc rien de tres sophistiqué , un tableau tout simple ( pas très beau d'ailleurs ) avec les 31 derniers jours affichés, maintenant je suis confronté a un autre problème, faire le lien entre ce tableau et une table mysql a afficher en fonction du jour ou je clique ... si tu ( ou quelqu'un d'autre ) as une idée du "comment faire" ... je suis preneur ^^
0
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46
5 juin 2009 à 21:44
et bien tout va se faire dans ton "echo"
echo '<td width="80" align="center">'.date('d/M',mktime(0,0,0,date('m'),date('d')-$h,date('Y'))).'</td>';

si tu fais par exemple :
int time = mktime(0,0,0,date('m'),date('d')-$h,date('Y'));
echo '<td width="80" align="center"><a href="event.php?time='.time.'">'.date('d/M',time).'</a></td>';

la tu peux créer une page event.php qui récupère dans le tableau $_GET le timestamp
et tu pourras faire tes appels a la bdd avec
( tu peux aussi tout faire dans la même page .. mais si tu débutes, vaut mieux dispatcher pour mieux comprendre ^^ )
0