Gå til innhold

script som oppdaterer alder


Anbefalte innlegg

Skrevet

Jeg har en side der folk kan registrere seg. Der må de blant annet skrive inn alder, problemet med dette er at alderen ikke oppdateres...hvordan kan jeg lage et script som oppdaterer alderen slik som her på forumet? Jeg vil også lage en sånn liste der de velger dato, dag, år fra en liste, men jeg har aldri laget noe sånt. Hvordan går jeg frem for å få til dette?

Videoannonse
Annonse
Skrevet (endret)

tror jeg har funnet et greit script som regner ut alder i alle fall:

 

<?php
function alder($y,$m,$d) {
  list($now_d,$now_m,$now_y) = explode('.',date('d.m.Y'));

  if(($m > $now_m) || ($m == $now_m && $now_d < $d))
        $age = $now_y - $y  - 1;
   else
       $age = $now_y - $y;

    return $age;
}

$alder = alder($dato,$maned,$aar)

?>

 

Er det mullig å bruke dette på en fornuftig måte til dette mon tro?

 

 

EDIT: Tror jeg har en idé: brukeren velger fødselsdag fra en <select> meny (dd.mm.åå ). Hvis dagen i dag er lik dd.mm i databasen (finner ut ved hjelp av date()), sett i gang skriptet over og UPDATE row 'en alder med den nye infoen etterpå.

 

Jeg er ikke sikker på hvordan jeg skal skrive denne koden i praksis, men virker dette logisk?

Endret av Tha_Zaynt
Skrevet

Er det ikke bedre at brukeren velger fødselsdag under registrering, da ?

 

Da slipper du å oppdatere feltet alder hele tiden, og kaller bare funksjonen alder hver gang du skal ha alderen på vedkommende...

Skrevet

Du må ha et felt i databasen som er DATETIME, hvor du legger inn fødselsdatoen...

 

På registreringssiden, ha du tre dropdownbokser, med dato, måned og år for når de er født (Se kontrollpanel->endre profil på dette forumet).

Legg dette inn i en variabel, på formatet År-Måned-dato, og legg det inn i databasen...

 

Når du skal ha alderen til en bruker, splitter du denne strengen, og sender det inn i funksjonen.

Evt. kan du lage tre felt i databesen, som hver inneholder, dag, måned og år, men dette er unødvendig.

Skrevet (endret)

gjør curdate() at datoen i mysql-databasen er oppdatert hele tidden, eller trenger jeg ikke å ha den verdien lagret?

Endret av Tha_Zaynt
Skrevet
gjør curdate() at datoen i mysql-databasen er oppdatert hele tidden, eller trenger jeg ikke å ha den verdien lagret?

Ja.

 

Jmf. den lenken du fikk, kan du bruke:

 

MySQL provides several functions that you can use to perform calculations on dates, for example, to calculate ages or extract parts of dates. 

To determine how many years old each of your pets is, compute the difference in the year part of the current date and the birth date, then subtract one if the current date occurs earlier in the calendar year than the birth date. The following query shows, for each pet, the birth date, the current date, and the age in years. 

mysql> SELECT name, birth, CURDATE(),
   -> (YEAR(CURDATE())-YEAR(birth))
   -> - (RIGHT(CURDATE(),5)<RIGHT(birth,5))
   -> AS age
   -> FROM pet;
+----------+------------+------------+------+
| name     | birth      | CURDATE()  | age  |
+----------+------------+------------+------+
| Fluffy   | 1993-02-04 | 2003-08-19 |   10 |
| Claws    | 1994-03-17 | 2003-08-19 |    9 |
| Buffy    | 1989-05-13 | 2003-08-19 |   14 |
| Fang     | 1990-08-27 | 2003-08-19 |   12 |
| Bowser   | 1989-08-31 | 2003-08-19 |   13 |
| Chirpy   | 1998-09-11 | 2003-08-19 |    4 |
| Whistler | 1997-12-09 | 2003-08-19 |    5 |
| Slim     | 1996-04-29 | 2003-08-19 |    7 |
| Puffball | 1999-03-30 | 2003-08-19 |    4 |
+----------+------------+------------+------+

 

Så bare se på denne, og tilpass den til din tabell. Du trenger bare kolonnene name og birth, CURDATE() og age legges til automatisk av mySQL i resultatet av spørringen. (De blir ikke lagt til i tabellen, og det er heller ingen vits, fordi de forandrer seg). Dermed får du alltid oppdatert alder når du kjører denne spørringen.

 

MVH Audun

Skrevet

Ta å lagre brukers fødselsdato i år, måned og dag, deretter setter du inn disse som parametere i denne funksjonen:

<?php
function AgebyDayMonthYear($day, $month, $year)
{

//By dabear

   $currentYear = date('Y');
   $currentMonth = date('m');
   $currentDayofMonth = date('d');


   if($currentMonth > $month)
   {
   
   
       return ($currentYear - $year);
   
   
   }
   elseif($currentMonth < $month)
   {
 
           return($currentYear - $year -1);
   
   }
   else // ev. elseif($currentMonth == $month)
   {
     return($currentDayofMonth >= $day) ? ($currentYear - $year) : ($currentYear - $year -1);

   }
   
   


}


//bruk::
//finn $day, $month og $year
echo 'brukeren er ' . AgebyDayMonthYear($day, $month, $year) . 'år gammel';

?>

Skrevet

Jeg har fødselsdatoen lagret i en row som heter dato og prøvde med denne spørringen uten at det funka:

 

<?php
include("config.php");

mysql_connect($mySQLhost, $mySQLuser, $mySQLpass)
       or die("Could not connect: " . mysql_error());
mysql_select_db($mySQLdb);

$q = mysql_query("SELECT dato, CURDATE(),(YEAR(CURDATE())-YEAR(dato))
   (RIGHT(CURDATE(),5)<RIGHT(dato,5))
AS age
   FROM users WHERE brukernavn = 'zaynt' ");

$row = mysql_fetch_array(mysql_query($q));

echo $row['dato'];

?>

 

feilmelding:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /hsphere/local/home/sjurvaag/nisselink.sjurvaage.com/age.php on line 13

 

Mulig jeg er på bærtur nå, men er det noen som kan være så snill å hjelpe meg å finne hvor feilen ligger?

Skrevet

$q = mysql_query("SELECT dato, CURDATE(),(YEAR(CURDATE())-YEAR(dato)) - (RIGHT(CURDATE(),5)<RIGHT(dato,5))
AS age
  FROM users WHERE brukernavn = 'zaynt' ");

Hvis den ikke funker så kan du skrive ut mysql_error().

Skrevet

prøvde spørringen nedenfor, men ingenting skjer...må den ikke skrives ut på noen måte?

 

<?php
include ("config.php");

mysql_connect($mySQLhost, $mySQLuser, $mySQLpass) or die("Could not connect: " . mysql_error());
mysql_select_db($mySQLdb);

$q = mysql_query("SELECT dato,CURDATE(),(YEAR(CURDATE()) - YEAR(dato))-(RIGHT(CURDATE(),5)<RIGHT(dato,5)) AS age FROM users WHERE brukernavn = 'zaynt' ")  or die("Error: " . mysql_error());
?>

Skrevet

fikk ikke ut noe av dette heller..:

 

<?php
include ("config.php");

mysql_connect($mySQLhost, $mySQLuser, $mySQLpass) or die("Could not connect: " . mysql_error());
mysql_select_db($mySQLdb);

$q = mysql_query("SELECT dato,CURDATE(),(YEAR(CURDATE()) - YEAR(dato))-(RIGHT(CURDATE(),5)<RIGHT(dato,5)) AS age FROM users WHERE brukernavn = 'zaynt' ")  or die("Error: " . mysql_error());

echo $row['age'];
?>

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...