Gå til innhold

Lagring av dato/klokkeslett i mysql


Anbefalte innlegg

Jeg har et skjema som lagres i mysql med et php script.

Jeg vil også ha med datoen og klokkeslettet for når skjemaet blir sendt i.

 

Hvordan skal jeg gjøre det?

 

Hensikten med det er at jeg senere skal kunne hente ut f.eks "denne ukens innsendinger" - derfor funker det vel dårlig å bruke vanlig date() funksjon i php, ettersom mysql bruker et annet dato/tid format(?).

 

Hvilke funksjon ville dere brukt i php scriptet for å logge dato klokkeslett?

 

 

Ekstra spørsmål for den som gidder: Hvordan vil da spørringen som henter "denne ukens innsendinger" se ut?

Lenke til kommentar
Videoannonse
Annonse
lag feltet i datetime format i mysql databasen også bruker du now() i mysql querien.

 

mysql_query("INSERT INTO tabell (date, felt1) values (now(), '".$felt1verdi."')");

 

Skjønner?

 

Ikke helt egentlig. Dette er første gang jeg bruker mysql, og noe av det første jeg lager i php så jeg kan karakteriseres som n00b.

 

Datetime i mysql er grei. Da bare endrer jeg data typen til feltet dato.

 

Men det ble litt forvirring i den spørringen.

 

Slik er spørringen min nå:

$sql = "INSERT INTO logg SET Dato='$dato', IP='$IP', Melding='$melding";

Altså jeg bruker variabler i stedet.

 

Hvordan blir da variabelen din? dato = "now()" ?

Får jeg med klokkeslett også når jeg bruker now()?

Lenke til kommentar

now() som nevnes over er en kommando i mysql. Bruk slik som eksempelet hans, eller bruke php og formattere til rett datoformat. Enkleste er helt klart å bruke now().

Og bruk felttypen datetime (eller timestamp, husker ikke i farta), ikke date.

 

Presiering: Du bruker med andre ord ikke variabler for dateo og tid, men bare now() istedet:

 

$sql = "INSERT INTO logg ('Dato', 'IP', 'Melding') values(now(), '$IP', '$melding')";

Lenke til kommentar

Takk for hjelpen..

 

Trodde jeg skjønte litt nå, men den gang ei:

 

Her er to varianter jeg har prøvd:

 

1: INSERT INTO meldinger ('Dato','IP','Melding') values(now(),'$IP','$melding')

Får meldingen Query was empty

 

2: INSERT INTO meldinger SET Dato='now()', IP='$IP', Melding='$melding'

Alt blir lagt inn i databasen, men dato feltet (er satt til DATETIME) får standardvedien 0000-00-00 00:00:00.

 

Noen som har en idé?

 

 

Har lest litt i mysql manualen, men blir ikke helt klok på dette. Hvis jeg en gang klarer å få lagt inn dato og klokkeslett, blir ikke det litt tungvindt når formatet er helt feil? Det går jo selvsagt greit å lagre det i databasen slik, men når jeg skal f.eks liste de ti siste oppføringene i databasen, med dato/klokkeslett, så blir det vel masse styr for å vise det i norsk format?

Lenke til kommentar

Ja, den gjorde egentlig det, jeg bare testet med ' for å se om det funket, og glemte å ta det vekk igjen...

 

Edit: Nei så sannelig! Det var bare den første jeg hadde prøvd det på! Nå prøvde jeg den siste uten ' og det funket glimrende. Men jeg lurer fremdeles på følgende:

 

Jeg skjønner at formateringen ikke blir rotete når jeg skal hente ut data - men å hente ut og i tillegg VISE det blir vel litt bal? Altså "echo $dato<br>$melding"

Lenke til kommentar

$formatert_dato = date("F jS Y", strtotime($dato));

...hvor $dato er dato-feltet fra databasen. Slå opp på date() i PHP-dokumentasjonen for å lære mer om hvordan du kan formatere datovisningen.

 

Problemet du nå opplever er at date() forventer input på en bestemt måte, men ikke slik som datetime-feltet i MySQL fungerer. Dermed må du bruker strtotime() (står for string to time), en funksjon som tolker strenger om til formatet date vil ha som input.

Lenke til kommentar

Du kan også bruke et int-felt i databasen og så lagre et unix timestamp. Da trenger du ikke konvertere før du mater det til date(), men du vil jo få et ganske uforståelig timestamp hvis du ikke bruker formattering på feltet. Jeg foretrekker steget innom strtotime() av ulike årsaker, men mest den nevnte.

Lenke til kommentar
Du kan også bruke et int-felt i databasen og så lagre et unix timestamp. Da trenger du ikke konvertere før du mater det til date(), men du vil jo få et ganske uforståelig timestamp hvis du ikke bruker formattering på feltet. Jeg foretrekker steget innom strtotime() av ulike årsaker, men mest den nevnte.

 

Jeg har en tendens til å bruke int(15) og sende unix timestamps inn og ut. For å konvertere har jeg bare laget en funksjon som heter format_date(), og som lager det formatet jeg ønsker.

 

Ulempen med dette er at jeg ikke kan bruke mysqls innebygde funksjoner, som YEAR(), MONTH() og så videre.

 

Jeg skal overhodet ikke påstå at min måte er smart, kanskje heller tvert imot, men gammel vane er vond å vende :p

Lenke til kommentar
Dermed må du bruker strtotime() (står for string to time), en funksjon som tolker strenger om til formatet date vil ha som input.

 

GLIMRENDE!! :woot:

 

Nå går det som smurt. :)

Eneste som mangler nå er at det står dato på norsk, men da må jeg vel bruke setlocale() eller noe slikt. Det tror jeg jeg skal klare på egenhånd...

 

Tusen takk for hjelpen alle sammen!

Lenke til kommentar
Jeg har en tendens til å bruke int(15) og sende unix timestamps inn og ut. For å konvertere har jeg bare laget en funksjon som heter format_date(), og som lager det formatet jeg ønsker.

Du er klar over at det har liten hensikt å angi størrelse på int-felt? Betyr bare hvor mange siffer som skal 'paddes', har ingeting med størrelsen på feltet å gjøre. int er int, int(10) er like stort som int(15).

Les mer: http://www.mysql.com/doc/en/Numeric_types.html

Lenke til kommentar

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...