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

PHP & Base de données Discussion :

Sql-Php / Requete/ Afficher l'age (aide nécessaire please) [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 15
    Points : 6
    Points
    6
    Par défaut Sql-Php / Requete/ Afficher l'age (aide nécessaire please)
    Slt à tous,
    Voici mon problème,:
    J'ai une table demandeur dans laquelle il ya un champ qui renseigne sur la date de naissance..
    Je dispose d'une fonction php qui permet de calculer l'age actuelle d'une personne à partir de sa date de naissance, dont voici le code :
    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
    <?php 
    //à partir de la date de naissance, retourne l'âge dans la variable $age 
     
    // date de naissance (partie à modifier) 
    $ddn = "10/05/1983"; 
     
    // enregistrement de la date du jour 
    $DATEDUJOUR = date("Y-m-d"); 
    $DATEFRAN = date("d/m/Y"); 
     
    // calcul de mon age d'après la date de naissance $ddn 
    $annais = substr("$ddn", 6, 4); 
    $anjour = substr("$DATEFRAN", 6, 4); 
    $moisnais = substr("$ddn", 3, 2); 
    $moisjour = substr("$DATEFRAN", 3, 2); 
    $journais = substr("$ddn", 0, 2); 
    $jourjour = substr("$DATEFRAN", 0, 2); 
     
    $age = $anjour-$annais; 
     
    if ($moisjour<$moisnais){
    $age=$age-1;
    } 
     
    if ($jourjour<$journais && $moisjour==$moisnais){
    $age=$age-1;
    } 
    echo "$age";
     
     
    // Changer la variable $ddn , par votre date de naissance.
    ?>


    Ce que je veux, c'est, comment à partir d'une requete sélection sql, afficher l'age de la personne et non sa date de naissance

    J'ai écrit :
    SELECT a.NumDem, a.NomDem, a.DateNaissDem, b.LibellePoste
    FROM demandeur a, poste b, demande c
    WHERE a.NumDem = c.NumDem
    AND c.CodePoste = b.CodePoste;



    Evidemment, ça m'affiche la date de naissance de la personne, mais moi j'veux afficher directement son age qui est calculé par ma fonction php. Comment écrire la requête?

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $sql = "SELECT a.NumDem, a.NomDem, a.DateNaissDem AS date_naissance, b.LibellePoste
    FROM demandeur a, poste b, demande c
    WHERE a.NumDem = c.NumDem
    AND c.CodePoste = b.CodePoste;";
    $req = mysql_query($sql);
    $data = mysql_fetch_assoc($req);
    $ddn = $data['date_naissance'];
    Je te laisse le soin de faire les controles d'erreur qui vont bien

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par Mr N.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $sql = "SELECT a.NumDem, a.NomDem, a.DateNaissDem AS date_naissance, b.LibellePoste
    FROM demandeur a, poste b, demande c
    WHERE a.NumDem = c.NumDem
    AND c.CodePoste = b.CodePoste;";
    $req = mysql_query($sql);
    $data = mysql_fetch_assoc($req);
    $ddn = $data['date_naissance'];
    Je te laisse le soin de faire les controles d'erreur qui vont bien
    Je ne crois pas que ce soit la demande. Il faudrait que la requête renvoie l'âge et non pas la date de naissance. Tu dois donc dans ton select effectuer un calcul sur la date de naissance, notamment (je pense) en utilisant la fonction sql NOW().

  4. #4
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Ben je me base sur :
    // date de naissance (partie à modifier)
    $ddn = "10/05/1983";

    Sinon c'est une mauvaise chose de faire des calculs de dates sous mysql (ca plombe les performances et c'est pas fais pour ça...

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Finalement, tu me conseille quoi ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    A la place de ça :
    // date de naissance (partie à modifier)
    $ddn = "10/05/1983";
    tu places ta requète pour en extraire, ainsi que le reste de tes infos éventuellement, ta date de naissance et aprés, $ddn pourat te donner l'age comme te propose Mr N.

  7. #7
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par Odilon
    Finalement, tu me conseille quoi ?
    As qui tu parles ? Tu as essayé ce que j'ai proposé ?

  8. #8
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    oops sorry j'avais pas vu que tu as édité ton msg

  9. #9
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Je crois qu'on se comprend pas..bon je me fais plus clair :
    Je veux pouvoir afficher par une requete selection le nom, prenom, et age des demandeurs d'emploi enregistrés dans ma base de donnée, sous forme de tableau (genre <table></table> en html..bon là n'est pas le pb)..Mais avec la rekète ke j'ai ecrit plus haut, je n'arrive qu'à afficher leur date de naissance, et j'aimerais pouvoir "coupler" ma fonction php qui calcule les ages avec ma rekète sql pour n'afficher que l'age et non la date de naissance

    Anyway, qqn me disait qu'une requête ne peux pas exécuter de fonction PHP dedans... Mais que je peux exécuter la fonction grâce au résultat de la requête...
    Alors là, moi j'veux bien savoir comment faire ça

  10. #10
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Et bien tu fais un merge de ma proposition et de ton code :
    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
    <?php
    //à partir de la date de naissance, retourne l'âge dans la variable $age
     
    $sql = "SELECT a.NumDem, a.NomDem, a.DateNaissDem AS date_naissance, b.LibellePoste
    FROM demandeur a, poste b, demande c
    WHERE a.NumDem = c.NumDem
    AND c.CodePoste = b.CodePoste;";
    $req = mysql_query($sql);
    $data = mysql_fetch_assoc($req);
    $ddn = $data['date_naissance'];
     
    // enregistrement de la date du jour
    $DATEDUJOUR = date("Y-m-d");
    $DATEFRAN = date("d/m/Y");
     
    // calcul de mon age d'après la date de naissance $ddn
    $annais = substr("$ddn", 6, 4);
    $anjour = substr("$DATEFRAN", 6, 4);
    $moisnais = substr("$ddn", 3, 2);
    $moisjour = substr("$DATEFRAN", 3, 2);
    $journais = substr("$ddn", 0, 2);
    $jourjour = substr("$DATEFRAN", 0, 2);
     
    $age = $anjour-$annais;
     
    if ($moisjour<$moisnais){
    $age=$age-1;
    }
     
    if ($jourjour<$journais && $moisjour==$moisnais){
    $age=$age-1;
    }
    echo "$age";
     
     
    // Changer la variable $ddn , par votre date de naissance.
    ?>
    Je te laisse gérer les problèmes de connexions et d'erreurs

  11. #11
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    Il suffit de faire un mix de ton code et de celui proposé par Mr. N. :
    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
    <?
    $sql = "SELECT a.NumDem, a.NomDem, DATE_FORMAT(a.DateNaissDem, '%d/%m/%Y') AS date_naissance, b.LibellePoste 
    FROM demandeur a, poste b, demande c 
    WHERE a.NumDem = c.NumDem 
    AND c.CodePoste = b.CodePoste;"; 
    $req = mysql_query($sql); 
    $data = mysql_fetch_assoc($req); 
    $ddn = $data['date_naissance']; 
     
    // enregistrement de la date du jour 
    $DATEDUJOUR = date("Y-m-d"); 
    $DATEFRAN = date("d/m/Y"); 
     
    // calcul de mon age d'après la date de naissance $ddn 
    $annais = substr("$ddn", 6, 4); 
    $anjour = substr("$DATEFRAN", 6, 4); 
    $moisnais = substr("$ddn", 3, 2); 
    $moisjour = substr("$DATEFRAN", 3, 2); 
    $journais = substr("$ddn", 0, 2); 
    $jourjour = substr("$DATEFRAN", 0, 2); 
     
    $age = $anjour-$annais; 
     
    if ($moisjour<$moisnais){ 
    $age=$age-1; 
    } 
     
    if ($jourjour<$journais && $moisjour==$moisnais){ 
    $age=$age-1; 
    } 
    echo "$age"; 
     
     
    // Changer la variable $ddn , par votre date de naissance. 
    ?>
    [edit]erf, grillée
    mais j'ai ajouté le DATE_FORMAT

  12. #12
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par - Manuella Leray -
    Il suffit de faire un mix de ton code et de celui proposé par Mr. N. :
    Prem's

  13. #13
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    Citation Envoyé par Mr N.
    Sinon c'est une mauvaise chose de faire des calculs de dates sous mysql (ca plombe les performances et c'est pas fais pour ça...
    A priori, j'aurais tendance à ne pas être d'accord là dessus. Enfin si, mais pas pour cette raison.
    Je déconseillerais éventuellement le calcul de date sous mysql dans le cas ou on souhaite un jour porter son application sur un autre SGBD. Dans ce cas, il vaut mieux ne pas utiliser les spécificités mysql pour faciliter le portage.

    Par contre, si on parle simplement perf, mysql qui est un binaire compilé, ira certainement plus vite pour toute opérations que php.

  14. #14
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Voilà mon code au complet :

    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
     
    <html>
    <head>
    <title>Liste Des Demandeurs sans critère particulier</title>
    </head>
    <body bgcolor=gray>
    <center>~~ <b>Liste Des Demandeurs D'emploi</b> ~~<br><br>
    <table width="880" border=3 bordercolor=#9999CC>
    <tr bgcolor="white">
    <td width="40"><u><b>N°</b></u></td>
    <td width="180"><u><b>NOMS</b></u></td>
    <td width="150"><u><b>PRENOMS</u></b></td>
    <td width="140"><u><b>ADRESSE</u></b></td>
    <td width="150"><u><b>POSTE SOLLICITE</u></b></td>
    <td width="50"><u><b>AGE</u></b></td>
     
    </tr>
    <?php
     
    //Connection à la base de données gestdemand
    $serveur="xxxxxxx";
    $login="xxxxx";
    $pass="xxxxx";
    $bdd="gestdemand";
     
    //Connection à MySQL
    mysql_connect($serveur,$login,$pass) or die(mysql_error()); 
     
    //Sélectionne la base de donnée gestdemand
    mysql_selectdb($bdd) or die(mysql_error());
     
    //Requête sélection
    $sql = "SELECT a.NumDem, a.NomDem, a.PrenomDem, a.AdresseDem, b.LibellePoste, a.DateNaissDem AS date_naissance
    FROM demandeur a,  poste b, demande c
    WHERE a.NumDem = c.NumDem
      AND c.CodePoste = b.CodePoste;";
    $req = mysql_query($sql);
    $data = mysql_fetch_assoc($req);
    $ddn = $data['date_naissance']; 
    // enregistrement de la date du jour
    $DATEDUJOUR = date("Y-m-d");
    $DATEFRAN = date("d/m/Y");
     
    // calcul de mon age d'après la date de naissance $ddn
    $annais = substr("$ddn", 6, 4);
    $anjour = substr("$DATEFRAN", 6, 4);
    $moisnais = substr("$ddn", 3, 2);
    $moisjour = substr("$DATEFRAN", 3, 2);
    $journais = substr("$ddn", 0, 2);
    $jourjour = substr("$DATEFRAN", 0, 2);
     
    $age = $anjour-$annais;
     
    if ($moisjour<$moisnais){
    $age=$age-1;
    }
     
    if ($jourjour<$journais && $moisjour==$moisnais){
    $age=$age-1;
    }
    echo "$age";
     
     
    $Total = mysql_numrows($sql);
    mysql_close();
     
    for ($Compteur = 0 ; $Compteur < $Total ; $Compteur ++)
          {
     
          echo "<TR>";
            echo "<TD>";
              echo mysql_result($sql , $Compteur , "NumDem");
              echo "</TD>";
              echo "<TD>";
              echo mysql_result($sql , $Compteur , "NomDem");
            echo "</TD>";
            echo "<TD>";
              echo mysql_result($sql , $Compteur , "PrenomDem");
              echo "</TD>";
             echo "<TD>";
              echo mysql_result($sql , $Compteur , "AdresseDem");
            echo "</TD>";
            echo "<TD>";
              echo mysql_result($sql , $Compteur , "LibellePoste");
            echo "</TD>";
            echo "<TD>";
              echo mysql_result($sql , $Compteur , "DateNaissDem");
            echo "</TD>";
            echo "</TR>";
          }  
     
    ?>
    </center>
    </table>
    </body>
     </html>
    Mais à l'exécution, j'obtiens l'erreur suivante : 2003
    Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\newgestdemand\voirliste2.php on line 63

    Là j'sais plus quoi modifier pffffttt énervant

  15. #15
    Membre émérite
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Points : 2 791
    Points
    2 791
    Par défaut
    +1 avec hugo 123
    moi je sais que je vais rester sur mysql et donc j'aurai fait l'operation dans ls BD. du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query ="select ..........(unix_timestamp(date_aujourdhui) - unix_timestamp(date de naissance)) as age ......
    puis apres tu calcule le nombre de jour que te retourne ton unix_timestamp

  16. #16
    Membre habitué
    Inscrit en
    Août 2005
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 142
    Points : 156
    Points
    156
    Par défaut
    oué pourquoi tu te complique avec une fonction php alors que tu peut calculer sa directement dans ta requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (YEAR(CURRENT_DATE)-YEAR(naissance)) - (RIGHT(CURRENT_DATE,5)<RIGHT(naissance,5))

  17. #17
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Comment doit alors se présenter la rekète ?

  18. #18
    Membre habitué
    Inscrit en
    Août 2005
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 142
    Points : 156
    Points
    156
    Par défaut
    Nous nous éloignons de Php...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT a.NumDem, a.NomDem, 
    (YEAR(CURRENT_DATE)-YEAR(a.DateNaissDem)) - (RIGHT(CURRENT_DATE,5)<RIGHT(a.DateNaissDem,5)) 
     AS date_naissance, b.LibellePoste
    FROM demandeur a, poste b, demande c
    WHERE a.NumDem = c.NumDem
    AND c.CodePoste = b.CodePoste;

  19. #19
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    une autre façon de calculer l'âge...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // calcul de mon age d'après la date de naissance $ddn
    list($annee, $mois, $jour) = split('[-.]', $ddn);
    $courant['mois'] = date('n');
    $courant['jour'] = date('j');
    $courant['annee'] = date('Y');
    $annees = $courant['annee'] - $annee;
    if ($courant['mois'] <= $mois) {
       if ($mois == $courant['mois']) {
          if ($jour > $courant['jour']) $annees--;
          else $annees--;
       }
    }
    echo $annees;
    ;-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [REQUETE]Afficher un champ "case à cocher" dans une requête SQL-Access
    Par Amael ROCHE dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 03/04/2007, 11h07
  2. [SQL] Recupération Requete SQL dans un tableau dynamique PHP
    Par victor.jbju dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 13/09/2006, 16h48
  3. [SQL Server] Requete qui affiche les doublons
    Par Vesta dans le forum Langage SQL
    Réponses: 11
    Dernier message: 26/05/2006, 13h42
  4. [MySQL] Requete SQL PHP
    Par CaptainChoc dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 22/10/2005, 16h13
  5. [SQL+php] requete a trouver
    Par theclear dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/10/2004, 09h50

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