Utilisateur anonyme
-
Modifié le 8 juin 2018 à 08:47
Utilisateur anonyme -
15 juin 2018 à 05:24
Bonjour,
Je bute sur un problème (probablement tout simple et tout bon mais bon voila je suis une quiche en PHP).
J'aimerai calculer un age en fonction de l'année de naissance et l'intégrer dans un code que j'ai pris sur le net qui défini les anniversaires du mois en cours (c'est a dire qu'une table mysql est faite avec un champ "jour" et un champ "mois" et en fonction de ces données, j'ai une requête qui dit que telles personnes de ma base auront leurs anniversaires ce mois ci - en fait c'était un script que j'avais pris sur le net et que j'avais déjà modifié a ma façon avec des switch case ... le problème c'est que je n'arrive plus a retrouver le script original sur le net)
Bref j'ai créé un champ "annee" dans la table mysql
Au début du code php après le script de connexion à la base , j'ai défini l'année en cours par un
if($mois_en_cours<mois_de_naissance) { $age = $annee_en_cours - $annee_de_naissance - 1 ; //car anniversaire pas encore passé } else { $age = $annee_en_cours - $annee_de_naissance ; // car anniversaire atteint }
Enfin pour afficher ce résultat j'ai mis le $age dans un echo (qui est composé d'un switch case du jour du naissance pour définir si le jour de naissance est ler1er du mois - pour ajouter le "er" au 1, si le jour est égal au jour d'anniversaire de la personne - dans ce cas je lui souhaite un joyeux anniversaire avec l'affichage d'un petit cadeau à coté et dans les autres cas le jour n'est pas encore atteint donc l'affichage est "le [numero du jour] ce sera l'anniversaire de telle personne, il a xx ans - donc le resultat'est année en cours - année de naissance - 1) et mon problème c'est qu'a l'affichage du résultat il affiche 2018 ou 2017 (il ne reconnait pas l'année de naissance de la personne, il ne reconnait que l'année en cours auquel il retranche 1 si le jour de naissance de la personne n'a pas encore été atteint mais s'il affiche 2017 ou 2018 c'est bien qu'il reconnait la variable age et la formule de calcul puisqu'il retranche 1 si le jour de naissance n'est pas atteint).
J'ai essayé en appelant le champ année de ma BDD dans ma requête - le $requete=select(" ....") et la les noms des personnes qui sont nées le mois en cours disparaissent complètement (php saute directement dans cas ou il n y ait pas d'anniversaire pour le mois en cours)
Si quelqu'un peut me dire pourquoi l'année de naissance n'est pas reconnue dans le résultat ce serait cool (et sans cette portion de code que j'ai ajoutée le code fonctionne parfaitement)
jordane45
Messages postés37517Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 2 juin 2023341 8 juin 2018 à 08:52
Bonjour,
Tu parles d'un champ "annee" dans ta bdd .... et ensuite dans ton code tu parles aussi du mois_de_naissance....
Ce champ existe dans ta bdd ??
Il serait bien de nous indiquer :
- La structure exacte de ta table ( nom des champs, type et exemple de contenu )
- Le code complet et non des lignes par ci par là.... histoire de voir comment tu l'as organisé réellement..
Penses aussi à faire des echo / print_r de tes variables pour savoir ce qu'elles contiennent réellement....
Sachant que pour calculer la différence entre deux dates, tu peux utiliser
Oui c'est vrai désolé j'ai omis de préciser ça
La BDD est constituée d'un id (auto-inrémenté), du nom de la personne (varchar), du jour de naissance (int), du mois de naissance (int), du poste (varchar - c est un site sur un club de foot) et donc de l'année de naissance (int) que j'ai ajouté (comme je l'ai précisé, sans l'ajout du script concernant l'année, le code fonctionne nickel)
Voici mon code (j ai volontairement caché les infos de connexion a la base) je le publie comme ça, quand je le mets entre les balises code, ca détruit la mise en page , ça met tout a la suite c est illisible
<?php
$serveur = "adresse de l hote";
$base = "nom de la base";
$user = "nom d utilisateur";
$pass = "mot de passe";
/*
$mysqli est une nouvelle instance de la classe mysqli
prédéfinie dans php et hérite donc de ses propriétés et méthodes
connexion à la base de données
/
$connexion = new mysqli($serveur, $user, $pass, $base);
// si la connexion se fait en UTF-8, sinon ne rien indiquer
$connexion->set_charset("utf8");
/*
utilisation de la méthode connect_error
qui renvoie un message d'erreur si la connexion échoue
/
if ($connexion->connect_error) {
die('Erreur de connexion ('.$connexion->connect_errno.')'. $connexion->connect_error);
}
?>
<?php
$mois_en_cours = date("m");
$date_du_jour = date("d");
$annee_en_cours = date("Y");
switch($mois_en_cours)
{
case '01':
echo'<span class="couleur2arial12grassouligne"><p align="center">Mois de janvier</p></span>';
break;
case '02':
echo'<span class="couleur2arial12grassouligne"><p align="center">Mois de février</p></span>';
break;
case '03':
echo'<span class="couleur2arial12grassouligne"><p align="center">Mois de mars</p></span>';
break;
case '04':
echo'<span class="couleur2arial12grassouligne"><p align="center">Mois d\'avril</p></span>';
break;
case '05':
echo'<span class="couleur2arial12grassouligne"><p align="center">Mois de mai</p></span>';
break;
case '06':
echo'<span class="couleur2arial12grassouligne"><p align="center">Mois de juin</p></span>';
break;
case '07':
echo'<span class="couleur2arial12grassouligne"><p align="center">Mois de juillet</p></span>';
break;
case '08':
echo'<span class="couleur2arial12grassouligne"><p align="center">Mois d\'août</p></span>';
break;
case '09':
echo'<span class="couleur2arial12grassouligne"><p align="center">Mois de septembre</p></span>';
break;
case '10':
echo'<span class="couleur2arial12grassouligne"><p align="center">Mois d\'octobre</p></span>';
break;
case '11':
echo'<span class="couleur2arial12grassouligne"><p align="center">Mois de novembre</p></span>';
break;
case '12':
echo'<span class="couleur2arial12grassouligne"><p align="center">Mois de décembre</p></span>';
break;
default :
echo 'Mois inconnu' ;
break;
}
// ...Requete...
$requete = "SELECT nom, jour_anniv, poste from table_anniversaire WHERE mois_anniv = $mois_en_cours ORDER BY jour_anniv";
$req = mysqli_query($connexion, $requete);
/* Détermine le nombre de lignes du jeu de résultats */
$nombre_lignes = $req->num_rows;
le code complet c est celui que je viens de poster ... (il n y a que le CSS que je n'ai pas mis car il n'est pas utile). Vous ne l'avez sans doutes pas eu car je l'ai édité plusieurs fois car je le mettais entre balises <code> mais ca me fracassait la mise en forme à la validation (d ailleurs message posté a 12h22 et modifié a 12h41 et le votre a été posté a 12h27)
jordane45
Messages postés37517Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 2 juin 2023341
>
Utilisateur anonyme
8 juin 2018 à 13:39
Oui tu as éditée ton message a 12h41 pour le rajouter.
Ok. Je regarde ca après
Utilisateur anonyme
>
jordane45
Messages postés37517Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 2 juin 2023 11 juin 2018 à 13:33
Bonjour,
Pas de possibilité de faire fonctionner ce script en ajoutant un calcul d'age en fonction de l'année ?
Merci
jordane45
Messages postés37517Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 2 juin 2023341 11 juin 2018 à 15:10
Relis bien ton code... il y a quelques incohérences selon moi...
Par exemple :
Dans ta requête tu fais :
WHERE mois_anniv = $mois_en_cours
Donc... le IF dans ton code ne sert à rien
if($mois_en_cours<mois_de_naissance)
Donc la seule info qui serve.. c'est simplement
$age = $annee_en_cours - $annee_de_naissance ; // car anniversaire atteint