Topaze Posté 10 Août 2005 Posté 10 Août 2005 salut, J'ai dans ma table un champ date qui contient la date de naissance envoyée par la validation d'un formulaire sous cette forme aaaa/mm/jj. j'aimerai calculer l'age de la personne et l'afficher comment faire. Merci de votre aide
Boo2M0rs0 Posté 10 Août 2005 Posté 10 Août 2005 (modifié) Salut, après une recherche rapide je crois que ce code devrait marcher: SELECT YEAR(DATEDIFF(date_de_naissance,CURDATE())) FROM ta_table Modifié 10 Août 2005 par Boo2M0rs0
Topaze Posté 10 Août 2005 Auteur Posté 10 Août 2005 SELECT pseudo,YEAR(DATEDIFF(date_de_naissance,CURDATE())) FROM ta_table . . . echo '<td>' . $data['date_de_naissance']. '</td>'; j'ai ce message d'erreur : Undefined index: date_de_naissance
Dan Posté 10 Août 2005 Posté 10 Août 2005 Topaze, Ce champ est bien sûr à remplacer par le nom du champ dans ta base de données... Boo2M0rs0 aurait tout aussi bien pu mettre age_du_capitaine pour l'exemple, non ? Dan
Sarc Posté 10 Août 2005 Posté 10 Août 2005 Salut ! SELECT pseudo,YEAR(DATEDIFF(date_de_naissance,CURDATE())) AS age FROM ta_table et echo '<td>' . $data['age']. '</td>'; Ca devrait mieux marcher ça Edit : bien sûr remplace le nom de la table, le nom du champs, le nom de tout...
Topaze Posté 10 Août 2005 Auteur Posté 10 Août 2005 J'ai suivi à la lettre vos recommandations mais l'age ne s'affiche pas or avant j'avais aaaa/mm/jj qui s'affichait
Dan Posté 10 Août 2005 Posté 10 Août 2005 Topaze, Qu'as-tu mis comme requête ? Donnes-nous le code ici, ainsi que le nom de la table et le nom du champ qui contient la date. Parce que si tu suis les instructions à la lettre cela ne marchera pas. Il faut mettre le nom du champ et celui de la table en lieu et place de date_de_naissance ta_table Dan
Topaze Posté 11 Août 2005 Auteur Posté 11 Août 2005 salut, Voici la requete : $sql = 'SELECT pseudo,sexe,YEAR(DATEDIFF(datenaissance,CURDATE())) AS age FROM inscrits ORDER BY num ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); if($req) { echo '<table bgcolor="#FFFFFF">'."\n"; echo '<tr>'; echo '<td><b>PSEUDO</b></td>'; echo '<td><b>AGE</b></td>'; echo '<td><b>SEXE</b></td>'; echo '</tr>'."\n"; while ($data = mysql_fetch_array($req)) { echo '<tr>'; echo '<td>' , stripslashes(htmlentities(trim($data['pseudo']))) , '</td>'; echo '<td>' . $data['age']. '</td>'; echo '<td>' , stripslashes(htmlentities(trim($data['sexe']))) , '</td>'; echo '</tr>'."\n"; } // on libère l'espace mémoire alloué pour cette requête mysql_free_result ($req); echo '</table><br />'; Avec cette requete rien ne s'affiche dans la colonne Age
Boo2M0rs0 Posté 11 Août 2005 Posté 11 Août 2005 (modifié) Erf désolé, J'ai posté rapidement sans rien vérifier , après test, Je comprend pas pourquoi cela ne marche pas J'ai donc testé essayé plusieurs codes en php et j'ai réussi à faire ça qui semble à peu près fonctionnel :s ... //la date est au format aaaa/mm/jj//$date est alors un tableau contenant l'année dans l'index 0, le mois dans l'index 1 et le jour dans l'index 2$date = explode('/' , $data['datenaissance']);$date = mktime(0,0,0, $date[1], $date[2] , $date[0]);if( $date == -1 or !$date) $age = 'n/a';else $age = date( 'Y', time() - $date) - 1970;//Pourquoi -1970 ?? parce que les timestamp unix sont calculé à partir du 1er janvier 1970 Je tiens à m'excuser à tout ceux qui ont participé à ce topic et qui ont perdu leur temps jusque là à cause de moi Modifié 11 Août 2005 par Boo2M0rs0
Topaze Posté 11 Août 2005 Auteur Posté 11 Août 2005 Apres votre dernière correction j'ai ce message d'erreur : Notice: Undefined offset: 1 in c:\easyphp1-8\www\web\affichage2.php Notice: Undefined offset: 2 in c:\easyphp1-8\www\web\affichage2.php Warning: mktime(): Windows does not support negative values for this function in c:\easyphp1-8\www\web\affichage2.php pour cette ligne : $date = mktime(0,0,0, $date[1], $date[2] , $date[0]);
Sarc Posté 11 Août 2005 Posté 11 Août 2005 Moi j'ai une méthode archaïque qui a le mérite de marcher : $age = date("Y-m-d") - $danaiss; avec la date de naissance sous la forme Y-m-d également...
Topaze Posté 11 Août 2005 Auteur Posté 11 Août 2005 merci sarc ta méthode marche correctement. Mais j'aimerai que quelqu'un m'aide à corriger l'erreur. J'ai un autre problème sur upload d'image pourriez-vous aller sur le message pour me dire quoi faire
Boo2M0rs0 Posté 12 Août 2005 Posté 12 Août 2005 (modifié) Les chiffres de ta date sont peut être séparés par des tirets (et pas des slashs) donc il faut remplacer le '\' (dans la commande explode) par un '-', si c'est pas ça, je jète l'éponge ... La méthode de sarc a l'air cool, je ne savais pas que php savait faire ça Modifié 12 Août 2005 par Boo2M0rs0
Topaze Posté 12 Août 2005 Auteur Posté 12 Août 2005 cool effectivement j'ai des '-' dans ma date. Je vais suivre tes conseils A+
destroyedlolo Posté 12 Août 2005 Posté 12 Août 2005 Moi non plus, je ne savais pas que PHP savait faire ca Sinon, voila un code qui donne l'age sous forme d'Annee, mois, jour. function extrdate($date){/**** <- $date = AAAAMMJJ -> list($jour, $mois, $annee)****/ $j = substr($date,6,2); $m = substr($date,4,2); $a = substr($date,0,4); return array($j,$m,$a);}function age($date, $naissance){/**** <- $date, $naissance = AAAAMMJJ -> age en list($jour, $mois, $annee)****/ list($jn, $mn, $an) = extrdate($naissance); list($jd, $md, $ad) = extrdate($date); $a = $ad - $an; if( $md.$jd < $mn.$jn ) $a--; $m = $md - $mn; if( $jd < $jn) $m--; if($m < 0) $m+= 12; if(($j = $jd - $jn) < 0) $j+= date('t', mktime(0,0,0,$md-1,1,$ad)); return array($j,$m,$a);} Made in moi
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant