Liste des anniversaires pour les n prochains jours, dans l'ordre d'arrivees (php+mysql)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 223 fois - Téléchargée 31 fois

Contenu du snippet

Un bon exemple vaut mieux qu'un long discours (ici N=50 et nous sommes le 8/11/85) :
Le script affichera :

Emmanuelle aura 23 ans dans 10 jours (le 18 Nov.)
Fanny aura 16 ans dans 13 jours (le 21 Nov.)
Harold aura 14 ans dans 21 jours (le 29 Nov.)
Elisa aura 22 ans dans 29 jours (le 7 Dec.)
Arnaud aura 8 ans dans 32 jours (le 10 Dec.)
Agnès aura 48 ans dans 34 jours (le 12 Dec.)
Romain aura 21 ans dans 46 jours (le 5 Jan.)
Jean-Marc aura 43 ans dans 47 jours (le 6 Jan.)

La table doit contenir un/des champ nom/prénom et un champ date de naissance

Source / Exemple :


/* Script by mOut - http://mout.fr/

$CONFIG['hostname'] = "localhost";  //mettez les paramètres de votre base
$CONFIG['database'] = "nomdemabase";  //la meme chose que username pour free
$CONFIG['username'] = "monlogin";
$CONFIG['password'] = "monpassword";
$CONFIG['table'] = "matable";
$n = 50; //nombre de jours de prévision

$sql = mysql_connect($CONFIG['hostname'], $CONFIG['username'], $CONFIG['password']) or die(mysql_error());
mysql_select_db($CONFIG['database'], $sql);
$result = mysql_query("SELECT
   prenom, 
   nom, 
   DATE_FORMAT(date, '%e %b.') AS datef, 
   (YEAR(CURRENT_DATE)-YEAR(date)) - (RIGHT(CURRENT_DATE,5)<=RIGHT(date,5)) +1 AS age, 
   TO_DAYS(CONCAT(LEFT(CURRENT_DATE,5), RIGHT(date, 5))) - TO_DAYS(CURRENT_DATE) AS diff, 
   DATE_FORMAT(CONCAT('31-12-',YEAR(CURRENT_DATE)), '%j') AS nbj

FROM ".$CONFIG['table']) or die(mysql_error());

$i=0;
while($row = mysql_fetch_array($result)){
	if($row['diff']<0) $row['diff'] = $row['diff'] + $row['nbj'];
	if($row['diff']<$n){
		$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'];
	}
	$i++;
}
//tri sur $tab[][0] :
sort($tab); 

//tout est proprement rangé dans $tab maintenant

//formatage à votre guise (ex: si 0 jours mettre en rouge :))) :
foreach($tab as $ligne) echo "<b>".$ligne['nom']."</b> aura ".$ligne['age']." ans dans ".$ligne['dans']." jours (le <b>".$ligne['date']."</b>)<br />";

Conclusion :


- Ici je considère qu'il y a un champ "prenom", un champ "nom" et un champ "date" de type DATE, mais vous pouvez adapter le code a votre guise...

- 'nbj' renvoie 365 ou 366 selon l'année

- vous pouvez changer le format dans DATE_FORMAT() (cf. www.mysql.com)

A voir également

Ajouter un commentaire

Commentaires

cs_allamah
Messages postés
6
Date d'inscription
vendredi 19 mai 2006
Statut
Membre
Dernière intervention
12 mai 2012

Bonjour, Je suis un peu nouveau en php et j'ai voulu utiliser cette source. A l'exécution j'ai cette erreur qui s'affiche. Merci de m'indiquer quoi faire."Warning: Invalid argument supplied for foreach() in D:\xampp\htdocs\RTC_Riviera\site\accueil.php on line 101"
la ligne en questio : " foreach($tab as $ligne) echo "".$ligne['nom']." aura ".$ligne['age']." ans dans ".$ligne['dans']." jours (le ".$ligne['date'].")
";
"
cs_cha7ri
Messages postés
23
Date d'inscription
jeudi 29 novembre 2007
Statut
Membre
Dernière intervention
2 décembre 2009

et aussi 10/10 pour negfreddy

mais ce dernier script ne donne juste ceux qui vont fêter l'anniversaire aujourd'hui......

j'aimerai bien être averti avant ,,, c'est à dire j'aimerai bien avoir une liste des users qui vont fêter l'anniversaire cette semaine.....

merci ;)
cs_cha7ri
Messages postés
23
Date d'inscription
jeudi 29 novembre 2007
Statut
Membre
Dernière intervention
2 décembre 2009

merci,tu mérite mieux mais je n'ai trouvé que 10 au maximum
GillesWebmaster
Messages postés
496
Date d'inscription
mercredi 30 juin 2004
Statut
Membre
Dernière intervention
29 juillet 2009
1
Si c'est pas beau la vie!
10/10
negfreddy
Messages postés
16
Date d'inscription
mercredi 26 janvier 2005
Statut
Membre
Dernière intervention
25 mai 2009

j'ai trouver sa si tu veux si , sa peut t'aidai regarde

<?php
$date= date('m-d');
$date_match="%$date";
$sql_annif=mysql_query("SELECT pseudo, date_naiss, genre_mb FROM membre WHERE genre_mb NOT LIKE 'groupe' AND date_naiss LIKE '$date_match' ORDER BY date_naiss DESC");
while ($annif = mysql_fetch_row($sql_annif)) {
$pseudo=$annif[0];
$date=$annif[1];
list($annee, $mois, $jour) = explode('-', $date);
$today['mois'] = date('n');
$today['jour'] = date('j');
$today['annee'] = date('Y');
$annees = $today['annee'] - $annee;
if ($today['mois'] <= $mois) {
if ($mois == $today['mois']) {
if ($jour > $today['jour']) {
$annees--;
}
} else {
$annees--;
}
}
list($annee,$mois,$jour) = explode('-',$date);
$ddn = "$jour/$mois/$annee";
$genre_mb=$annif[2];
if ($genre_mb == 'femme') {
$e="e";
} else {
$e="";
}
echo "\t<tr>\n
\t\t<td> $pseudo </td>
\t\t<td align ="right">né$e le </td>
\t\t<td>$ddn ($annees ans)</td>
\t</tr>\n";
}
mysql_close($connect); ?>
</table>

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.