Tableau php avc calcul d'age Pti prb Svp!?

magma -  
 jboi -
Bonjour,

j'ai crée une base de données depuis la quelle je souhaite récupéré des données sur mes membre dans la table apellée "membre"
je récupère la date de naissance pour chaque femme dans un premier temps, je calcul son age par le biais d'une fonction getAge();
et ensuite je calcul l'age moyen des femmes membre du site

mon probleme est qu'apparament cela ne marche que s'il y a une seule femme enregistré dans la base de données. S'il y en a plus d'une (j'ai fait le test) je recois les messages d'erreur suivant
Notice: Undefined offset: 1 in c:\program files\easyphp1-8\www\des sites\magma\testage.php on line 40

cette ligne correspond a la lignejuste apres ma boucle while ou j'insère dans la variable $annee l'année de la date de naissance
quelqu'un peut il m'aider SVP ?

<?php
session_start();
header("Cache-control:private");
include_once("mysql.php"); include("function.php");

function getAge ($y, $m, $d) {
    return date('Y') - $y - (date('n') < (ltrim($m,'0') + (date('j') < ltrim($d,'0'))));
}


	$connect= connection(); // connection a la bd
	
	$sql = "SELECT count(*)
			FROM membre where sexe='F'";
	
	$req=requete ($sql,$connect);
	
	$nbfemme= mysql_fetch_array($req);
 	$f=$nbfemme[0];
	echo "nb femme inscrite=".$f."<br />";
	
		
	$req="select datenaiss from membre where sexe='F'";
	$ree=requete ($req,$connect);
	   
$i=0;
// on fait une boucle qui va faire un tour pour chaque enregistrement
while($daten = mysql_fetch_array($ree)) {

$annee=substr($daten[$i],0,4);
$mois=substr($daten[$i],-5,2);
$jour=substr($daten[$i],-2);
$age[$i]=getAge($annee,$mois,$jour);
$i++;
}


$agee=0;
for ($j=0;$j<$f;$j++){

$agee=$agee+$age[$j];
}
$agemoy=$agee/$f;
echo "agemoyen femme=".$agemoy."<br />";
Configuration: Windows XP
Firefox 2.0.0.11

11 réponses

  1. Alex
     
    Bonjour,

    Test avec mysql_fetch_assoc !

    Cordialement
    0
  2. magma
     
    Merci Alex pour ta réponse mais je l'ai déja testé et ca me fait la meme chose!
    Notice: Undefined offset: 0

    Penses tu a autre chose? parce que je ne pense pas avoir fait d'erreur en soit dans mon code non ?
    0
  3. Alex
     
    Ha, je crois que j'ai trouvé, regarde bien ton code, tu n'est pas synchronisé, car ton $i commence a la valeur 0, alors que ton $j lui va commencer par la valeur 1.

    $i=0;
    // on fait une boucle qui va faire un tour pour chaque enregistrement
    while($daten = mysql_fetch_array($ree)) {
    
    $annee=substr($daten[$i],0,4);
    $mois=substr($daten[$i],-5,2);
    $jour=substr($daten[$i],-2);
    $age[$i]=getAge($annee,$mois,$jour);
    $i++; (a placer en début de boucle vu que tu incrémente ton for dés la première entrée)
    }
    
    
    $agee=0;
    for ($j=0;$j<$f;$j++){
    
    $agee=$agee+$age[$j];
    }
    0
  4. magma
     
    malheuresement ca ne change rien j'ai toujour ce message notice undefined offset: 1 a chaque ligne ou je récupere l'année, le mois ou le jour...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Alex
     
    Hum, le souci doit donc bien povenir de ta requête, vérifie le type de tes champs, qu'il soient bien en number et tente avec array et assoc, assure toi aussi du bon déroulement de ton code à l'aide d'echo successifs, cela te permettra de mieux cibler ton problème, là je ne vois pas !

    Bonne chance à toi !
    0
  7. magma
     
    Merci quand meme, mais je suis bien sur que les champs et ma requête sont bonnes! j'ai fait des tests avec les echo successifs aussi et je me rend compte que des que la deuxieme valeur entrée dans le tableau $age[] est eronnée... au lieu d'etre a 18, elle est a 2008, la suivante aussi (j'ai inséré 3 femme dans ma Bd) la premiere est juste elle est a 28.
    leprobleme viendrait il de ma fonction get Age() ?
    0
    1. jboi
       
      Je pense que tu as oublié les $requete et/ou les $connexion. Sans ces deux paramètres, tu ne peux pas faire marché ton programme.
      0
  8. Alex
     
    Si les valeurs avant traitement GetAge() sont correctes, et que cette même fonction ne renvoie pas le bon résultat, alors le problème vient certainement de ta fonction :)
    0
  9. Alex
     
    Les femmes ne cesseront donc jamais de nous poser des colles ?! ^^
    0
  10. magma
     
    Mdrrrrrr!!!!! tu es trop fort Alex!

    Alors en fait le probleme ne vient peut etre pas de ma fonction j'en ai utilisé une autre que j'ai récupéré par le net la voici
    function calculAge($jour, $mois, $annee){
    
    $unixDate = mktime(0, 0, 0, $mois, $jour, $annee);
    UNIX, (1er janvier 1970 00:00:00 GMT). **/
    
    $nowDate = time();
    
    $ageUnix = $nowDate - $unixDate;
    $age = floor($ageUnix / (365 * 24 * 60 * 60));
    return $age;
    
    }


    et la le meme probleme se pose sauf que les valeurs du tableau $age[] changent. la premiere est toujorus a 28ans et les deux autres sont a 38....
    0
  11. magma
     
    en gros voila ce que ca donne
    nb femme inscrite=6
    
    i=0
    age=28
    i=1
    age=38
    i=2
    age=38
    i=3
    age=38
    i=4
    age=38
    i=5
    age=38
    
    agemoyen femme=36,333333333333
    


    j'aimerai savoir pourquoi il met les autres valeurs a 38ans ???
    0
  12. magma
     
    c bon j'ai trouvé merci kan mm Alex !!! je savais que j'arriverai a bout des femmes ca me connait trop bien !
    0