Afficher l'âge via l'année de naissance, selon si l'année est bissextile ou non

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Afficher l'âge via l'année de naissance, selon si l'année est bissextile ou non

par Clicky » 23 janv. 2008, 15:44

Oui, pas de problème :)

d'abord le formulaire :

Code : Tout sélectionner

<form method="post" action="affiche_age.php"> <input type="text" name="membre_jour_naiss" size="2" maxlength="2" /> / <input type="text" name="membre_mois_naiss" size="2" maxlength="2" /> / <input type="text" name="membre_annee_naiss" size="4" maxlength="4" /><br /> <input type="submit" value="Envoyer" /> </form>
Ensuite mon code de traitement :

affiche_age.php
<?php
/*Affichage de l'âge d'une personne, peu importe sa date de naissance
et tenant compte des personnes nées un 29 février d'une année bissextile*/

if (isset($_POST['membre_jour_naiss']) && isset($_POST['membre_mois_naiss']) && isset($_POST['membre_annee_naiss']))
{
	//On définit le jour, mois et année actuels avec la fonction date() pour chacun d'eux.
	$jour = date('d');
	$mois = date('m');
	$annee = date('Y');
	$annee_bis = date('L');//Pour savoir si l'année actuelle est bissextile ou non. 1 si oui, 0 si non.
	$jour_bis = 29;//Le dernier jour de février des années bissextiles
	$mois_bis = 02;//Le mois concerné

	//On définit le jour, mois et année de naissance de la personne, obtenus à l'aide du formulaire
	$membre_jour_naiss = intval(htmlentities($_POST['membre_jour_naiss']));
	$membre_mois_naiss = intval(htmlentities($_POST['membre_mois_naiss']));
	$membre_annee_naiss = intval(htmlentities($_POST['membre_annee_naiss']));

	//Si les champs ont été renseignés.
	if (!empty($_POST['membre_jour_naiss']) && !empty($_POST['membre_mois_naiss']) && !empty($_POST['membre_annee_naiss']))
	{
		//Si l'année est bissextile, pour ceux qui sont nés un 29 février et où l'anniversaire est passé.
		if (($membre_annee_naiss < $annee) && ($annee_bis == 1) && ($membre_jour_naiss == $jour_bis) && ($membre_jour_naiss == $jour) && ($membre_mois_naiss == $mois_bis) && ($mois >= $mois_bis) && ($mois >= $membre_mois_naiss))
		{
			$age1 = $annee - $membre_annee_naiss;
			echo 'Âge : '.$age1.' ans.';
		}
		//Si l'année est bissextile, pour ceux qui sont nés un 29 février et où l'anniversaire n'est pas passé.
		elseif (($membre_annee_naiss < $annee) && ($annee_bis == 1) && ($jour_bis == $membre_jour_naiss) && ($jour <= $membre_jour_naiss) && ($mois_bis == $membre_mois_naiss) && ($mois <= $mois_bis) && ($mois <= $membre_mois_naiss))
		{
			$age2 = $annee - (++$membre_annee_naiss);//L'incrémentation avant $membre_annee_naiss est nécessaire pour ajouter 1 an à celui de naissance et donc, enlever 1 an à l'âge affiché.
			echo 'Âge : '.$age2.' ans.';
		}
		//Si l'année n'est pas bissextile, pour ceux qui sont nés un 29 février et où l'anniversaire est passé.
		elseif (($membre_annee_naiss < $annee) && ($annee_bis == 0) && ($membre_jour_naiss == $jour_bis) && ($jour == 28) && ($membre_jour_naiss > $jour) && ($membre_mois_naiss == $mois_bis) && ($mois >= $mois_bis) && ($membre_mois_naiss <= $mois))
		{
			$age1 = $annee - $membre_annee_naiss;
			echo 'Âge : '.$age1.' ans.';
		}
		//Si l'année n'est pas bissextile, pour ceux qui sont nés un 29 février et où l'anniversaire n'est pas passé.
		elseif (($membre_annee_naiss < $annee) && ($annee_bis == 0) && ($membre_jour_naiss == $jour_bis) && ($jour < 28) && ($membre_jour_naiss < $jour) && ($membre_mois_naiss <= $mois_bis) && ($mois <= $mois_bis) && ($membre_mois_naiss <= $mois))
		{
			$age2 = $annee - (++$membre_annee_naiss);
			echo 'Âge : '.$age2.' ans.';
		}
		//Les cas dits "normaux".
		elseif (($membre_annee_naiss < $annee) && ($jour >= $membre_jour_naiss) && ($mois >= $membre_mois_naiss))
		{
			//On a le cas ici, où l'anniversaire est passé.
			$age1 = $annee - $membre_annee_naiss;
			echo 'Âge : '.$age1.' ans.';
		}
		else //Si l'anniversaire n'est pas passé.
		{
			$age2 = $annee - (++$membre_annee_naiss);
			echo 'Âge : '.$age2.' ans.';
		}

	}
	else //Si les champs n'ont pas été renseignés
	{
		echo 'Âge : Infos non précisées.';
	}
}
?>
Certains éléments des conditions des parties "bissextiles" ne paraîtront peut-être pas nécessaires pour les plus experts, mais je suis encore débutante et ces éléments me semblent utiles au bon fonctionnement du code.

Voilà, à bientôt :)

par zeus » 23 janv. 2008, 13:59

Est-ce que tu pourrais le poster ici pour que ça puisse servir à d'autres personnes recherchant dans le forum ? ;)

par Clicky » 23 janv. 2008, 13:19

Bonjour,

Bon en fait, j'ai testé mon code au dessus et tel qu'il est, il ne marche pas mais je l'ai modifié et il marche.

À plus :)

par Clicky » 22 janv. 2008, 12:06

Enlever l'année en trop ? :-s j'ai pas compris..

Bref, pour la vérification que l'année est bissextile ou non, si tu regardes bien tout le code, tu verra qu'au début, j'ai définie les variables pour la date actuelle et celle de naissance.
Ensuite dans les if secondaires qui sont dans les conditions principales (qui elles, marchent, une première pour le cas où la date n'aurait pas été précisée par la personne, une seconde pour le cas où elle l'aurait précisé et où le jour de sa naissance est passé et un else pour le cas où il ne serait pas encore passé), j'y ai donc mis de quoi (logiquement) afficher l'âge des gens nés un 29/02 (je fait quelque chose de très très beaucoup mal ! J'aimerais qu'il s'affiche la veille, le 28/02 :P ) avec les mêmes cas que les conditions principales.

Merci

edit : bon en fait je viens d'essayer en mettant la date de l'ordi un 28/02/2007 et mon code ne marche pas dans le cas où je précise ma date de naissance un 29/02, et en plus, les echos des conditions prinpales s'affichent avec ceux des secondaires, je vais réfléchir à un autre procédé.

Merci pour les réponses en tout cas :)

par Ryle » 22 janv. 2008, 11:40

Ah oui mais non... faut pas fêter un anniversaire la veille, c'est mal ! (un peu comme croiser les effluves ;)) Ce sont les saints que l'on souhaite la veille :) Bon, je sais, ça change pas grand chose au problème... ;)

Le 28/02 c'est pas son anniversaire, et le 01/03 son anniversaire sera passé, on compte donc bien qu'il a un an de plus :)

Maintenant si tu veux vraiment le lui souhaiter le 28 (c'est mal !! ;)) le seul cas particulier que tu as à tester c'est "SI l'année est bissextile ET que l'anniversaire du gars est le 29/02 ET que l'on est le 28/02 ALORS tu lui enlèves pas l'année en trop".
$age = $annee - $_POST['membre_annee_naiss']; // différence entre les années 

// si le mois, OU le jour du mois n'est pas encore passé, l'anniversaire n'a pas eu lieu, on ôte l'année en cours  
if ($mois < $_POST['membre_mois_naiss'] || $mois == $_POST['membre_mois_naiss'] && $jour < $_POST['membre_jour_naiss']) 
  $age = $age - 1; 

// Pour les naissances du 29/02
if (date('L')==1 && $_POST['membre_mois_naiss']==2 && $_POST['membre_jour_naiss']==29 && $mois==2 && $jour==28)
  $age = $age + 1; // bon ben on a eu tort de lui enlever, on sescuse, pardon aux familles, tout ça ;)

par Clicky » 22 janv. 2008, 11:23

Salut,
Euh... j'ai pas relu tout ton code en détail, mais tu te prends pas un peu beaucoup la tête pour pas grand chose ? :)

Pour connaitre l'age de quelqu'un, quand on a pas d'ordinateur à portée de main, on compte le nombre d'années écoulées depuis sa naissance, et on vérifie ensuite si son anniversaire est passé ou non... Quand on a un ordinateur sous la main, ben c'est pareil ;) Y a pas besoin de savoir si des années ont été bissextiles ou pas (sauf si tu veux la jouer, "oué, toi t'as que 5 ans et pas 20, na na na !" mais euh... voilà quoi :)), si le jour de l'an est tombé un vendredi 13 ou autre...
Oui je sais calculer un âge sans ordi ^^, j'ai d'ailleurs pensé exactement comme toi pour le calcul, mais ce dont je parle, c'est pour l'afficher le jour de l'anniversaire, pour ceux qui sont nés un 29 février, février n'a 29 jours que tous les quatre ans (année bissextile) et informatiquement, l'ordi ne se dit pas d'office que ces personnes fêteront leur anniversaire le 28 des années non bissextiles, alors j'ai essayé de faire un système qui prends l'anniversaire de ces gens en compte. Je voulais juste savoir si d'après vous, ces parties de codes pouvaient marcher :)

Merci

par Ryle » 22 janv. 2008, 00:45

Euh... j'ai pas relu tout ton code en détail, mais tu te prends pas un peu beaucoup la tête pour pas grand chose ? :)

Pour connaitre l'age de quelqu'un, quand on a pas d'ordinateur à portée de main, on compte le nombre d'années écoulées depuis sa naissance, et on vérifie ensuite si son anniversaire est passé ou non... Quand on a un ordinateur sous la main, ben c'est pareil ;) Y a pas besoin de savoir si des années ont été bissextiles ou pas (sauf si tu veux la jouer, "oué, toi t'as que 5 ans et pas 20, na na na !" mais euh... voilà quoi :)), si le jour de l'an est tombé un vendredi 13 ou autre ...
$jour = date('d'); 
$mois = date('m'); 
$annee = date('Y'); 

$age = $annee - $_POST['membre_annee_naiss']; // différence entre les années

// si le mois, OU le jour du mois n'est pas encore passé, l'anniversaire n'a pas eu lieu, on ôte l'année en cours 
if ($mois < $_POST['membre_mois_naiss'] || $mois == $_POST['membre_mois_naiss'] && $jour < $_POST['membre_jour_naiss'])
  $age = $age - 1;

echo 'Âge : '. $age .' ans.'; // on affiche l'age et on en parle plus ;)

// et pour le fun
if ($_POST['membre_mois_naiss'] == $mois && $_POST['membre_jour_naiss'] == $jour)
  echo 'Même que c\'est votre anniversaire, là tout de suite !';
Sinon, soit dit en passant, si tu as besoin de tester un comportement par rapport à une année bissextile ou non, il suffit de changer la date de ton ordinateur, ton serveur la prendra pour référence et tu pourras faire tous les tests que tu veux comme si tu étais en 2007, 2006, ...

Afficher l'âge via l'année de naissance, selon si l'année es

par Clicky » 22 janv. 2008, 00:02

Bonsoir,

J'ai créé un petit code pour afficher l'âge d'une personne avec sa date de naissance (même si elle est née avant 1970).
Il affiche aussi le changement d'âge le jour anniversaire.
Je lui ai mis un système pour ceux qui sont nés un 29 février (pour le problème de l'année bissextile ou non). Le code tel qu'il est, marchant pour les dates de naissance n'étant pas concernées par ce problème, j'aimerais savoir si les if des parties "année bissextile" vous paraissent plausibles, Je ne peux pas les tester puisque le dernier jour de février n'est pas encore passé et que l'année actuelle est bissextile.

Voici mon code :

<?php
/*En supposant qu'un formulaire ait été rempli auparavant pour récupérer la date de naissance d'une personne, par champs séparés : jour, mois et année de naissance.*/
 
if (isset($_POST['membre_jour_naiss']) && isset($_POST['membre_mois_naiss']) && isset($_POST['membre_annee_naiss']))
{
      //On définit le jour, mois et année actuels avec la fonction date() pour chacun d'eux.
      $jour = date('d');
      $mois = date('m');
      $annee = date('Y');
      $annee_bis = date('L');//Pour savoir si l'année actuelle est bissextile ou non. 1 si oui, 0 si non.
      $jour_bis = 29;
      $mois_bis = 02;
 
      //On définit le jour, mois et année de naissance de la personne, obtenus à l'aide du formulaire.
      $membre_jour_naiss = intval(htmlentities($_POST['membre_jour_naiss']));
      $membre_mois_naiss = intval(htmlentities($_POST['membre_mois_naiss']));
      $membre_annee_naiss = intval(htmlentities($_POST['membre_annee_naiss']));
 
      //On affiche un message d'infos non précisées si au moins un des champs ou tous sont vides.
      if (empty($_POST['membre_jour_naiss']) || empty($_POST['membre_mois_naiss']) || empty($_POST['membre_annee_naiss']))
      {
              echo 'Âge : Infos non précisées.';
      }
      //On affiche l'âge du membre à  l'aide de la condition if.
      elseif (($membre_annee_naiss < $annee) && ($jour >= $membre_jour_naiss) && ($mois >= $membre_mois_naiss))
      {
              //Si l'année est bissextile, pour ceux qui sont nés un 29 février.
              if (($annee_bis == 1) && ($jour_bis == $membre_jour_naiss) && ($mois_bis == $membre_mois_naiss))
              {
                      $age1 = $annee - $membre_annee_naiss;
                      echo 'Âge : '.$age1.' ans.';
              }
              //Si l'année n'est pas bissextile, pour ceux qui sont nés un 29 février.
              elseif (($annee_bis == 0) && ($jour_bis == $membre_jour_naiss) && ($jour == (--$jour)) && ($mois_bis == $membre_mois_naiss))
              {
                      $age1 = $annee - $membre_annee_naiss;
                      echo 'Âge : '.$age1.' ans.';
              }
              //On a le cas ici, où l'anniversaire est passé.
              $age1 = $annee - $membre_annee_naiss;
              echo 'Âge : '.$age1.' ans.';
      }
      else
      {
              //Si l'année est bissextile, pour ceux qui sont nés un 29 février.
              if (($annee_bis == 1) && ($jour_bis == $membre_jour_naiss) && ($mois_bis == $membre_mois_naiss))
              {
                      //Ici, l'anniversaire n'est pas encore passé, l'incrémentation avant la variable $membre_annee_naiss est nécessaire.
                      $age2 = $annee - (++$membre_annee_naiss);
                      echo 'Âge : '.$age2.' ans.';
              }
              //Si l'année n'est pas bissextile, pour ceux qui sont nés un 29 février.
              elseif (($annee_bis == 0) && ($jour_bis == $membre_jour_naiss) && ($jour == (--$jour)) && ($mois_bis == $membre_mois_naiss))
              {
                      $age2 = $annee - (++$membre_annee_naiss);
                      echo 'Âge : '.$age2.' ans.';
              }
              $age2 = $annee - (++$membre_annee_naiss);
              echo 'Âge : '.$age2.' ans.';
      }
}
?>
Désolée de montrer plus de vingt lignes de code mais je pense que c'est utile pour bien tout comprendre.

Merci d'avance :wink: