Avatar billede sevinding Juniormester
13. september 2010 - 08:59 Der er 10 kommentarer og
1 løsning

Alder i dag

Hej.
Jeg har et script der fortæller hvem der har fødselsdag idag.
Så vidt så godt, men når jeg vil se hvor gamle de er i dag, får jeg at vide at de alle er 2010 år gamle.
Scriptet ser sådan her ud:
<?php
$q = mysql_query("SELECT id, name, flags, DATE_FORMAT(date, '%d') AS dato, DATE_FORMAT(date, '%m') AS maaned, DATE_FORMAT(date, '%Y') AS aar FROM turen WHERE MONTH(date) = '".date('n')."' AND DAYOFMONTH(date) = '".date('j')."' ORDER BY name ASC") or die(mysql_error());
while($vis = mysql_fetch_array($q)){
$id = $vis[id];
$name = $vis[name];
$flags = $vis[flags];
$dato = $vis[dato];
$maaned = $vis[maaned];
$aar = $vis[aar];
$date = $dato-$maaned-$aar;

$idag = date("Y") . date("m") . date("d");
$date = $date;
$alder = substr($idag - $date,0,-4);

echo "$alder <img src=$flags width='15' height='10' border=0>  <a href=http://www.tourfacts.dk/profilryttere.php?id=$id class='link2'>$name</a><br>";

}

?>
Er der mon en der kan fortælle mig hvor fejlen er?
Avatar billede repox Seniormester
13. september 2010 - 09:08 #1
Der er mange ting der kunne pynte på din kode... blandt andet kunne du sætte quotes rundt om dine array indeks på dit $vis array. Så ville syntaksen trods alt være rigtig der.

Udover det, kunne du spare dig et funktionskald i $idag variablen ved at bare skrive:
$idag = date("Ymd");


Derefter gentager du bare dig selv ved at skrive $date = $date;
Linien er unødvendig.

I din oprindelige $date variabel, trækker du datotallene fra hinanden istedet for at lægge dem sammen til en samlet streng (hvilket jeg antager var hvad du gerne ville opnå, baseret på din $idag variabel).

Din $idag og $date variabel er heller ikke komponeret i samme rækkefølge:
$date har rækkefølgen dato-måned-år
$idag har rækkefølgen år-måned-dato

Så der er egentlig mange ting der gør at du ikke får den rigtige alder ud...
Avatar billede sevinding Juniormester
13. september 2010 - 09:42 #2
Nu er jeg så lidt på glatis. Jeg har fået den til at gøre dem alle 2009 år gamle nu.
Du skriver:
quotes rundt om dine array indeks på dit $vis array.
Hvor skal de sættes?
Og hvor er det jeg trækker datotallene fra hinanden
Avatar billede repox Seniormester
13. september 2010 - 09:50 #3
<?php
$q = mysql_query("SELECT id, name, flags, DATE_FORMAT(date, '%d') AS dato, DATE_FORMAT(date, '%m') AS maaned, DATE_FORMAT(date, '%Y') AS aar FROM turen WHERE MONTH(date) = '".date('n')."' AND DAYOFMONTH(date) = '".date('j')."' ORDER BY name ASC") or die(mysql_error());
while($vis = mysql_fetch_array($q)){
$id = $vis[id]; // Brug quotes om dine indekses - altså $vis["id"] og ikke $vis[id]
$name = $vis[name];
$flags = $vis[flags];
$dato = $vis[dato];
$maaned = $vis[maaned];
$aar = $vis[aar];
$date = $dato-$maaned-$aar; // her trækker du tal fra hinanden

$idag = date("Y") . date("m") . date("d");
$date = $date; // her siger du bare at du vil sætte variablen $date til variablen $date.
$alder = substr($idag - $date,0,-4);

echo "$alder <img src=$flags width='15' height='10' border=0>  <a href=http://www.tourfacts.dk/profilryttere.php?id=$id class='link2'>$name</a><br>";

}

?>
Avatar billede sevinding Juniormester
13. september 2010 - 10:04 #4
Skal denne linie, $date = $dato-$maaned-$aar; ændres til: $date = $dato+$maaned+$aar;?
Det har jeg lige prøvetog det hjalp ikke. Jeg har fulgt dine andre råd.
Avatar billede repox Seniormester
13. september 2010 - 10:06 #5
Hvorfor bruger du punktum i din $idag variabel?
Avatar billede showsource Seniormester
13. september 2010 - 10:09 #6
Udover det med koden, så kan du, hvis det er standard datoformat i db, ( 1963-12-27 , f.eks. ) bruge:

SELECT (YEAR(CURDATE())-YEAR(date))-(RIGHT(CURDATE(), 5)<RIGHT(date, 5)) as alder
Avatar billede sevinding Juniormester
13. september 2010 - 10:12 #7
Der er jeg dig svar skyldig.
Det var et script jeg fandt og har prøvet at få det til at virke.
Hvad skal der være i stedet for punktum? Bruger jeg semikolon, forsvinder udtræk til alder.
Avatar billede sevinding Juniormester
13. september 2010 - 10:20 #8
Hej showsource.
Det bruger jeg til at trække alder ud på mine ryttere i deres profil. Det er mere dagen i dag jeg er nysgerrig efter.
Avatar billede repox Seniormester
13. september 2010 - 10:21 #9
For at sammensætte en streng i PHP bruger man punktum.
<?php
  $var1 = "hej ";
  $var2 = "med dig";
  $streng = $var1 . $var2; // bliver til "hej med dig";
?>


Det mest åbenlyse ville være - som #6 også er inde på - anvende et korrekt dato format som angives med Y-m-d.
Løsningen som #6 kommer med er elegant og behøver ikke videre behandling fra PHP.

Men hvis du skal bruge PHP, ud fra den kode du selv har lavet, skal du lave noget ala:
<?php
...
  $dato = $vis["dato"];
  $maaned = $vis["maaned"];
  $aar = $vis["aar"];
 
  $alder = date("Y") - $aar;
  if( mktime(0, 0, 0, $maaned, $dato, date("Y")) < time() )
    $alder = $alder - 1;
...
?>
Avatar billede sevinding Juniormester
13. september 2010 - 10:26 #10
Så var den hjemme repox.
Må jeg ha lov til, med glæde, at overrække dig pointene?
Avatar billede repox Seniormester
13. september 2010 - 12:59 #11
Du fik et svar fra mig her...
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