Jump to content
bernard.hericher

trouver l'age en php

Rate this topic

Recommended Posts

bonjour, j'administre un site pour anciens combattants et j'affiche dans des ifram des info en php à partir d'une base de données Mysql.

J'ai créé un tableau m'affichant les anniversaires des 30 prochains jours et je recherche comment faire pour d'une part remettre les dates d'anniversaire du format YY-MM-JJ en  JJ-MM-YY.

Et d'autre part j'ai créé une nouvelle colonne pour y afficher l'âge des adhérents mais je bloque sur ces deux points. Merci pour votre aide.

voici mon code :

// Requete sql sur la table "galette_adherents, colonne "ddn_adh"(qui veut dire date de naissance) pour vérification si anniversaire J+30
        $reponce = mysql_query("SELECT nom_adh,prenom_adh,ddn_adh            
        FROM galette_adherents
        WHERE DATE_FORMAT(ddn_adh,'%m%d%y')
        BETWEEN DATE_FORMAT(CURDATE(), '%m%d%y')
        AND DATE_FORMAT(DATE_ADD(CURDATE(),
        INTERVAL 30 DAY), '%m%d%y')
        ORDER BY ddn_adh DESC");
        
        // compte le nombre d'adherents dont l'anniveraire se situe dans les 30 prochains jours.
        $query = "SELECT count(id_adh)
        FROM galette_adherents
        WHERE ddn_adh IS NOT NULL";
    $result = mysql_query($query) or die (mysql_error());
    $resultat=mysql_fetch_row($result);    
    
        // Affiche l'entete du tableau avec les resultats
        ?>         
           <table>        
                <tr>      
                    <th>NOM</th>
                    <th>PRENOM</th>                           
                    <th>ANNIVERSAIRE</th>
                    <th>AGE</th
                    
                </tr>
            <?php            
                        
            //On affiche les lignes du tableau une à une à l'aide d'une boucle

            while($donnees = mysql_fetch_array($reponce))
            {
              ?>
              
                <tr>                                       
                    <td><?php echo $donnees['nom_adh'];?></td>
                    <td><?php echo $donnees['prenom_adh'];?></td>                                
                    <td><?php echo $donnees['ddn_adh'];?></td>                    
                </tr>
                <?

 

anniversaires.JPG

Share this post


Link to post
Share on other sites

Bonjour,

 

ci-après un script SQL expliqué pour votre calcul:

 

SELECT nom_adh, prenom_adh, ddn_adh, DATE_FORMAT(ddn_adh, '%d-%m-%y') as formatedDate, FLOOR(DATEDIFF(CURDATE(), ddn_adh)/365) as age
FROM galette_adherents 
WHERE (DAY(ddn_adh) >= DAY(CURDATE()) AND MONTH(ddn_adh) = MONTH(CURDATE())) 
OR (DAY(ddn_adh) <= DAY(CURDATE()) AND MONTH(ddn_adh) = MONTH(CURDATE())+1);

La première ligne sélectionne le nom, prénom, date de naissance (non formaté), la date de naissance (formaté en jj-mm-aa, et nommé formatedDate) et son age anniversaire (diff. entre la date du jour et la date de naissance (en jours) divisé par 365 (pour avoir les années) le tout arrondi à l'inférieur, sous le nom age

La seconde ligne spécifie la table,

la troisième ligne demande à ce que le JOUR de la date de naissance soit égal ou supérieur au jour actuel du mois en cours, et que le mois de la date de naissance soit égal au mois de la date en cours

la quatrième ligne demande à ce que le JOUR de la date de naissance soit égale ou inférieure au jour actuel du mois en cours, et que le mois de la date de naissance soit égal au mois en cours +1. 

Enfin, entre la 3e et 4e ligne, on demande que ce soit soit l'un, soit l'autre.

 

résultat visuel de la requête:

dadzadzadza.png

 

Dans ton script, il te suffit ensuite de faire un mysql_count_rows (je pense, je n'ai pas utilisé mysql_quelquechose depuis longtemps, c'est déprécié et non recommandé niveau sécurité) pour avoir le nombre d'anniversaires dans les 30 prochains jours. 

pour ce qui est de la boucle while, tu peux utiliser nom_adh, prenom_adh, ddn_adh (format yyyy-mm-dd), formatedDate (format dd-mm-yy), et age (son... age)

 

voilà, j'espère que ça t'aurai aidé, ne copie-colle pas bêtement mais essaie de voir comment ça a été fait pour progresser également dans tes connaissances !

 

Bonne journée !

 

PS: j'ai déplacé votre post dans le forum PHP

  • Like 1

Share this post


Link to post
Share on other sites

Un grand merci pour cette réponse très détaillée.

j'ai essayé plusieurs solutions avec votre code mais je bloque.

j'ai un retour :

Warning : mysql_fetch_array() attend le paramètre 1 ressource, boolean dans C:\wamp\ www\php_site \test_anniversaire.php sur la ligne 40

quand au tableau

<tr>                                       
                    <td><?php echo $donnees['nom_adh'];?></td>
                    <td><?php echo $donnees['prenom_adh'];?></td>                                
                    <td><?php echo $donnees['ddn_adh'];?></td>                    
                </tr>

comment faire pour entrer les données, je dois vous avouer que je suis super novice en php.

j'arrive à construire mes fichiers grâce à vos conseils et à une pile de bouquins.

Dans mon petit village, aucune personne pour m'aider ou me former.

Merci

Share this post


Link to post
Share on other sites

pouvez-vous fournir le code complet? Cela sera plus facile pour vous aider

Share this post


Link to post
Share on other sites

oui avec plaisir,

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml

<head>
        <title> Base de donnees uncmimizan</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />    <style type="text/css">
    body,td,th {
	font-size: 15px;
	color: #000;	}
{
	font-size: 14px;	}
    </style>
    </head>
    <body>
        <?php
		
		//Connection avec la BDD.
        mysql_connect("localhost", " root", "")or die ('Erreur :'.mysql_error());
        mysql_select_db("uncmimiz_membres")or die ('Erreur :'.mysql_error());
				
		// Requete sql sur la table "galette_adherents, colonne "ddn_adh" pour vérification si anniversaire J+30
		

		$reponce = mysql_query("SELECT nom_adh,prenom_adh,ddn_adh			
        FROM galette_adherents
		WHERE DATE_FORMAT(ddn_adh,'%m%d%y')
		BETWEEN DATE_FORMAT(CURDATE(), '%m%d%y')
		AND DATE_FORMAT(DATE_ADD(CURDATE(),
		INTERVAL 30 DAY), '%m%d%y')
		ORDER BY ddn_adh DESC");
		
		// compte le nombre d'adherents dont l'anniveraire se situe dans les 30 prochains jours.
		$query = "SELECT count(id_adh)
		FROM galette_adherents
		WHERE ddn_adh IS NOT NULL"; 
	$result = mysql_query($query) or die (mysql_error());
	$resultat=mysql_fetch_row($result);	
	
		// Affiche l'entete du tableau avec les resultats 
        ?>     	
           <table>		
                <tr>       
					<th>NOM</th>
                    <th>PRENOM</th>                   		
					<th>ANNIVERSAIRE</th>
					<th>AGE</th
					
                </tr>
            <?php			
						
			//On affiche les lignes du tableau une à une à l'aide d'une boucle
            while($donnees = mysql_fetch_array($reponce))
			{
              ?>
			  
                <tr>                   					
					<td><?php echo $donnees['nom_adh'];?></td>
                    <td><?php echo $donnees['prenom_adh'];?></td>                    			
					<td><?php echo $donnees['ddn_adh'];?></td>					
                </tr>
				<?
		?>			
<style type="text/css">
<table>
{
border-style:double;border-min-wigth 30%: 3px;border-color: yellow;background-color:yellow;
border-collapse: collapse;
min-width: 30%;
}
th
{
font-family: Arial;
border-style:double;
min-width: 30%;
padding: 5px;
background-color:yellow;
}
td 
{font-family: sans-serif;
border-style:double;
min-width: 30%;
margin:auto
text-decoration: none;  color: yellow;padding: 5px;text-align: left;background-color: blue;caption font-family: sans-serif;}
</style>,
<?php
}
		//fin de la boucle, le tableau contient toute la BDD
		//deconnection de mysql
mysql_close(); 
 ?>
 </table>
</body>
</html>

voilà, j'espère que ça va vous aider. Merci d'avance.

Bernard.

Share this post


Link to post
Share on other sites

Dans ce code, mon code n'est pas présent; Êtes-vous sûr qu'il s'agit du bon fichier test_anniversaire.php ?

Share this post


Link to post
Share on other sites

Désolé, une petite erreur

voici votre code inséré dans le mien :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml

<head>
        <title> Base de donnees uncmimizan</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />    <style type="text/css">
    body,td,th {
	font-size: 15px;
	color: #000;	}
{
	font-size: 14px;	}
    </style>
    </head>
    <body>
        <?php
		
		//Connection avec la BDD.
        mysql_connect("localhost", "root", "")or die ('Erreur :'.mysql_error());
        mysql_select_db("uncmimiz_membres")or die ('Erreur :'.mysql_error());
				
		// Requete sql sur la table "galette_adherents, colonne "ddn_adh" pour vérification si anniversaire J+30

$reponce = mysql_query("SELECT nom_adh, prenom_adh, ddn_adh, DATE_FORMAT(ddn_adh, '%d-%m-%y') as formatedDate, FLOOR(DATEDIFF(CURDATE(), ddn_adh)/365) as age
FROM galette_adherents 
WHERE (DAY(ddn_adh) >= DAY(CURDATE()) AND MONTH(ddn_adh) = MONTH(CURDATE())) 
OR (DAY(ddn_adh) <= DAY(CURDATE()) AND MONTH(ddn_adh) = MONTH(CURDATE())+1");

// Affiche l'entete du tableau avec les resultats 
        ?>     	
           <table>		
                <tr>       
					<th>NOM</th>
                    <th>PRENOM</th>                   		
					<th>ANNIVERSAIRE</th>
					<th>AGE</th>
				</tr>
            <?php
//On affiche les lignes du tableau une à une à l'aide d'une boucle
            while($donnees = mysql_fetch_array($reponce))
			{
              ?>
			  
                <tr>                   					
					<td><?php echo $donnees['nom_adh'];?></td>
                    <td><?php echo $donnees['prenom_adh'];?></td>                    			
					<td><?php echo $donnees['ddn_adh'];?></td>					
                </tr>
				<?
							
  		?>	
		<style type="text/css">
<table>
{
border-style:double;border-min-wigth 30%: 3px;border-color: yellow;background-color:yellow;
border-collapse: collapse;
min-width: 30%;
}
th
{
font-family: Arial;
border-style:double;
min-width: 30%;
padding: 5px;
background-color:yellow;
}
td 
{font-family: sans-serif;
border-style:double;
min-width: 30%;
margin:auto
text-decoration: none;  color: yellow;padding: 5px;text-align: left;background-color: blue;caption font-family: sans-serif;}
</style>,
<?php
}
		//fin de la boucle, le tableau contient toute la BDD
		//deconnection de mysql
mysql_close(); 
 ?>
 </table>
</body>
</html>

 

Share this post


Link to post
Share on other sites

il manque un ) a la fin de la requête SQL de $reponce.

également, il y avait des petites erreurs: le code CSS (style) avait entre-autre une balise sans nom, ou encore ton <script> qui était dans la boucle, l'écrivant autant de fois qu'il y a d'anniversaires dans les 30 prochains jours; pour régler ça, il suffit de fermer la boucle avant <style> et de fermer la balise table.

 

Dans ton code CSS <style> en fin de page, tu as écrit <table> { ... } alors qu'il ne faut pas mettre les chevrons. table { ... } suffit.

J'ai également indenter ton code (je te conseille de tout le temps le faire, cela rends le code plus lisible et aide à trouver les erreurs 

 

Voici le code après changements:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml
  <head>
      <title> Base de donnees uncmimizan</title>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />    
      <style type="text/css">
        body,td,th {
	        font-size: 15px;
	        color: #000;	
        }
        IL_MANQUE_QUELQUE_CHOSE_ICI{
	        font-size: 14px;	
        }
      </style>
  </head>
  <body>
  <?php
		//Connection avec la BDD.
    mysql_connect("localhost", "root", "")or die ('Erreur :'.mysql_error());
    mysql_select_db("uncmimiz_membres")or die ('Erreur :'.mysql_error());
    
    // Requete sql sur la table "galette_adherents, colonne "ddn_adh" pour vérification si anniversaire J+30
    $reponce = mysql_query("SELECT nom_adh, prenom_adh, ddn_adh, DATE_FORMAT(ddn_adh, '%d-%m-%y') as formatedDate, FLOOR(DATEDIFF(CURDATE(), ddn_adh)/365) as age FROM galette_adherents WHERE (DAY(ddn_adh) >= DAY(CURDATE()) AND MONTH(ddn_adh) = MONTH(CURDATE())) OR (DAY(ddn_adh)<= DAY(CURDATE()) AND MONTH(ddn_adh) = MONTH(CURDATE())+1)");
    // Affiche l'entete du tableau avec les resultats 
  ?>     	
      <table>		
        <tr>       
					<th>NOM</th>
          <th>PRENOM</th>                   		
					<th>ANNIVERSAIRE</th>
					<th>AGE</th>
				</tr>
  <?php
    //On affiche les lignes du tableau une à une à l'aide d'une boucle
    while($donnees = mysql_fetch_array($reponce)) {
  ?>
        <tr>                   					
          <td><?php echo $donnees['nom_adh'];?></td>
          <td><?php echo $donnees['prenom_adh'];?></td>                    			
					<td><?php echo $donnees['ddn_adh'];?></td>					
        </tr>
  <?
    }	// Fermeture de la boucle ici, car précédement, la boucle se terminait après la balise style, ce qui ajoutait du style à chaque ligne affichée.
    mysql_close();
  ?>
    </table>
    <style type="text/css">
      table {
        border-style:double;border-min-wigth 30%: 3px;border-color: yellow;background-color:yellow;
        border-collapse: collapse;
        min-width: 30%;
      }
      th {
        font-family: Arial;
        border-style:double;
        min-width: 30%;
        padding: 5px;
        background-color:yellow;
      }
      td {
        font-family: sans-serif;
        border-style:double;
        min-width: 30%;
        margin:auto
        text-decoration: none;  color: yellow;padding: 5px;text-align: left;background-color: blue;caption font-family: sans-serif;
      }
    </style>
  </body>
</html>

 

Je te conseille également de ne pas utiliser les fonctions commençant par mysql_ et mysqli_ car elles sont non sécurisées et considérées "mortes" depuis de nombreuses versions de PHP. Si tu comptes continuer le PHP, je te conseille de te tourner vers PDO, une "classe" PHP qui gère la base de donnée et sécurise ce que l'utilisateur encode avant insertion en base de données.

http://php.net/manual/en/pdo.prepare.php

 

Cela peut paraître flou au début, mais tu devra y passer si tu veux progresser dans un bon environnement !

 

Bon courage et à bientôt !

  • Like 1

Share this post


Link to post
Share on other sites

Merci beaucoup pour ton aide, je vais continuer à travailler. Grâce à toi, j'ai déjà quelques pistes.

bonne fin de journée.

je ne manquerai pas de te tenir au courant de l'évolution.

Share this post


Link to post
Share on other sites

Bonjour, après plusieurs tentatives, je n'ai toujours pas trouver la solution.

voici le code que j'ai modifié et la capture d'écran de ce que j'aimerai avoir mais dans la colonne "age",

c'est la date d'aujourd'hui qui s'affiche. Toujours pas trouvé non plus comment affiché la date de naissance au format  "jj-mm-AAAA.

Merci pour l'aide.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml

<head>
        <title> Base de donnees uncmimizan</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />    <style type="text/css">
    body,td,th {
	font-size: 15px;
	color: #000;
	font-size: 14px;	}
    </style>
    </head>
    <body>
        <?php
		
		//Connection avec la BDD.
		
        mysql_connect("localhost", "", "")or die ('Erreur :'.mysql_error());
        mysql_select_db("")or die ('Erreur :'.mysql_error());
				
		//Calcul pour afficher l'age
		
		
		$aujourdhui=strftime('%m%d%Y');
		$age=$aujourdhui-$donnees['ddn_adh'];
		
		// Requete sql sur la table "galette_adherents, colonne "ddn_adh" pour vérification si anniversaire J+30
		
		$reponce = mysql_query("SELECT nom_adh,prenom_adh,ddn_adh,id_adh		
        FROM galette_adherents
		WHERE DATE_FORMAT(ddn_adh,'%m%d%y')		
		BETWEEN DATE_FORMAT(CURDATE(),'%m%d%y')
		AND DATE_FORMAT(DATE_ADD(CURDATE(),
		INTERVAL 30 DAY), '%m%d%y')		
		ORDER BY ddn_adh ");
		
		// compte le nombre d'adherents dont l'anniveraire se situe dans les 30 prochains jours.
		
		$query = "SELECT count(id_adh)
		FROM galette_adherents
		WHERE ddn_adh IS NOT NULL "; 
	$result = mysql_query($query) or die (mysql_error());
	$resultat=mysql_fetch_row($result);	
	
		// Affiche l'entete du tableau avec les resultats 
        ?>     	
           <table>		
                <tr>       
					<th>NOM</th>
                    <th>PRENOM</th>                   		
					<th>ANNIVERSAIRE</th>
					<th>AGE</th
					
                </tr>
            <?php			
						
			//On affiche les lignes du tableau une à une à l'aide d'une boucle
            while($donnees = mysql_fetch_array($reponce))			
			{
              ?>
			  		  
                <tr>                   					
					<td><?php echo $donnees['nom_adh'];?></td>
                    <td><?php echo $donnees['prenom_adh'];?></td>                    			
					<td><?php echo $donnees['ddn_adh'];?></td>
					<td><?php echo $age;?></td>
                </tr>
				<?
				
		?>			
<style type="text/css">
<table>
{
border-style:double;border-min-wigth 30%: 3px;border-color: yellow;background-color:yellow;
border-collapse: collapse;
min-width: 30%;
}
th
{
font-family: Arial;
border-style:double;
min-width: 30%;
padding: 5px;
background-color:yellow;
}
td 
{font-family: sans-serif;
border-style:double;
min-width: 30%;
margin:auto
text-decoration: none;  color: yellow;padding: 5px;text-align: left;background-color: blue;caption font-family: sans-serif;}
</style>,
<?php
}
		//fin de la boucle, le tableau contient toute la BDD
		//deconnection de mysql
mysql_close(); 
 ?>
 </table>
</body>
</html>

 

ages.JPG

Share this post


Link to post
Share on other sites

C'est toujours votre ancien code, il n'y a aucun correctif comparé l'une des premières versions et ne contient aucune ligne de ma requête SQL ^^

Pensez à bien vérifier d'être à jour avant d'aller plus loin, ça règle souvent les problèmes ;)

Share this post


Link to post
Share on other sites

oui, je me suis emmêlé les pinceaux, désolé :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml
  <head>
      <title> Base de donnees uncmimizan</title>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />    
      <style type="text/css">
        body,td,th {
	    font-size: 15px;
	    color: #000;        
      </style>
  </head>
  <body>
  <?php
		//Connection avec la BDD.
    mysql_connect("localhost", "", "")or die ('Erreur :'.mysql_error());
    mysql_select_db("")or die ('Erreur :'.mysql_error());
    
    // Requete sql sur la table "galette_adherents, colonne "ddn_adh" pour vérification si anniversaire J+30
    $reponce = mysql_query("SELECT nom_adh, prenom_adh, ddn_adh 
	DATE_FORMAT(ddn_adh, '%d-%m-%y') as formatedDate, 
	FLOOR(DATEDIFF(CURDATE(), ddn_adh)/365) as age 
	FROM galette_adherents 
	WHERE (DAY(ddn_adh) >= DAY(CURDATE()) 
	AND MONTH(ddn_adh) = MONTH(CURDATE())) 
	OR (DAY(ddn_adh)<= DAY(CURDATE()) 
	AND MONTH(ddn_adh) = MONTH(CURDATE())+1)");
	
    // Affiche l'entete du tableau avec les resultats 
  ?>     	
<table>		
        <tr>       
		<th>NOM</th>
        <th>PRENOM</th>                   		
		<th>ANNIVERSAIRE</th>
		<th>AGE</th>
		</tr>
</table>
  <?php
	// dans la dernière ligne "echo" je ne vois pas ce que je peux insérer pour afficher l'âge.
    //On affiche les lignes du tableau une à une à l'aide d'une boucle
    while($donnees = mysql_fetch_array($reponce)) {
  ?>
  <table>
        <tr>                   					
        <td><?php echo $donnees['nom_adh'];?></td>
        <td><?php echo $donnees['prenom_adh'];?></td>                    			
		<td><?php echo $donnees['ddn_adh'];?></td>
		<td><?php echo $donnees[''];?></td> 
        </tr>
</table>		
  <?
    }	// Fermeture de la boucle ici, car précédement, la boucle se terminait après la balise style, ce qui ajoutait du style à chaque ligne affichée.
    mysql_close();
  ?>
    
    <style type="text/css">      
	  {
        border-style:double;border-min-wigth 30%: 3px;border-color: yellow;background-color:yellow;
        border-collapse: collapse;
        min-width: 30%;
      }
      th
	  {
        font-family: Arial;
        border-style:double;
        min-width: 30%;
        padding: 5px;
        background-color:yellow;
      }
      td
	  {
        font-family: sans-serif;
        border-style:double;
        min-width: 30%;
        margin:auto
        text-decoration: none;  color: yellow;padding: 5px;text-align: left;background-color: blue;caption font-family: sans-serif;
      }
    </style>	

 

Share this post


Link to post
Share on other sites

Bonjour,

bonne année à tous.

Après plusieurs mois je reviens vers vous.

Toujours sur le calcul des âges. J'ai bien évoluer grâce à vous tous mais j'ai un problème.

Lorsque j'approche de la fin de l'année en cours, le fichier ne me donne plus d'information.

Sur la ligne  : INTERVAL 30 DAY), '%m%d%y'), je suis obligé de diminuer l’intervalle pour arriver à 1

et attendre le début de l'année suivante pour remettre l'intervalle à 30.

Comment puis-je faire pour qu'il n'y ai pas d'interruption au passage du 31 décembre au 1er janvier.

Je vous met en pièce-jointe le fichier php complet.

Merci

anniversaires.php

Share this post


Link to post
Share on other sites

Bonjour,

 

J'ai fusionné ton dernier message avec le post initial... sans cela il aurait été difficile de s'y retrouver.

 

Dan

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...