[Solved] Alter berechnen

Begonnen von Webfan, 08 Oktober 2009, 12:22:15

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Webfan

Habe folgende Funktion im Internet gefunden:
http://littlecode.de/2009/alter-berechnen-mit-php/

Mein Code:
if(!function_exists('alter') )
{
function alter($tag, $monat, $jahr)
{
   return checkdate($monat, $tag, $jahr) ? (date('n') < $monat || (date('n') == $monat && date('j') < $tag)  ? date('Y') - $jahr - 1: date('Y') - $jahr): false;
}
}

Und:
           
$bday = explode('-', $row['user_bday']);
  if(MX_IS_USER || MX_IS_ADMIN){
                                            echo '('.$bday[2].'.'.$bday[1].'.'.$bday[0].')';
                                            if(alter($bday[2],$bday[1],$bday[0])==FALSE)
                                             {
                                              echo '?<br>';
                                             }else{
                                                  echo alter($bday[1],$bday[2],$bday[0]).' Jahre<br>';
                                                  }
                                            }else{
                                                  echo 'Du bist nicht angemeldet. Bitte <a href="log-me-in.html">einloggen</a>
                                                  oder <a href="register-me.html">registrieren</a>.<br>';
                                                  }


Leider funktioniert es nicht bei allen Usern, bei einigen schon und ich weiß nicht woran das liegt?
http://wwww.webfan.de/Dating.html (man muß eingeloggt sein).
Also bei eingein wird das Alter berechnet, bei einigen kommt False zurück, obwohl sie ein gültiges DAtum angegeben haben (sichtbar im Userprofil)
Habe also gedacht ich könnte mir den Code aus der view.php abschauen, werd aber daraus nicht schlau:
    $bday = explode('-', $uinfo['user_bday']);
    $uinfo['user_bday'] = (@checkdate($bday[1], $bday[2], $bday[0])) ? vkpGetBdayString($uinfo['user_bday']) : "";

und
        if (!empty($uinfo['user_bday'])   && (MX_IS_USER || MX_IS_ADMIN || $uinfo['showprofil']==1) ) {
        echo "<tr valign=\"top\"><td bgcolor=\"$bgcolor2\"><b>" . _YA_UBDAY . ":</b></td><td bgcolor=\"$bgcolor3\">" . $uinfo['user_bday'] . "&nbsp;, " . $uinfo['user_age'] . "&nbsp;" . _YEARS . "</td></tr>\n";
        }else{
                if (!empty($uinfo['user_bday']) ) echo "<tr valign=\"top\"><td bgcolor=\"$bgcolor2\"><b>" . _YA_UBDAY . ":</b></td><td bgcolor=\"$bgcolor3\"><i>*Du bist nicht <a href=\"log-me-in.html\">angemeldet</a>*</i></td></tr>\n";
             }

Dadurdch wird das Alter bei allen richtig angezeigt, aber ich blick das nicht.
Wie kann ich den Code übernehmen?
Wo kommt plötzlich das $uinfo['user_age']  her?

JoergK

Hoi ;)

Das in der view.php ausgegebene Alter (Zeile 155) ist bereits im Array $uinfo enthalten:
Zitatif (!empty($uinfo['user_bday'])) echo "<tr valign=\"top\"><td bgcolor=\"$bgcolor2\"><b>" . _YA_UBDAY . ":</b></td><td bgcolor=\"$bgcolor3\">" . $uinfo['user_bday'] . "&nbsp;, " . $uinfo['user_age'] . "&nbsp;" . _YEARS . "</td></tr>\n";

Dieses Array wird in der index.php mit Daten gefüllt:
    $uinfo = mxGetUserDataFromUsername($uname);


Die Funktion mxGetUserDataFromUsername() selbst findest Du in der /includes/mx_api.php. Dort sieht man, dass die Altersberechnung im Query-String an die DB übergeben wird und somit von der DB das berechnete Alter zurückgemeldet wird:
Zitat$result = sql_query("select *, (YEAR(CURRENT_DATE) - YEAR(user_bday)) - ( RIGHT(CURRENT_DATE,5) < RIGHT(user_bday,5)) AS user_age from ${user_prefix}_users where uname='" . mxAddSlashesForSQL(substr($username, 0, 25)) . "' and user_stat=" . intval($user_stat));
Gruß,
Jörg


Nobody is perfect ... so don't call me Nobody

Webfan

Der Code oben (in der 2 Box) ist in einer while schleife wo mehrere user ausgeleasen werden,
in $row ist berreits das meiste an Userdaten.
Du meinst also, wenn ich das richtig verstanden hab, ich soll die Funktion mxGetUserDataFromUsername nochmal in dieser while schleife aufrufen nur um an den Geburtstag zu kommen?
Dann hätte ich einige sql Abfragen mehr und die Userdaten bis auf den Geburtstag eben redundant in $userinfo und $row vorliegen.
Denk ich falsch? Gibt es eine besserer Möglichkeit? Weiß jemand ob die Funktion oben fehlerhaft ist, oder kann ich das
Zitat$result = sql_query("select *, (YEAR(CURRENT_DATE) - YEAR(user_bday)) - ( RIGHT(CURRENT_DATE,5) < RIGHT(user_bday,5)) AS user_age from ${user_prefix}_users where uname='" . mxAddSlashesForSQL(substr($username, 0, 25)) . "' and user_stat=" . intval($user_stat));
nicht auch von php machen lassen, bzw. kann mir jemand das nach php übersetzen? Den Geb. hab ich ja schon (siehe oben) und muß ihn nicht extra nochmal mit allen anderen userdaten auslesen.
:gruebel:

jogi24

nur mal so eine Idee !

wenn der user sein Jahr nur als 65 angegeben hat statt 1965 kann es zu probs kommen,

hatte das auchmal .

Webfan

Hab ich schon gecheckt, das ist es nicht.
Trotzdem Danke!

Webfan

 :mad2: Warum sich nicht den Query abgucken und in den eigenen einbauen  :mad2:
$sql  = sql_query("SELECT *, (YEAR(CURRENT_DATE) - YEAR(user_bday)) - ( RIGHT(CURRENT_DATE,5) < RIGHT(user_bday,5)) AS user_age FROM ${user_prefix}_users ".$where." ORDER BY user_lastvisit DESC, user_regtime DESC LIMIT ".mxAddSlashesForSQL(strip_tags($page)).",10");
Danke nochmal  :)