Avatar billede phpbegynder2004 Nybegynder
12. november 2005 - 16:48 Der er 2 kommentarer og
1 løsning

Forenkling af kode og sortering af database værdi

Hej,

Jeg har et script der ser på en fødselsdagsdato (F.eks. 24-12-1983) og udskriver hvor mange dage der er til ens fødselsdag og hvor gammel man bliver. (F.eks.: Peter bliver 14 år om 180 dage)

Tabellen med oplysningerne hedder users og dato, måned og år er delt op i hver sin række.

Scriptet fungerer fint, men jeg kunne godt tænke mig at resultatet bliver sorteret, så den person der har fødselsdag tættest på, står først. F.eks.:
Peter bliver 14 år om 180 dage
Helen fylder 35 år om 200 dage
Niels fylder 20 år om 250 dage

Er det derudover muligt at forenkle koden?

Her er koden:


function birthDay($day,$month,$year){



if($day<10){

$day=str_replace("0", "", $day);

}

if($month<10){

$maaned=str_replace("0", "", $month);

}

if(strlen($year)==2){

$year="19".$year;

}

    $todayArr = getdate();

    $today  = mktime(0,0,0,$todayArr["mon"],$todayArr["mday"],$todayArr["year"]);

    $future  = mktime(0,0,0,$month,$day);

    $birth  = mktime(0,0,0,$month,$day,$year);

   

    if($today > $future)

    {

        $futureYear = date("Y", $future);

        $futureYear++;

        $future  = mktime(0,0,0,$month,$day,$futureYear);

        $age = date("Y", $today) - $year + 1;

    }

    else

    {

        $age = date("Y", $today) - $year;

    }

   

    $secLeft = $future - $today;

    $secDay = 24 * 60 * 60;

    $daysLeft = floor($secLeft/$secDay);

/*

    if ($daysLeft > 7)

$VAR="nej";

else

*/

    if ($daysLeft > 1)

        $VAR= "fylder " . $age . " år om  " . $daysLeft . " dage";

    else if ($daysLeft == 1)

        $VAR= "fylder " . $age . " år <b>imorgen</b>";

    else if ($today == $future)

        $VAR= "fylder " . $age . " år <b>idag!</b>";

    else

        $VAR="Passed";

RETURN $VAR;

}

$bdays=mysql_query("SELECT * FROM users")or DIE(mysql_error());

while($row=mysql_fetch_assoc($bdays)){

if(birthDay($row[fosdag],$row[fosmaaned],$row[fosaar])!="nej"){

echo $row[nick]." ";

echo birthDay($row[fosdag],$row[fosmaaned],$row[fosaar]);

echo"<br>";

}

}
Avatar billede Slettet bruger
13. november 2005 - 06:48 #1
Hvis du har et dato felt i din database kunne man måske slippe afsted med sådan noget som

select name, brithday, (now() - brithday) as distance order by distance

hvis mySQL kan sortere på et alias??
Avatar billede phpbegynder2004 Nybegynder
17. november 2005 - 18:19 #2
Jeg har fødseldagen delt op i tre forskellige rækker:
tabellen users:
fosdag | fosmaaned | fosaar

Kan det bruegs til noget?
Avatar billede phpbegynder2004 Nybegynder
17. november 2005 - 18:34 #3
Jeg lukker, men opretter et nyt spørgsmål.
Ellers tak for svaret. Jeg håber på, at jeg kan få lidt større deltagelse i det nye spørgsmål.
http://eksperten.dk/spm/665376
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester