IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Calcule de l'age


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 11
    Par défaut Calcule de l'age
    Slt,

    Code HTML/PHP pour calculer l'age d'une personne en fonction de la date renseignée.

    Ce que je vais essayer :

    1) De faire en sorte que le jour/mois/année sélectionner reste visible une fois le formulaire validé.

    2) Modifier le code pour qu'il interroge une bdd, pour récupérer jour/mois/année d'une personne.

    Ps : Pourquoi faire simple quand on peut faire compliquer.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
    <html lang="fr">
    <head>
    </head>
    <body>
     
    <form name="thedate" action='calcul.php' method='POST'>
    <tr><td><b>Date de naissance : </b></td>
     
    <td>Jour : <SELECT name="day"><OPTION value="-01">Jour<OPTION value="01">1<OPTION value="02">2<OPTION value="03">3<OPTION value="04">4<OPTION value="05">5<OPTION value="06">6<OPTION value="07">7<OPTION value="08">8<OPTION value="09">9<OPTION value="10">10<OPTION value="11">11<OPTION value="12">12<OPTION value="13">13<OPTION value="14">14<OPTION value="15">15<OPTION value="16">16<OPTION value="17">17<OPTION value="18">18<OPTION value="19">19<OPTION value="20">20<OPTION value="21">21<OPTION value="22">22<OPTION value="23">23<OPTION value="24">24<OPTION value="25">25<OPTION value="26">26<OPTION value="27">27<OPTION value="28">28<OPTION value="29">29<OPTION value="30">30<OPTION value="31">31
    </SELECT>
    </td>
     
    <td>Mois : <SELECT name="month">
    <OPTION value="-01">Mois
    <OPTION value="00" >Janvier
    <OPTION value="01" >Février
    <OPTION value="02" >Mars
    <OPTION value="03" >Avril
    <OPTION value="04" >Mai
    <OPTION value="05" >Juin
    <OPTION value="06" >Juillet
    <OPTION value="07" >Août
    <OPTION value="08" >Septembre
    <OPTION value="09" >Octobre
    <OPTION value="10" >Novembre
    <OPTION value="11" >Décembre
    </SELECT></td>
     
    <!-- <td>Année : <input type=text name=year value="Année" onClick="this.value='';" style="width:50px" maxlength=4></td> -->
    <td>Année : 
        <?php
        echo '<select name="year">';
        for($i=1940; $i<=3000; $i++)
          echo'<option value="'.$i.'">'.$i.'</option>';
        echo '</select>';
        ?>
    </td>
    </tr>
    <br>
    <tr>
    <td height="17">
    <input type="submit" name="Submit" value="Envoyer">
    </td>
    </tr>
    </form>
     
    <?php
    if (isset($_POST["Submit"])) {
    	// Si le "formulaire" à été "Envoyer" le code php s'execute.
    }
    else 
    {
    	// Si le "formulaire" n'a pas été "Envoyer" le code php ne s'execute pas.
    	exit;
    }
     
    function calculer_age(){ // le format de $naissance est jj/mm/aaaa
     
    $naissance = $_POST['day'].'/'.$_POST['month'].'/'.$_POST['year'];
     
    $age_p = date('Y') - substr($naissance,6); // ex substr('30/10/2011',6) = 2011
    $mois = substr($naissance, 3, 2); //ex : substr('30/10/2011', 3, 2) = 10
    $jour = substr($naissance, 0, 2); //ex : substr('30/10/2011', 0, 2) = 30
     
    if(date('m') < $mois){
            $age = $age_p-1;
    }
     
    if(date('m') > $mois){
            $age = $age_p;
    }
     
    if(date('m') == $mois AND date('d') < $jour){
            $age = $age_p-1;
    }
     
    if(date('m') == $mois AND date('d') > $jour){
            $age = $age_p;
    }
     
    if(date('m') == $mois AND date('d') == $jour){
            $age = $age_p;
    }
     
    return $age;
    }
     
    echo 'Il / Elle a ';
    echo calculer_age();
    echo ' ans au ';
    ?>
     
    <?php
    $temps = time();
     
    // JOURS
    $jours = array('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi');
    $jours_numero = date('w', $temps);
    $jours_complet = $jours[$jours_numero];
    // Numero du jour
    $NumeroDuJour = date('d', $temps);
     
     
    // MOIS
    $mois = array('', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
    $mois_numero = date("m", $temps);
    $mois_complet = $mois[$mois_numero];
     
    // ANNEE
    $annee = date("Y", $temps);
     
    // Affichage DATE
    echo "$jours_complet $NumeroDuJour $mois_complet $annee";
    ?>
     
    </body>
    </html>
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Salut

    Quelle est ta question ?

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 11
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Salut

    Quelle est ta question ?
    Slt,

    En gros, si il y a des fautes énormes dans mon code.

    ça fonctionne, mais es ce que ça le fait bien ?

    Merci

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 11
    Par défaut
    Trouver !

    Code HTML/PHP qui se connecte à ma base (WAMP > PHPMYADMIN)
    (Ma base : agenda > Table : calendrier > Champs : `id`, 'civilite', `Nom`, `Prenom`, `jour`, `mois_chiffre`, `mois`, `annee`, `evenement`)

    1) Puis affiche sa date d'anniversaire puis son age, avec filtre au niveau de la civilité pour afficher dans la réponse 'Elle' ou 'Il'.

    2) Le nom de la personne sélectionner reste bien.





    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
     
    <html>
    <body>
    <?php
    // on se connecte à MySQL
    $db = mysql_connect('127.0.0.1', 'xxx', 'xxx');
     
    // on sélectionne la base
    mysql_select_db('agenda',$db);
    ?>
     
    <form name='form' id='form' action='anniversaire.php' method='GET' >
    <select name="personne" id="personne" onChange="submit()" >
    <option value="">selectionner une personne</option>
     
    <?php
    // on crée la requête SQL
    $sql = "SELECT * FROM calendrier WHERE evenement='Anniversaire' ORDER BY Prenom ASC, Nom ASC";
     
    // on envoie la requête
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    // on fait une boucle qui va faire un tour pour chaque enregistrement
    while($data = mysql_fetch_assoc($req))
        {
        // on affiche les informations de l'enregistrement en cours
        echo '<option value="'.$data['id'].'" ';
    	if(isset($_GET['personne']) && $_GET['personne'] == $data['id']) { 
    		echo 'selected'; 
    	}
    	echo '>';
    	echo $data['Prenom'].' '.$data['Nom'].'</option>';
        }
    ?>
    </select>
    </form>
    <?php	
    if(isset($_GET['personne'])) { 
    	$sql = "SELECT * FROM calendrier WHERE evenement='Anniversaire' AND id=".$_GET['personne']." ";
    	$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    	$data = mysql_fetch_assoc($req);
    	echo "<br/>Sa date d'anniversaire est le ".$data['jour']."/".$data['mois']."/".$data['annee'];
    }
     
    function calculer_age(){ // le format de $naissance est jj/mm/aaaa
     
    $sql = "SELECT * FROM calendrier WHERE evenement='Anniversaire' AND id=".$_GET['personne']." ";
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    $data = mysql_fetch_assoc($req);
     
    $age_p = date('Y') - $data['annee'];
     
    if(date('m') < $data['mois']){
            $age = $age_p-1;
    }
     
    if(date('m') > $data['mois']){
            $age = $age_p;
    }
     
    if(date('m') == $data['mois'] AND date('d') < $data['jour']){
            $age = $age_p-1;
    }
     
    if(date('m') == $data['mois'] AND date('d') > $data['jour']){
            $age = $age_p;
    }
     
    if(date('m') == $data['mois'] AND date('d') == $data['jour']){
            $age = $age_p;
    }
     
    return $age;
    }
    ?>
    <br>
    <?php
     
    if(isset($_GET['personne'])) { 
    $sql = "SELECT * FROM calendrier WHERE evenement='Anniversaire' AND id=".$_GET['personne']." ";
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    $data = mysql_fetch_assoc($req);
    }
     
    if ($data['civilite'] == "Mr") {
     
    echo 'Il a ';
    echo calculer_age();
    echo ' ans au ';
    }
     
    if ($data['civilite'] == "Mme" ||$data['civilite'] == "Melle") {
     
    echo 'Elle a ';
    echo calculer_age();
    echo ' ans au ';
    }
    ?>
     
    <?php
    $temps = time();
     
    // JOURS
    $jours = array('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi');
    $jours_numero = date('w', $temps);
    $jours_complet = $jours[$jours_numero];
    // Numero du jour
    $NumeroDuJour = date('d', $temps);
     
     
    // MOIS
    $mois = array('', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
    $mois_numero = date("m", $temps);
    $mois_complet = $mois[$mois_numero];
     
    // ANNEE
    $annee = date("Y", $temps);
     
    // Affichage DATE
    echo "$jours_complet $NumeroDuJour $mois_complet $annee";
    ?>
     
    <?php
    // on ferme la connexion à mysql
    mysql_close();
    ?>
    </body>
    </html>
    Images attachées Images attachées  

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Pour calculer l'âge, il est largement préférable d'éviter la batterie de cuisine et de faire simplement en utilisant les fonctions natives de PHP, idem pour le formatage littéral : il faut utiliser ICU :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
     
    function age(DateTime $from)
    {
        $today = new DateTime();
        $diff  = $today->diff($from);
        return array('y' => $diff->y, 'm' => $diff->m, 'd' => $diff->d, 'days' => $diff->days);
    }
     
    $date = DateTime::createFromFormat('d/m/Y', '01/01/1990');
    $age  = age($date);
     
    echo "Né le {$date->format('d/m/Y')}, age : {$age['y']} année(s), {$age['m']} mois et {$age['d']} jour(s), soit {$age['days']} jours";
    echo '<br />';
    echo \IntlDateFormatter::create('fr_FR', \IntlDateFormatter::FULL, \IntlDateFormatter::NONE)->format($date);
     
    ?>

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 11
    Par défaut
    Salut.

    Merci rawsrc.

    Ah oui ! en effet ! Ma cuisine est sacrement en b....

    Plus clair et plus simple tout en faisant mieux !

    Ex : pour cette date : '04/11/1952', ça affiche :
    Né le 04/11/1952, age : 59 année(s), 11 mois et 29 jour(s), soit 21914 jours

    Juste pour le formatage (ICU), j'ai un message d'erreur :
    Class 'IntlDateFormatter' not found.
    Donc j'ai "//" la ligne : echo IntlDateFormatter::create('fr_FR' ,IntlDateFormatter::FULL ,IntlDateFormatter::NONE)->format($date); -
    Et le résultat est le même.

    Version PHP : 5.3.13
    Version Apache : 2.2.22

Discussions similaires

  1. calcul de l'age dans un formulaire
    Par spacergirly dans le forum Access
    Réponses: 2
    Dernier message: 13/06/2007, 15h09
  2. Probleme avec une fonction de calcul d'un age
    Par dondano dans le forum Langage
    Réponses: 1
    Dernier message: 27/04/2007, 11h50
  3. calcul de l'age
    Par Poor_Beginner dans le forum Access
    Réponses: 3
    Dernier message: 20/02/2007, 11h50
  4. Calcul de l'age d'une personne
    Par batstoon dans le forum Oracle
    Réponses: 2
    Dernier message: 04/12/2006, 13h50
  5. calcul d'un age mysql
    Par kitty2006 dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/08/2006, 10h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo