Fêter anniversaire en PHP

Résolu/Fermé
cha7ri Messages postés 205 Date d'inscription samedi 15 mars 2008 Statut Membre Dernière intervention 20 mars 2011 - 18 mai 2009 à 18:53
cha7ri Messages postés 205 Date d'inscription samedi 15 mars 2008 Statut Membre Dernière intervention 20 mars 2011 - 21 mai 2009 à 13:04
Bonjour,
je veux savoir comment peut on avoir une liste de mes adhérents qui vont fêter leurs anniversaire cette semaine à partir de leurs date de naissance, ....... y t il qlq un qui peut me donner un exemple qui illustre ce principe


merci d'avance

13 réponses

Mins Messages postés 43 Date d'inscription mardi 31 juillet 2001 Statut Membre Dernière intervention 28 mai 2009 9
18 mai 2009 à 19:01
Si tu stockes les dates de naissances dans la DB avec les adhérents, tu peux utiliser between dans ta requète SQL.

Un exemple plus précis. Tu stockes la date de naissance en tant que timestamp dans la DB

Tu transformes la date du jour en timestamp.

Tu fais un select sur la table avec la date de naissance entre le timestamp courant et le timestamp courant + 7 * 24 * 60 * 60

^^'

Je suis très clair dans ma tête, mais je me demande si je vais me faire comprendre :)

Min's
1
Mins Messages postés 43 Date d'inscription mardi 31 juillet 2001 Statut Membre Dernière intervention 28 mai 2009 9
20 mai 2009 à 16:22
Désolé, je passe, mais pas tous les quarts d'heure :)

Quand je demandais une structure c'était avec les types de champs, mais on va faire avec :)

$timestamp_today = mktime(0,0,0); // Aujourd'hui à Minuit
$timestamp_in_a_week = $timestamp_today + ( 8 * 24 * 60 * 60) -1 //Le timestamp dans 8 jours - une seconde comme ça on reste dedans. 
$query = "SELECT * FROM adherents WHERE date_naissance BETWEEN ".$timestamp_today." AND ".$timestamp_in_a_week." ORDER BY Nom";


Par contre, si ta date de naissance est choisie à partir de selectboxes et que tu calcule le TS à minuit, tu peux juste faire un + (7*24*60*60) plutôt que (8*24*60*60)-1 ^^

au cas ou ton champ date de naissance serait un varchar, il faut penser à mettre des ' ' en plus autour des timestamps

$timestamp_today = mktime(0,0,0); // Aujourd'hui à Minuit
$timestamp_in_a_week = $timestamp_today + ( 8 * 24 * 60 * 60) -1 //Le timestamp dans 8 jours - une seconde comme ça on reste dedans. 
$query = "SELECT * FROM adherents WHERE date_naissance BETWEEN '".$timestamp_today."' AND '".$timestamp_in_a_week."' ORDER BY Nom";


