bernard.hericher Posté 2 Octobre 2017 Posté 2 Octobre 2017 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> <?
Message populaire. Aenoa Posté 2 Octobre 2017 Message populaire. Posté 2 Octobre 2017 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: 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 1
bernard.hericher Posté 2 Octobre 2017 Auteur Posté 2 Octobre 2017 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
Aenoa Posté 2 Octobre 2017 Posté 2 Octobre 2017 pouvez-vous fournir le code complet? Cela sera plus facile pour vous aider
bernard.hericher Posté 2 Octobre 2017 Auteur Posté 2 Octobre 2017 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.
Aenoa Posté 2 Octobre 2017 Posté 2 Octobre 2017 Dans ce code, mon code n'est pas présent; Êtes-vous sûr qu'il s'agit du bon fichier test_anniversaire.php ?
bernard.hericher Posté 2 Octobre 2017 Auteur Posté 2 Octobre 2017 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>
Message populaire. Aenoa Posté 2 Octobre 2017 Message populaire. Posté 2 Octobre 2017 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 ! 1
bernard.hericher Posté 2 Octobre 2017 Auteur Posté 2 Octobre 2017 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.
bernard.hericher Posté 9 Octobre 2017 Auteur Posté 9 Octobre 2017 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>
Aenoa Posté 9 Octobre 2017 Posté 9 Octobre 2017 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
bernard.hericher Posté 9 Octobre 2017 Auteur Posté 9 Octobre 2017 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>
bernard.hericher Posté 12 Janvier 2019 Auteur Posté 12 Janvier 2019 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
Dan Posté 12 Janvier 2019 Posté 12 Janvier 2019 Bonjour, J'ai fusionné ton dernier message avec le post initial... sans cela il aurait été difficile de s'y retrouver. Dan
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant