Komme nicht Weiter SQL problem beim Alter errechnen?!

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

  • Komme nicht Weiter SQL problem beim Alter errechnen?!

    Hallo Leute, ich hab mal wieder ein Problem...
    Und zwar soll dieses Script aus einer SQL Tabelle die User auslesen,
    die Online sind und das Alter von denen ausrechnen,
    sowie alle männlichen usern blau geben und den weiblichen pink...

    PHP-Code:
    <?
          require("connect.inc.php");
            
            $abfrageUser = @mysql_query("SELECT UserNameO, ************O, GebO FROM Online")
    or die(mysql_error().'<hr />'.'euer SQL'.'<hr />');
            while($row = mysql_fetch_assoc($abfrageUser)) {
            require("alter_online.inc.php"); 

            echo '<a href="profile/user.php?name='.$row['UserNameO'].'" target="new"
    style="text-decoration:none; color:';
            if($row['************O'] == männlich) {echo '#0000FF';} else {echo '#FF00FF';}
            echo '">&nbsp;'.$usralter.'&nbsp;'.$row['UserNameO'].'</a>';
            }
            
          ?>
    Hier mal noch die alter_online.inc.php
    PHP-Code:
    <?
        //Geburtsdatum ausrechnen

    $gebdat = $row['GebO'];
        
        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 seit 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 (wenn 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);
    ?>

    So, jetz zu Mein Prblem...
    Wenn nur ein User Online ist, funktioniert alles einwandfrei,
    das Alter wird ausgerechnet, der Link wird blau oder pink,
    je nach dem und alles klappt...
    Wenn sich jetzt aber ein 2. User anmeldet und einloggt,
    kommt ein SQL fehler unter dem ersten User der immernoch geht:

    Code:
    Fatal error: Cannot redeclare alter() (previously declared
    in /data/members/free/tripod/de/s/v/e/svenpetschi/htdocs/alter_online.inc.php:7)
    in /data/members/free/tripod/de/s/v/e/svenpetschi/htdocs/alter_online.inc.php on line 7
    Line 7 ist in der alter.php die Zeile wo
    function alter($geburtsdatum) {
    steht
    Was mach ich denn falsch? Ich verstehe einfach nich warum es geht,
    wenn nur ein User angemeldet ist und wenn mehrere angemeldet sind es nicht geht!
    Bitte helft mir! Vielleicht ist es auch ganz simpel, ich weiß es nicht!

    Danke schonmal!

    Liebe Grüße

    petschi

  • #2
    eine funktion wird nur einmal deklariert, und dann nicht mehr.

    du deklarierst die funktion innerhalb einer schleife. beim ersten mal geht das gut, beim zweiten schleifendurchlauf nicht mehr. das hättest du aber ańhand von 'fatal error: cannot redeclare function alter()' ... und ein wenig suche auch selbst rausfinden können.

    tipp:

    neue datei -> functions.php

    dort packst du alle functions rein, und holst sie im kopf deiner index.php mit
    require_once(/pfad/zur/functions.php); wieder rein.

    edit:
    ah, ich sehe, du hast 'require' eh schon im code.

    das require darf nie in einer schleife stehen - und wenn, dann nur in der require_once() - form.


    grüße
    axo
    Zuletzt geändert von axo; 24.02.2006, 00:19.

    Kommentar


    • #3
      danke fürden tipp, das wusst ich noch garnich =)

      ok das geht auf jeden fall jetz..

      Aber jetz ist es komischer weise so, das alle user das Alter 36 haben, egal wie alt sie sind,
      das war doch vorher nicht, wie kommt denn das jetzt?

      Kommentar


      • #4
        Hi!

        PHP-Code:
        <?
              require("connect.inc.php");
                require("alter_online.inc.php");
                $abfrageUser = @mysql_query("SELECT UserNameO, ************O, GebO FROM Online")
        or die(mysql_error().'<hr />'.'euer SQL'.'<hr />');
                while($row = mysql_fetch_assoc($abfrageUser)) {

                echo '<a href="profile/user.php?name='.$row['UserNameO'].'" target="new"
        style="text-decoration:none; color:';
                if($row['************O'] == männlich) {echo '#0000FF';} else {echo '#FF00FF';}
                echo '">&nbsp;'.alter($row['GebO']).'&nbsp;'.$row['UserNameO'].'</a>';
                }
                
              ?>
        alter_online.inc.php


        PHP-Code:
        <?
            //Geburtsdatum ausrechnen
            
            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 seit 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 (wenn 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;
            }

        ?>
        So dürfte es funktionieren. Da du ja per require die Datei nur einmal einbindest, wird ja $gebdat nur einmal festgelegt. Im Code für die Anzeige, habe ich jetzt einfach die Funktion alter() anstatt $usralter eingefügt. Somit wird mit der Funktion alter() für jeden User das eigene Alter gezeigt.
        mfg oko

        Kommentar


        • #5
          hey super danke so funktioniert das *klatsch* *g*

          aber wenn jetz wirklich jemand älter als 36 sein sollte klappts nich mehr oder?

          Kommentar


          • #6
            Doch, sofern in alter() bei der Berechnung kein Fehler ist, sollte es funktionieren.

            Kommentar


            • #7
              hmm oky =)
              dann muss ich mich wohl auf die suche nach nen fehler begeben, da alle über 36 nur als 36 angezeigt werden!

              Liegt an diesen Bescheuerten Timestamps oder? naja ma gucken ob ich das hinbekomme^^

              Kommentar


              • #8
                hi ... ich habe mir hier zwar nicht alles durchgelesen - > aber hier habe ich auch noch einen code ... den ich mal gebraucht habe fuer eine altersberechnung ... :

                PHP-Code:
                $sql "SELECT * FROM table WHERE 
                geburtsdatum between DATE_SUB(CURDATE(),INTERVAL "
                .$bis." YEAR) AND DATE_SUB(CURDATE(),INTERVAL ".$von." YEAR)"
                wobei von bis das alter der jeweiligen person ist ... naja und wenn du nur das alter brauchst kannsts ja modden den string - aja das geburtsdatum muss als DATE abgespeichert sein ...

                wenns nix bringt auch egal -.-


                greetz subabrain !

                EDIT:
                sry hab die php tags vergessen
                Zuletzt geändert von subabrain; 24.02.2006, 09:05.

                Kommentar


                • #9
                  Aber jetz ist es komischer weise so, das alle user das Alter 36 haben, egal wie alt sie sind,
                  das war doch vorher nicht, wie kommt denn das jetzt?

                  RTFM:
                  * www.php.net/date/
                  * www.php.net/time/
                  * http://de.wikipedia.org/wiki/Jahr-2038-Problem
                  * http://de.wikipedia.org/wiki/Unixtime

                  Kommentar


                  • #10
                    Hey danke, für diese Funktion .... genau was ich gesucht habe (bis auf ein paar Variablen, die für mich unnötig sind ).

                    Kommentar

                    Lädt...
                    X