Ein und die selbe Function.. 2 verschiedene Ergebnisse?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Ein und die selbe Function.. 2 verschiedene Ergebnisse?

    Hallo ihr Profis =) ich brauch mal eure hilfe.. hab ne Function,
    die aus dem Geburtsdatum das Alter ausrechnet, nämlich diese hier:

    Das ist die alter.inc.php

    PHP-Code:
    <? 
    function alter($geburtsdatum) {
            //Geburtstag in Timestamp konvertieren
            list($gebjahr, $gebmonat, $gebtag) = explode("-", $geburtsdatum);

            $geburt = mktime(0,0,0,$gebmonat,$gebtag,$gebjahr);
            // Aktuelles Datum als Timestamp
            $aktuell=time();
            // Millisekunden seid Geburt
            $msek = $aktuell - $geburt;
            //Alter in Tagen
            $tage = floor($msek/(3600*24));
            //Alter in Jahren
            $jahr = floor($tage/365);
            $gesamt = $gebjahr+$jahr;
            // Schaltjahre berücksichtigen (Jahreszahl durch 4 teilbar, dann Schaltjahr)
            $i=0;

            for($gebjahr; $gebjahr < $gesamt; $gebjahr++) {
                 if($gebjahr % 4 == 0) {
                      $i=$i+1;
                }
            }
            if ($tage-((365*$jahr)+$i) < 0) {
                $jahr--;
            }
            return $jahr;
        }
    $usralter = alter($gebdat);
    ?>
    funktioniert auch einwandfrei, bis auf die Sache mit denen,
    die vor 1970 geboren sind, da weiß ich auch noch nich wie ich das mache..

    Naja, jedenfalls, gibt es jetz das Problem das ich ein anderes Script noch habe,
    nämlich dieses hier:

    PHP-Code:
    <?
    require("connect.inc.php");

            $abfrageO = @mysql_query("SELECT User************
     FROM users WHERE UserName = '".$_SESSION['UserName']."'");
            $ergebnisO = @mysql_fetch_array($abfrageO);
            $usr************ = $ergebnisO['User************'];
            require("alter.inc.php");
            $sqlonline = "SELECT COUNT(*) as Anzahl
     FROM Online WHERE IP = '".$_SERVER['REMOTE_ADDR']."'";
            $ergebnisonline = mysql_query($sqlonline)
     OR die(mysql_error());
            $ausgabeonline = mysql_fetch_assoc($ergebnisonline);
        if($ausgabeonline['Anzahl']) {
    // Datum UPDATEN 
            $sqlonline = "UPDATE Online SET Datum = NOW()
     WHERE IP = '".$_SERVER['REMOTE_ADDR']."' AND
     UserNameO = '".$_SESSION['UserName']."'";
            mysql_query($sqlonline) OR die(mysql_error());
        } else {
    // Neuer USER
            $sqlonline = "INSERT INTO 
    Online (IP, Datum, UserNameO, ************O, AlterO) VALUES 
    ('".$_SERVER['REMOTE_ADDR']."',
     NOW(), '".$_SESSION['UserName']."', '".$usr************."', '".$usralter."')";

            mysql_query($sqlonline) OR die(mysql_error());
            }
    // Alte Datensätze LÖSCHEN
            $sqlonline = "DELETE FROM Online WHERE
     DATE_SUB(NOW(), INTERVAL 3 MINUTE) > Datum";
            mysql_query($sqlonline) OR
     die(mysql_error());
    // Anzahl AUSGEBEN
            $sqlonline = "SELECT COUNT(*) as Anzahl
     FROM Online";
            $ergebnisonline = mysql_query($sqlonline)
     OR die(mysql_error());
            $ausgabeonline = mysql_fetch_assoc($ergebnisonline);
    echo $ausgabeonline['Anzahl'];
    ?>
    Das Funktioniert normalerweise auch
    aber jetz meine Frage... Wenn jetz jetz noch das
    Alter von einen User in die Tabelle Online gespeichert
    wird, wie es ja in der 2. Funtion so ist... ist das Alter völlig falsch!
    Wie kann das denn sein? Wo ist da der fehler?
    Als Beispiel habe ich das Geburtsdatum 29.03.1988 genommen,
    als normale Ausgabe zeigt es ganz normal 17 an,
    so wie es ja auch sein soll, aber nach den speichern in
    die SQL Tabelle Online, wird dort 36 gespeichert!
    Ich blick da jetz echt nicht durch, warum das so ist!

    Kann mir vielleicht irgendwer helfen? Währe echt lieb!
    Wenn Ihr noch irgendwas braucht, sagt es mir!!!

    Danke schonmal.

    Liebe Grüße

    petschi
    Zuletzt geändert von petschi; 22.02.2006, 01:09.

  • #2
    bitte die regeln befolgen (sticky thread) und post editieren.

    Kommentar


    • #3
      Regelverstoß war doch wegen den Scrollbalken oder? Habs jetz bereinigt =)

      Kommentar


      • #4
        1. problem: untersuche nur den geburtstag und -monat im bezug auf das heutige datum: hatte der user dieses jahr schon geburtstag, so rechne
        Code:
        alter = dieses_jahr - geburtsjahr
        hatte er dieses jahr noch keinen geburtstag, so rechne
        Code:
        alter = dieses_jahr - geburtsjahr - 1
        dann gehts auch mit über 36-jährigen.

        2. problem: wozu "alter" überhaupt speichern? ändert sich doch eh jedes jahr. speichere nur den geburtstag und berechne das alter auf anfrage jedes mal neu. das problem kann im datentyp der spalte liegen - weiß ich nicht, aber gib dir die query doch einfach mal aus, bevor du sie an die db abschickst.

        p.s. die funktion alter() ist sehr ineffizient. wozu milisekunden? wozu grammatische fehler in den kommentaren? und vor allem - informiere dich über den begriff "schaltjahr" - da ist mehr drin, als die teilbarkeit durch 4.
        Zuletzt geändert von penizillin; 22.02.2006, 01:25.

        Kommentar


        • #5
          Danke erstmal, das werd ich mal versuchen!

          Das Alter speicher ich ja nur solange der User gerade Online ist, um auf einer Online-Tabelle dieses mit anzuzeigen, wenn du verstehst was ich meine? Aber wenn das nicht geht, werd ich das wohl mit dem Datum machen müssen.

          Zum Punkt Grammatikfehler *g* ja ok ich gebs zu ich war nich gut in Deutsch xD aber manchmal passieren haltdoch hin und wieder mal flüchtigkeitsfehler, tut mir leid!
          Millisekunden deswegen, weil ichs nich anders wusste *schäm*
          naja und wegen Schaltjahr.. gibts da noch mehr? Hmm da muss ich mich echt nochmal informieren =)

          Kommentar

          Lädt...
          X