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

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

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.