Aller au contenu
bernard.hericher

trouver l'age en php

Noter ce sujet :

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

Partager ce message


Lien à poster
Partager sur d’autres 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

  • J'aime 1

Partager ce message


Lien à poster
Partager sur d’autres 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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres 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.

Partager ce message


Lien à poster
Partager sur d’autres 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 ?

Partager ce message


Lien à poster
Partager sur d’autres 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>

 

Partager ce message


Lien à poster
Partager sur d’autres 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 !

  • J'aime 1

Partager ce message


Lien à poster
Partager sur d’autres 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.

Partager ce message


Lien à poster
Partager sur d’autres 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

Partager ce message


Lien à poster
Partager sur d’autres 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 ;)

Partager ce message


Lien à poster
Partager sur d’autres 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>	

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×