Fêter anniversaire en PHP [Résolu/Fermé]

Signaler
Messages postés
205
Date d'inscription
samedi 15 mars 2008
Statut
Membre
Dernière intervention
20 mars 2011
-
Messages postés
205
Date d'inscription
samedi 15 mars 2008
Statut
Membre
Dernière intervention
20 mars 2011
-
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

Messages postés
43
Date d'inscription
mardi 31 juillet 2001
Statut
Membre
Dernière intervention
28 mai 2009
8
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57030 internautes nous ont dit merci ce mois-ci

Messages postés
43
Date d'inscription
mardi 31 juillet 2001
Statut
Membre
Dernière intervention
28 mai 2009
8
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57030 internautes nous ont dit merci ce mois-ci

Messages postés
205
Date d'inscription
samedi 15 mars 2008
Statut
Membre
Dernière intervention
20 mars 2011
19
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57030 internautes nous ont dit merci ce mois-ci

Messages postés
43
Date d'inscription
mardi 31 juillet 2001
Statut
Membre
Dernière intervention
28 mai 2009
8
ARf... Crétin...

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

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57030 internautes nous ont dit merci ce mois-ci

Messages postés
205
Date d'inscription
samedi 15 mars 2008
Statut
Membre
Dernière intervention
20 mars 2011
19
ça marche pas........ même l'idée est erronée ,mais l'utilisation des timestamp est sur


Messages postés
43
Date d'inscription
mardi 31 juillet 2001
Statut
Membre
Dernière intervention
28 mai 2009
8
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.
Messages postés
205
Date d'inscription
samedi 15 mars 2008
Statut
Membre
Dernière intervention
20 mars 2011
19
La structure de ma base est simple
une table adhérent(Nom ,Prenom, Date_naissance)

et merci........
Messages postés
205
Date d'inscription
samedi 15 mars 2008
Statut
Membre
Dernière intervention
20 mars 2011
19
up please

Messages postés
205
Date d'inscription
samedi 15 mars 2008
Statut
Membre
Dernière intervention
20 mars 2011
19
SVP

Messages postés
43
Date d'inscription
mardi 31 juillet 2001
Statut
Membre
Dernière intervention
28 mai 2009
8
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......

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

Messages postés
43
Date d'inscription
mardi 31 juillet 2001
Statut
Membre
Dernière intervention
28 mai 2009
8
Euh tu as essayé la méthode juste au dessus de ta réponse ? :)
Messages postés
205
Date d'inscription
samedi 15 mars 2008
Statut
Membre
Dernière intervention
20 mars 2011
19
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