Ca "doit" marcher comme ça. Ou alors que quelqu'un me corrige :)
1
cha7ri Messages postés 205 Date d'inscription samedi 15 mars 2008 Statut Membre Dernière intervention 20 mars 2011 29
20 mai 2009 à 17:05
le timestamp de la date de naissance serai tjrs inférieurs à la date d'aujourd'hui , le test [BETWEEN ".$timestamp_today." AND ".$timestamp_in_a_week." ORDER BY Nom"] sera toujours false
puisque le timestamp désigne le nombre de secondes écoulées depuis le 1er janvier 1970......

j'espére que je bien expliquer le probléme...........@+

1
Mins Messages postés 43 Date d'inscription mardi 31 juillet 2001 Statut Membre Dernière intervention 28 mai 2009 9
20 mai 2009 à 18:32
ARf... Crétin...

J'y réfléchis, je te réponds d'ici quelques minutes... ^^'
1

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

Posez votre question
cha7ri Messages postés 205 Date d'inscription samedi 15 mars 2008 Statut Membre Dernière intervention 20 mars 2011 29
19 mai 2009 à 17:38
ça marche pas........ même l'idée est erronée ,mais l'utilisation des timestamp est sur


0
Mins Messages postés 43 Date d'inscription mardi 31 juillet 2001 Statut Membre Dernière intervention 28 mai 2009 9
19 mai 2009 à 19:19
Euh... non, l'idée est correcte normalement, c'est toujours comme ça que j'ai fait.

Donns plutôt alors la structure de ta base de données et je te donnerai la requête php/mysql qui te faudra.
0
cha7ri Messages postés 205 Date d'inscription samedi 15 mars 2008 Statut Membre Dernière intervention 20 mars 2011 29
20 mai 2009 à 11:07
La structure de ma base est simple
une table adhérent(Nom ,Prenom, Date_naissance)

et merci........
0
cha7ri Messages postés 205 Date d'inscription samedi 15 mars 2008 Statut Membre Dernière intervention 20 mars 2011 29
20 mai 2009 à 15:17
up please

0
cha7ri Messages postés 205 Date d'inscription samedi 15 mars 2008 Statut Membre Dernière intervention 20 mars 2011 29
20 mai 2009 à 16:17
SVP

0
Mins Messages postés 43 Date d'inscription mardi 31 juillet 2001 Statut Membre Dernière intervention 28 mai 2009 9
20 mai 2009 à 19:01
Hum.

Méthode inverse alors, mais si tu as 15000 utilisateurs ça va pas le faire.

$today=mktime(0,0,0);
$limit=$today + (7 * 24 * 60 * 60);
$query="SELECT * FROM adherents ORDER BY date_naissance";
$res=mysql_query($query);
while ($row==mysql_fetch_assoc($res)) {
     $naiss=mktime(0,0,0,date("n", $row['date_naiss']), date('j', $row['date_naiss']));
     if (($naiss >= today) AND ($naiss <= $limit)) {
          //Il a sa date dans les temps
     }
}


Mais je suis pas convaincu et j'ai le cerveau en bouillie après la journée de boulot donc j'ai difficile de faire mieux......

:$
0
cha7ri Messages postés 205 Date d'inscription samedi 15 mars 2008 Statut Membre Dernière intervention 20 mars 2011 29
20 mai 2009 à 19:02
ok je t'attend

0
Mins Messages postés 43 Date d'inscription mardi 31 juillet 2001 Statut Membre Dernière intervention 28 mai 2009 9
21 mai 2009 à 10:04
Euh tu as essayé la méthode juste au dessus de ta réponse ? :)
0
cha7ri Messages postés 205 Date d'inscription samedi 15 mars 2008 Statut Membre Dernière intervention 20 mars 2011 29
21 mai 2009 à 13:04
je crois que ça marcheras pas......mais j'ai trouvé une solution ........

<?php
$req = " SELECT prenom, nom,DATE_FORMAT(Date_naissance, '%e %b.') AS datef,
(YEAR(CURRENT_DATE)-YEAR(Date_naissance)) - (RIGHT(CURRENT_DATE,5)<=RIGHT(Date_naissance,5)) +1 AS age,
TO_DAYS(CONCAT(LEFT(CURRENT_DATE,5), RIGHT(Date_naissance, 5))) - TO_DAYS(CURRENT_DATE) AS diff,
DATE_FORMAT(CONCAT('31-12-',YEAR(CURRENT_DATE)), '%j') AS nbj FROM adherents";
$res = mysql_query($req, $connection) or die(mysql_error());
$tab = mysql_fetch_assoc($res);
$Rows_tab = mysql_num_rows($res);
<?


et dans le BODY:
<table>
<?php


$n = 15; //nombre de jours de prévision
$i=0;
while($row = mysql_fetch_array($res)){
if($row['diff']<0) $row['diff'] = $row['diff'] + $row['nbj'];
if(($row['diff']<$n)&&($row['diff']>=0)){
$tab[$i][0] = $row['diff'];
$tab[$i]['nom'] = $row['prenom'];
$tab[$i]['age'] = $row['age'];
$tab[$i]['dans'] = $row['diff'];
$tab[$i]['date'] = $row['datef'];
?>
<tr>
<td> <? echo $row['prenom'] ." aura "; ?></td>
<td> <? echo $row['age']."ans dans"; ?></td>
<td> <? echo $row['diff']; ?></td>
<td> <? echo "jours (" .$row['datef'] .")" ;?></td>
</tr>
<?
}
$i++;
}

?>

</table>




merci d'avance tu m'as en moin donner par quoi débuterai ma recherche.......thinks
0