Tha_Zaynt Skrevet 29. november 2004 Del Skrevet 29. november 2004 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? Lenke til kommentar
Tha_Zaynt Skrevet 29. november 2004 Forfatter Del Skrevet 29. november 2004 (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 29. november 2004 av Tha_Zaynt Lenke til kommentar
kakkle Skrevet 30. november 2004 Del Skrevet 30. november 2004 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... Lenke til kommentar
Tha_Zaynt Skrevet 30. november 2004 Forfatter Del Skrevet 30. november 2004 Jo det er det jeg vil få til, men vet ikke helt hvordan jeg skal gå frem...noen forslag? Lenke til kommentar
kakkle Skrevet 30. november 2004 Del Skrevet 30. november 2004 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. Lenke til kommentar
LoS Skrevet 30. november 2004 Del Skrevet 30. november 2004 (endret) Eventuelt så kan du få MySQL til å regne det ut for deg. Edit: på fødselsdager er det bedre å bruke date enn datetime. Endret 30. november 2004 av LoS Lenke til kommentar
Tha_Zaynt Skrevet 30. november 2004 Forfatter Del Skrevet 30. november 2004 (endret) gjør curdate() at datoen i mysql-databasen er oppdatert hele tidden, eller trenger jeg ikke å ha den verdien lagret? Endret 30. november 2004 av Tha_Zaynt Lenke til kommentar
audunr Skrevet 30. november 2004 Del Skrevet 30. november 2004 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 Lenke til kommentar
dabear Skrevet 30. november 2004 Del Skrevet 30. november 2004 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'; ?> Lenke til kommentar
Tha_Zaynt Skrevet 2. desember 2004 Forfatter Del Skrevet 2. desember 2004 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? Lenke til kommentar
LoS Skrevet 2. desember 2004 Del Skrevet 2. desember 2004 $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(). Lenke til kommentar
Tha_Zaynt Skrevet 2. desember 2004 Forfatter Del Skrevet 2. desember 2004 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()); ?> Lenke til kommentar
LoS Skrevet 2. desember 2004 Del Skrevet 2. desember 2004 må skrive ut $row[age] ja. Lenke til kommentar
Tha_Zaynt Skrevet 2. desember 2004 Forfatter Del Skrevet 2. desember 2004 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']; ?> Lenke til kommentar
LoS Skrevet 2. desember 2004 Del Skrevet 2. desember 2004 Altså, du må jo kjøre fetch_array først da Lenke til kommentar
Tha_Zaynt Skrevet 2. desember 2004 Forfatter Del Skrevet 2. desember 2004 Brukte feil kode Fikk det til nå ja. Takker for hjelpen! Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå