Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/12/2010, 15h15   #1
Rédacteur
 
Avatar de pi-2r
 
Inscription : juin 2006
Messages : 1 388
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 388
Points : 2 216
Points : 2 216
Par défaut Calculer un age depuis une date de naissance

Bonjour,

je dois afficher la liste des joueurs dans un tableau, avec toute les caractéristiques. J'ai surmonter le problème d'extraction des dates en les passant à la norme FR .
Cependant je bloque sur l'affichage et le calcul de la date de naissance.
Mon code est le suivant:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
include('includes/fonction_bdd.php');
connect_bdd('ma_BDD');
$requete = mysql_query("SELECT * FROM seniors ORDER BY nom") or die(mysql_error());
//fonction pour afficher une date en FR depuis une date en US
function dateFr($date)
{
return strftime('%d-%m-%Y',strtotime($date));
}
?>
.....
<?php
//Si les joueurs sont présent alors
$requete = "SELECT * FROM joueurs ORDER BY id";
$result = @mysql_query($requete) or die(mysql_error());
if(@mysql_num_rows($result) > 0)
{
?>  
<center><h2 id="example">Les joueurs</h2></center>
		<?php
		$result = mysql_query('SELECT * FROM joueurs WHERE postejoueur ="attaquant"  ') or die(mysql_error());
		if(@mysql_num_rows($result) > 0)
		{
		?>
			<h2 >Attaquant</h2>
			<div class="container">
			<p style="color: #ccc;">
			<ul class="column"> 
			<?php
			while($sql = mysql_fetch_array($result))
			{								
			?>	
			<li> 
			<div class="block">
			<img style="width: 140px; height: 144px;" alt="" src="galerie/<?php echo $sql['lienimage'];?>">
			<font color="black">
                       <p><?php echo $sql['prenom'].' '.$sql['nom'];?></p>
                       <p>Age: <?php $age=$sql['age']; echo dateFr($age);?></p>
                       <p>Nationalité:<?php echo $sql['nation'];?></p>
                       <p>Taille: <?php echo $sql['taille'];?> Cm</p>
                       <p>Poids: <?php echo $sql['poids'];?> Kg</p></font>
	/div>
	</li> 
	<?php
		}
             }
	?>
....
<?php
}
?>
j'ai trouvé cette fonction pour calculer les dates de naissances:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
function Age($date_naissance)
     {
     $arr1 = explode('/', $date_naissance); // on sépare les chiffres de / grace à la fonction explode
     $arr2 = explode('/', date('d/m/Y'));
 
     if(($arr1[1] < $arr2[1]) || (($arr1[1] == $arr2[1]) && ($arr1[0] <= $arr2[0])))
     return $arr2[2] - $arr1[2];
 
    return $arr2[2] - $arr1[2] - 1;
     }
 
 
     // exemple
     $ma_date_de_naissance = '26/05/1904';
     $mon_age = Age($ma_date_de_naissance);
     $auj=date('d/m/Y');
     echo $mon_age;
     ?>
Ma question est, comment puis-je appliquer cette dernière fonction pour obtenir la date de naissance des joueurs ?


Merci d'avance
__________________
Les pièges de l'Internet
Helix, réponse à une intrusion
[ Pas de questions techniques en MP ]


"La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
"Si j’ai vu si loin, c’est que j’étais monté sur des épaules de géants." Isaac Newton
pi-2r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 15h21   #2
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
http://blog.jaysalvat.com/article/sn...e-de-naissance

Pourrait t'être utile?
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 15h33   #3
Rédacteur
 
Avatar de pi-2r
 
Inscription : juin 2006
Messages : 1 388
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 388
Points : 2 216
Points : 2 216
ok je regarde ça
__________________
Les pièges de l'Internet
Helix, réponse à une intrusion
[ Pas de questions techniques en MP ]


"La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
"Si j’ai vu si loin, c’est que j’étais monté sur des épaules de géants." Isaac Newton
pi-2r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 15h41   #4
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Juste, je trouve son "usage" plutot bizarre...

Code :
I'm Jay, I'm < ?= age('1974-01-31') ?> and live on the French Riviera.
J'aurais plutot fait ça:
Code :
I'm Jay, I'm <?php echo age('1974-01-31'); ?> and live on the French Riviera.
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 15h45   #5
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
@radicaldreamer

est un alias bien pratique de
Note additionnelle:
Code :
1
2
3
4
5
6
7
 
<p>
<?php if ($a): ?>
<a href="$a">$a</a>
<?php elseif($b): ?>
<a href="$b">salade</a>
<?php endif; ?>
est aussi une syntaxe bien pratique pour ne pas perdre ses { et } dans l'indentation (X)HTML
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 15h48   #6
Membre actif
 
Avatar de el_pedro
 
Homme Pierre PLAZANET
Inscription : août 2008
Messages : 199
Détails du profil
Informations personnelles :
Nom : Homme Pierre PLAZANET
Âge : 25
Localisation : France

Informations forums :
Inscription : août 2008
Messages : 199
Points : 194
Points : 194
Je me suis permis de réécrire la fonction de calcul de l'age. Il te suffit juste d'intégrer la fonction dans ton code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
include('includes/fonction_bdd.php');
connect_bdd('ma_BDD');
$requete = mysql_query("SELECT * FROM seniors ORDER BY nom") or die(mysql_error());
//fonction pour afficher une date en FR depuis une date en US
function dateFr($date)
{
	return strftime('%d-%m-%Y',strtotime($date));
}
function Age($date){
	$date = preg_split('/\//', $date);
	return floor((strtotime("now") - strtotime($date[1].'/'.$date[0].'/'.$date[2]))/60/60/24/365.25);
}
?>
.....
<?php
 
//Si les joueurs sont présent alors
$requete = "SELECT * FROM joueurs ORDER BY id";
$result = @mysql_query($requete) or die(mysql_error());
if(@mysql_num_rows($result) > 0)
{
?>  
<center><h2 id="example">Les joueurs</h2></center>
		<?php
		$result = mysql_query('SELECT * FROM joueurs WHERE postejoueur ="attaquant"  ') or die(mysql_error());
		if(@mysql_num_rows($result) > 0)
		{
		?>
			<h2 >Attaquant</h2>
			<div class="container">
			<p style="color: #ccc;">
			<ul class="column"> 
			<?php
			while($sql = mysql_fetch_array($result))
			{								
			?>	
			<li> 
			<div class="block">
			<img style="width: 140px; height: 144px;" alt="" src="galerie/<?php echo $sql['lienimage'];?>">
			<font color="black">
                       <p><?php echo $sql['prenom'].' '.$sql['nom'];?></p>
                       <p>Age: <?php echo Age(dateFr($sql['age']));?></p>
                       <p>Nationalité:<?php echo $sql['nation'];?></p>
                       <p>Taille: <?php echo $sql['taille'];?> Cm</p>
                       <p>Poids: <?php echo $sql['poids'];?> Kg</p></font>
	/div>
	</li> 
	<?php
		}
             }
	?>
....
<?php
}
?>
ça devrai fonctionner....
el_pedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 15h51   #7
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
C'est tout à fait faisable sans php , uniquement avec ta requête sql :
http://dev.mysql.com/doc/refman/5.0/...culations.html

Idem pour la date de naissance en français, nul besoin de fonction spécifique en php :
Code :
SELECT DATE_FORMAT('%d/%m/%Y',date_naissance) FROM matable
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 16h14   #8
Rédacteur
 
Avatar de pi-2r
 
Inscription : juin 2006
Messages : 1 388
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 388
Points : 2 216
Points : 2 216
merci de vos réponses
@el_pedro
pour ta fonction j'ai un problème à cette ligne de code:
Code :
return floor((strtotime("now") - strtotime($date[1].'/'.$date[0].'/'.$date[2]))/60/60/24/365.25);
et l'erreur est la suivante:
Citation:
Notice: Undefined offset: 1 in .....
@grunk
Pour le SQL....il faut que je modifie ma table et le fonctionnement de mon calendrier pour enregistrer les dates...bon je préfère utiliser la fonction de calcul pour le moment.
__________________
Les pièges de l'Internet
Helix, réponse à une intrusion
[ Pas de questions techniques en MP ]


"La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
"Si j’ai vu si loin, c’est que j’étais monté sur des épaules de géants." Isaac Newton
pi-2r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 16h32   #9
Rédacteur
 
Avatar de pi-2r
 
Inscription : juin 2006
Messages : 1 388
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 388
Points : 2 216
Points : 2 216
pou l'erreur si je mets @ devant floor
Code :
return @floor((strtotime("now") - strtotime($date[1].'/'.$date[0].'/'.$date[2]))/60/60/24/365.25);
cela m'affiche 40 ans alors que la date de naissance dans ma BDD est "1989-01-31" (US)
__________________
Les pièges de l'Internet
Helix, réponse à une intrusion
[ Pas de questions techniques en MP ]


"La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
"Si j’ai vu si loin, c’est que j’étais monté sur des épaules de géants." Isaac Newton
pi-2r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 10h14   #10
Membre actif
 
Avatar de el_pedro
 
Homme Pierre PLAZANET
Inscription : août 2008
Messages : 199
Détails du profil
Informations personnelles :
Nom : Homme Pierre PLAZANET
Âge : 25
Localisation : France

Informations forums :
Inscription : août 2008
Messages : 199
Points : 194
Points : 194
Normal, j'ai prix un format MM/DD/YYYY....

Si tu garde ton format 1989-01-31 donc YYYY-MM-DD voila la bonne fonction :

Code :
1
2
3
4
function Age($date){
	$date = preg_split('/-/', $date);
	return floor((strtotime("now") - strtotime($date[1].'/'.$date[2].'/'.$date[0]))/60/60/24/365.25);
}
Bon, je n'ai pas testé cette modification... mais ça doit être bon.
el_pedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 13h51   #11
Rédacteur
 
Avatar de pi-2r
 
Inscription : juin 2006
Messages : 1 388
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 388
Points : 2 216
Points : 2 216
euh... ça n'a rien changé....
je continue à chercher de mon coté.
__________________
Les pièges de l'Internet
Helix, réponse à une intrusion
[ Pas de questions techniques en MP ]


"La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
"Si j’ai vu si loin, c’est que j’étais monté sur des épaules de géants." Isaac Newton
pi-2r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 19h27   #12
Rédacteur
 
Avatar de pi-2r
 
Inscription : juin 2006
Messages : 1 388
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 388
Points : 2 216
Points : 2 216
mon prof d'info vient de mon donner la solution ce matin.
à la ligne ou il y a :
Code :
 <p>Age: <?php echo Age(dateFr($sql['age']));?></p>
il suffit d'enlever dateFr et le tour est joué
__________________
Les pièges de l'Internet
Helix, réponse à une intrusion
[ Pas de questions techniques en MP ]


"La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
"Si j’ai vu si loin, c’est que j’étais monté sur des épaules de géants." Isaac Newton
pi-2r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 21h28   #13
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
pour ne pas avoir tout fair en mysql c'etait plus simple non ?
Code :
1
2
SELECT TIMESTAMPDIFF(YEAR,'1989-01-31', NOW());
//21

ca lui fait pas peur ton prof d'info de voir des choses comme ca ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h53.


 
 
 
 
Partenaires

Hébergement Web