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 :

Calculer l'âge en fonction de la date de naissance [MySQL]


Sujet :

PHP & Base de données

  1. #21
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Euh... ce que je t'ai donné, c'est une formule à utiliser DANS une requête !
    Il manque un SELECT !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT Client,
    
    (((EXTRACT(YEAR FROM CURRENT_DATE)) * 365.2422
    + (EXTRACT(MONTH FROM CURRENT_DATE) - 1) * 31.0
    + EXTRACT(DAY FROM CURRENT_DATE))
    -
    ((EXTRACT(YEAR FROM DateDeNaissance)) * 365.2422
    + (EXTRACT(MONTH FROM DateDeNaissance
    ) -1 ) * 31.0
    + (EXTRACT(DAY FROM DateDeNaissance
    ))
    ) / 365.2422 AS Age
    FROM TaTable
    
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #22
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à CinePhil
    Effectivement j'avais oublié le "SELECT".
    Mais cela revient au même c'est à dire que j'ai le même message d'erreur.

    Cordialement!!

  3. #23
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Donne ton code qu'on regarde ça.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #24
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à CinePhil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // Classe Client_DAO
    	public function age($date)
    	{
    		$req=("SELECT *,(((EXTRACT(YEAR FROM CURRENT_DATE)) * 365.2422+ (EXTRACT(MONTH FROM CURRENT_DATE) - 1) * 31.0+ EXTRACT(DAY FROM CURRENT_DATE))-((EXTRACT(YEAR FROM DateDeNaissance)) * 365.2422+ (EXTRACT(MONTH FROM DateDeNaissance) -1 ) * 31.0+ (EXTRACT(DAY FROM DateDeNaissance))) / 365.2422 AS Age FROM client");
    		$res = mysql_query($req);
    		$Age=mysql_fetch_row($res);
    echo round($Age)." ans";			
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    	// Situé dans le controle C_client
     
    	// Instance de la classe 'Client'
    	$DAOClt = new client_DAO();
    	// Chargement des clients
    	$MesClt = $DAOClt->retournerLesclients();
     
    	// Afficher la page "client"
    	require('Admin/Vue/V_client.php');
    ?>
    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
     
    // situé dans la vue V_Client
    <table>
    	<tr>
    		<th>Numéro du client</th>
    		<th>Titre</th>
    		<th>Nom</th>
    		<th>Prenom</th>
    		<th>Date de naissance</th>
    		<th>Age</th>
    		<th>Adresse</th>
    		<th>Code postal</th>
    		<th>Ville</th>
    	</tr>
    	<?php
    	foreach ($MesClt as $clients)
    	{
    		?>
    		<!-- Affichage des données -->
    		<tr>
    			<td><div class="contenu"><?php echo $clients->get_IdClient(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_titre(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_nom(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_prenom(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_DateNaissance()?></div></td>
    			<td><div class="contenu"><?php echo $clients->age($clients->get_DateNaissance())?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_adresse(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_code_postal(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_ville(); ?></div></td>
    		</tr>
    		<?php
    	}
    	?>
    </table>

  5. #25
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Bonjour tout le monde,

    Voila, je réfléchis, j'ai essayé plusieurs chose mais cela fonctionne toujours pas et je comprend pas trop le message d'erreur :
    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\wamp\www\Site_Web\DAO\client_DAO.php on line 155
    0 ans
    Donc je voulais savoir si vous aviez une idée du pourquoi j'obtien l'erreur via le code passé dans le message ci-dessous??

    Merci d'avance!!

  6. #26
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    mysql_fetch_row(): supplied argument is not a valid MySQL result resource
    Ceci signifie qu'il ne reconnait pas l'argument passé à la fonction en tant que résultat MySQL valide.

    As-tu essayé la requête en dur dans MySQL (WAMP) ?
    Passe t-elle sans erreur et retourne t-elle le bon résultat ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #27
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut de nouvelle modificaiton
    Je viens de modifier plusieurs chose donc j'ai décidé de vous renvoyer 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    // Dans la classe d'accés aux données :
    public function retournerUnclient($id)
    	{
    		$req="SELECT * FROM client WHERE IDClient=".$id;
    		$res=mysql_query($req);
     
    		if (mysql_num_rows($res)==1)
    		{
    			$this->set_IdClient(mysql_result($res,0,"IDClient"));
    			$this->set_titre(mysql_result($res,0,"TITRE"));
    			$this->set_nom(mysql_result($res,0,"NOM"));
    			$this->set_prenom(mysql_result($res,0,"PRENOM"));
    			$this->set_DateNaissance(mysql_result($res,0,"DATEDENAISSANCE"));
    			$this->age();
    			$this->set_mail(mysql_result($res,0,"mail"));
    			$this->set_motPasse(mysql_result($res,0,"motPasse"));
    			$this->set_adresse(mysql_result($res,0,"ADRESSE"));
    			$this->set_code_postal(mysql_result($res,0,"CODE_POSTAL"));
    			$this->set_ville(mysql_result($res,0,"VILLE"));
    			return $this; 
    		}
    	}
     
    public function retournerLesclients()
    	{
    		$req="select * from client";
     
    		$res = mysql_query($req);
     
    		$macol= new Collection();
     
    		while($row = mysql_fetch_array($res))
    		{
    			$lecl=new client_DAO;
    			$lecl->retournerUnclient($row["IDClient"]);
    			$macol->add($lecl);
    		}
     
    		return $macol->getAll(); //retourne une collection de catégorie
    	}
     
    public function age()
    	{
    		$req=("SELECT *, (((EXTRACT(YEAR FROM CURRENT_DATE)) * 365.2422+ (EXTRACT(MONTH FROM CURRENT_DATE) - 1) * 31.0+ EXTRACT(DAY FROM CURRENT_DATE))-((EXTRACT(YEAR FROM DateDeNaissance)) * 365.2422+ (EXTRACT(MONTH FROM DateDeNaissance) -1 ) * 31.0+ (EXTRACT(DAY FROM DateDeNaissance))) / 365.2422 AS Age FROM client");
    		$res = mysql_query($req);
    		echo $res;			
    	}
    le controles C_client, n'a pas connu de modification donc je le remet pas.

    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
     
    // Dans la vue V_client
    <table>
    	<tr>
    		<th>Numéro du client</th>
    		<th>Titre</th>
    		<th>Nom</th>
    		<th>Prenom</th>
    		<th>Date de naissance</th>
    		<th>Age</th>
    		<th>Adresse</th>
    		<th>Code postal</th>
    		<th>Ville</th>
    	</tr>
    	<?php
    	foreach ($MesClt as $clients)
    	{
    		?>
    		<!-- Affichage des données -->
    		<tr>
    			<td><div class="contenu"><?php echo $clients->get_IdClient(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_titre(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_nom(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_prenom(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_DateNaissance();?></div></td>
    			<td><div class="contenu"><?php echo $clients->age()?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_adresse(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_code_postal(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_ville(); ?></div></td>
    		</tr>
    		<?php
    	}
    	?>
    </table>
    Lorsque je teste la requête sous MySQL que CinePhil ma passé, voici ce que cela me donne :
    requête SQL: Documentation

    SELECT * , (
    (
    (
    EXTRACT( YEAR
    FROM CURRENT_DATE )
    ) * 365.2422 + ( EXTRACT(
    MONTH FROM CURRENT_DATE ) -1 ) * 31.0 + EXTRACT(
    DAY FROM CURRENT_DATE )
    ) - ( (
    EXTRACT( YEAR
    FROM DateDeNaissance ) ) * 365.2422 + ( EXTRACT(
    MONTH FROM DateDeNaissance ) -1 ) * 31.0 + ( EXTRACT(
    DAY FROM DateDeNaissance ) )
    ) / 365.2422 AS Age
    FROM client
    LIMIT 0 , 30

    MySQL a réponduocumentation
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS Age FROM client
    LIMIT 0, 30' at line 1
    J'utilise WAMP dont MySQL correspond
    Version du client MySQL: 5.0.45
    Maintenant je n'est plus de message d'erreur mais je n'est toujours pas l'age qui s'affiche dans ma page.
    Comment faire pour avoir l'age qui s'affiche dans ma vue V_client?? Je me demande si l'erreur vient pas de la requête??

    Cordialement

  8. #28
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    J'ai re-vérifié la requête et j'ai retiré quelque "(" qui étais en trop et maintenant lorsque je la teste sous MySql fonctionne et m'affiche :
    Age
    560.0274
    8595.3558
    8595.3558
    8595.3558
    8595.3558
    733656.3376
    8595.3558
    8595.3558
    je comprend pas trop les résultats??!!

    Ensuite je les testé pour mon siteWeb et cela m'affiche " 560.0274" pour chaque client.
    La fonction Age() correspond à celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public function age()
    	{
    		$req=("SELECT (EXTRACT(YEAR FROM CURRENT_DATE)) * 365.2422+ (EXTRACT(MONTH FROM CURRENT_DATE) - 1) * 31.0+ (EXTRACT(DAY FROM CURRENT_DATE))-(EXTRACT(YEAR FROM DateDeNaissance)) * 365.2422+ (EXTRACT(MONTH FROM DateDeNaissance) -1 ) * 31.0+ (EXTRACT(DAY FROM DateDeNaissance)) / 365.2422 AS Age FROM client");
    		$res = mysql_query($req);
    		$Age = mysql_fetch_array($res);
    echo $Age[0];			
    	}
    Cordialement!!

  9. #29
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Il y avait une parenthèse fermante mal placée dans la requête. Quand on indente correctement, c'est plus visible :
    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
    SELECT *,
    (
        (
            (
                EXTRACT( YEAR FROM CURRENT_DATE )
            ) * 365.2422 +
            (
                EXTRACT(MONTH FROM CURRENT_DATE ) -1
            ) * 31.0 + EXTRACT(DAY FROM CURRENT_DATE )
        ) -
        (
            (
                EXTRACT( YEAR FROM DateDeNaissance )
            ) * 365.2422 +
            (
                EXTRACT(MONTH FROM DateDeNaissance ) -1
            ) * 31.0 + EXTRACT(DAY FROM DateDeNaissance )
         )
    ) / 365.2422
    AS Age
    FROM client
    LIMIT 0 , 30
    D'ailleurs, pour plus de lisibilité de ton code PHP, je te conseille d'y indenter les requêtes également.

    Formule testée chez moi avec ma date de naissance et malheureusement je n'ai pas rajeuni !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #30
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Bonjour tlm

    je propose cette requête là

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    set @DateDeNaissance='1965-12-28';
    select
    case  
    when month(now()) - month(@DateDeNaissance) < 0 then year(now()) - year(@DateDeNaissance) -1 
    when month(now()) = month(@DateDeNaissance) then 
    if(DAYOFMONTH(now()) - DAYOFMONTH(@DateDeNaissance) < 0,year(now())-year(@DateDeNaissance)-1,year(now())-year(@DateDeNaissance))
    else
    year(now())-year(@DateDeNaissance)
    end as age

  11. #31
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à CinePhil
    J'ai essayé avec ta requête, je t'ai envoyé ci-joint dans document word l'impression de l'écran que j'obtiens pour que tu voye mieu ce que cela me donne.

    Par rappoort à l'impression ecran, j'aimerai que cela m'affiche un nombre pile donc 21, comment puis-je faire??
    Puis je vois pas trop comment je peux faire pour faire en sorte d'avoir 0ans ou rien dans les colonnes ou la date de naissance n'est pas renseigné, comment ferais-tu??(enfin je pense utiliser un si... mais je vois pas trop ou je dois le mettre??)

    Cordialement!!

  12. #32
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à F_L_Stoi
    J'ai essayé ta requête ce qui me donne comme 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
    public function age()
    	{
    		$req=("SET @DateDeNaissance='1965-12-28'
    SELECT
    case  
    when month(now()) - month(@DateDeNaissance) < 0 then year(now()) - year(@DateDeNaissance) -1 
    when month(now()) = month(@DateDeNaissance) then 
    IF(DAYOFMONTH(now()) - DAYOFMONTH(@DateDeNaissance) < 0,year(now())-year(@DateDeNaissance)-1,year(now())-year(@DateDeNaissance))
    else
    year(now())-year(@DateDeNaissance)
    end AS age
    ");
    		$res = mysql_query($req);
    		$Age = mysql_fetch_row($res);
    		echo $Age[0];				
    	}
    mais j'obtien l'erreur suivante :
    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\wamp\www\Site_Web\DAO\client_DAO.php on line 164
    La ligne 164 correspond à la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Age = mysql_fetch_row($res);
    Cordialement!!

  13. #33
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    essaye avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $req="SELECT
    case  
    when month(now()) - month(DateDeNaissance) < 0 then year(now()) - year(DateDeNaissance) -1 
    when month(now()) = month(DateDeNaissance) then 
    IF(DAYOFMONTH(now()) - DAYOFMONTH(DateDeNaissance) < 0,year(now())-year(DateDeNaissance)-1,year(now())-year(DateDeNaissance))
    else
    year(now())-year(DateDeNaissance)
    end AS age
    ";
    où DateDeNaissance est le champs qui correspond a la date de naissance

  14. #34
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à F_L_Stoi
    J'obtient le même message d'erreur!!

    Cordialement!!

  15. #35
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    tu peux me donner le message d erreur renvoyé par mysql stp?


    pour info j ai testé sur un serveur mysql 5 + ca marche

  16. #36
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à F_L_Stoi
    voici la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $req=("SELECT
    case  
    when month(now()) - month(DATEDENAISSANCE) < 0 then year(now()) - year(DATEDENAISSANCE) -1 
    when month(now()) = month(DATEDENAISSANCE) then 
    IF(DAYOFMONTH(now()) - DAYOFMONTH(DATEDENAISSANCE) < 0,year(now())-year(DATEDENAISSANCE)-1,year(now())-year(DATEDENAISSANCE))
    else
    year(now())-year(DATEDENAISSANCE)
    end AS age	
    FROM client");
    Lorsque je test la requête sous MySql, elle me renvoie bien l'age de chaque client.

    Je l'ai ensuite testé sur mon programme mais il me renvoie pour chaque client le premier age. Donc je me demand de plus en plus si je doit faire une boucle permettant d'afficher les différents ages?? Si c'est le cas, je vois pas torp ou et comment la faire.

    Merci d'avance!!

  17. #37
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    ton résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $res=mysql_query($sql);
    ta boucle pour lire les données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while($rows=mysql_fetch_object($res)){
    echo "Age du client : ".$rows->age."\n";
    }

  18. #38
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à F_L_Stoi
    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
    	public function age()
    	{
    		$req=("SELECT
    				case  
    				when month(now()) - month(DATEDENAISSANCE) < 0 then year(now()) - year(DATEDENAISSANCE) -1 
    				when month(now()) = month(DATEDENAISSANCE) then 
    				IF(DAYOFMONTH(now()) - DAYOFMONTH(DATEDENAISSANCE) < 0,year(now())-year(DATEDENAISSANCE)-1,year(now())-year(DATEDENAISSANCE))
    				else
    				year(now())-year(DATEDENAISSANCE)
    				end AS age	
    				FROM client");
     
    			$res = mysql_query($req);
    			while($rows=mysql_fetch_object($res))
    				echo ($rows->age." ans\n");
    }
    Maintenant cela m'affiche les différents ages(donc tout les ages des clients) sur chaque ligne du tableau. C'est à dire que ça "21 ans 2008 ans 19 ans 2008 ans 2008 ans 2008 ans 2008 ans 2008 ans 2008 ans" se répéte pour chaque client.
    Moi j'aurais plutot utilisé un foreach mais je voi pas quoi mettre comme dcondition du foreach.

    Cordialement!!

  19. #39
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    sur chaque ligne du tableau.
    Peux-tu nous montrer le code du tableau ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  20. #40
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à sabotage
    Voici tout les bouts de codes qui me permettent d'obtenir les renseignements de tout les clients dont l'age.

    Tout d'abord le code du controles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    	// Instance de la classe 'Client'
    	$DAOClt = new client_DAO();
    	// Chargement des clients
    	$MesClt = $DAOClt->retournerLesclients();
     
    	// Afficher la page "client"
    	require('Admin/Vue/V_client.php');
     
    ?>
    Ensuite le code de la vue qui me permet d'afficher le tableau correspondant à la liste des clients :
    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
    <table>
    	<tr>
    		<th>Numéro du client</th>
    		<th>Titre</th>
    		<th>Nom</th>
    		<th>Prenom</th>
    		<th>Date de naissance</th>
    		<th>Age</th>
    		<th>Adresse</th>
    		<th>Code postal</th>
    		<th>Ville</th>
    	</tr>
    	<?php
    	foreach ($MesClt as $clients)
    	{
    		?>
    		<!-- Affichage des données -->
    		<tr>
    			<td><div class="contenu"><?php echo $clients->get_IdClient(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_titre(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_nom(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_prenom(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_DateNaissance();?></div></td>
    			<td><div class="contenu"><?php echo $clients->age()?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_adresse(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_code_postal(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_ville(); ?></div></td>
    		</tr>
    		<?php
    	}
    	?>
    </table>
    Pour finir, voici le code de la fonciton "get_age()" qui permet d'obtenir l'age du client (ce code se situe dans la classe 'accées aux données' des clients :
    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
    class client_DAO extends client // 'client_DAO' hérite de 'client'
    {
     
    	// Constructeur
    	public function client_DAO( $titre=null, $nom=null, $prenom=null, $DateNaiss=null, $ad=null, $mail=null, $motPasse=null, $cp=null, $vil=null)
    	{
    		parent::client( $titre,$nom,$prenom,$dateNaissance, $ad,$mail,$motPasse,$cp,$vil);
    	}
    ...................
    public function age()
    	{
    		$req=("SELECT
    				case  
    				when month(now()) - month(DATEDENAISSANCE) < 0 then year(now()) - year(DATEDENAISSANCE) -1 
    				when month(now()) = month(DATEDENAISSANCE) then 
    				IF(DAYOFMONTH(now()) - DAYOFMONTH(DATEDENAISSANCE) < 0,year(now())-year(DATEDENAISSANCE)-1,year(now())-year(DATEDENAISSANCE))
    				else
    				year(now())-year(DATEDENAISSANCE)
    				end AS age	
    				FROM client");
     
    			$res = mysql_query($req);
    			while($rows=mysql_fetch_object($res))
    				echo ($rows->age." ans\n");
    }
    }
    ?>
    Jespère qu'avec cela vous pourriez m'aider??

    Cordialement!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [WD10] Calcul de l'âge à partir de la date de naissance
    Par miezaka dans le forum WinDev
    Réponses: 2
    Dernier message: 06/03/2014, 16h34
  2. Requête tranche d'âge en fonction de la date de naissance
    Par Devilju69 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/01/2014, 13h16
  3. Réponses: 4
    Dernier message: 14/11/2007, 11h07
  4. Fonction de calcul du nb de jour entre 2 dates
    Par Teugos dans le forum SAP
    Réponses: 3
    Dernier message: 20/09/2007, 18h12

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