Avatar billede shjorth Nybegynder
10. september 2008 - 14:47 Der er 12 kommentarer og
1 løsning

Oprettelsesdato passer ikke (PHP)

Hejsa.

Når en ny bruger opretter sig på min side bliver han sendt til add.php som indeholder:

---------------------------------
$dato = date("Y-m-d");
mysql_query("INSERT INTO users (`userid`,`dato`) VALUES('".$user_id."','".$dato."')")or die(mysql_error());
---------------------------------

Jeg kigger så tilfældigvis idag i min database og ser flg:

ID: 11.217  userid  2008-09-10
ID: 11.216  userid  2008-09-10
ID: 11.215  userid  2008-09-10
ID: 11.214  userid  2008-09-09!
ID: 11.213  userid  2008-09-10
ID: 11.212  userid  2008-90-10

Som i kan se er ID 11.214 fra igår, men de andre er fra idag.

Id er primær med auto_increasment

Er der nogen der kan gennemskue hvad der er gået galt?

Jeg har omkring 2-300 nye brugere per dag, fra alle steder i verden. Min eneste tanke er tidsforskellen, men mig bekendt er den dato der bliver sat ind, datoen fra min server som kører dansk tid.

Det undrer mig utrolig meget.
Håber der er nogen der kender til det problem :-)
Avatar billede michael_stim Ekspert
10. september 2008 - 14:57 #1
Den eneste forklaring jeg kan se, er at der er blevet rodet med serveren. De har måske kørt en opgradering eller lignende.
Avatar billede Slettet bruger
10. september 2008 - 15:03 #2
Serveren kører en tid, sikkert dansk hvis din udbyder er et dansk selvskab.
Kan ikke se hvorfor den skulle lave det nummer.
Gider du lave et dump af din database uden data, bare selve strukturen?
Avatar billede pidgeot Nybegynder
10. september 2008 - 15:03 #3
Der er en potentiel race condition: hvis den tråd der har kørt for 11214 ikke får lov at komme til med det samme, så kan datoen være skiftet mellem tildelingen til $date og din mysql_query.

Hvorfor har du i øvrigt userid i din INSERT? Det er vel dit auto_increment-felt, så det skulle ikke være nødvendigt (og faktisk kan det have uønskede konsekvenser hvis det er med).
Avatar billede Slettet bruger
10. september 2008 - 15:06 #4
Men du har ret det er underligt at den gør det pjat der.
Men fremover, så brug:
mysql_query("INSERT INTO users (`userid`,`dato`) VALUES('".$user_id."', NOW())")or die(mysql_error());

NOW() er dato & tid.
Så har du valgt dit felt i databasen til at være date, så er det 2008-09-10, har du valgt time, så er det 15:05:00, har du valgt datetime er det begge dele.

Den er meget rar at ha'.
Avatar billede shjorth Nybegynder
10. september 2008 - 15:12 #5
Her er et dump af min db:

CREATE TABLE `users` (
  `id` int(11) NOT NULL auto_increment,
  `userid` int(11) NOT NULL,
  `level` int(11) NOT NULL,
  `acc` int(11) NOT NULL,
  `dato` date NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2809 ;

Grunden til userid er at userid er ikke er det samme som id, da brugeren allerede eksisterer på tidspunktet han oprettes i den her db.

Med hensyn til NOW()) så er jeg egentlig kun interesseret i datoen, da den kun skal sammenlignes med nogle datoer i selve scriptet.
Avatar billede shjorth Nybegynder
10. september 2008 - 15:13 #6
Ah.. læste ikke lige rigtigt.. Så NOW() vil i teorien være præcis det samme som det jeg allerede gør, jeg springer bare min var $dato over?
Avatar billede Slettet bruger
10. september 2008 - 15:16 #7
Jeps du har forstået det korrekt.
Avatar billede pidgeot Nybegynder
10. september 2008 - 15:19 #8
...men enten er de oprindelige ID'er ikke rigtige, eller også er der da vist noget helt galt - for den tabelstruktur angiver at næste ID bør være 2809.

Måske du i virkeligheden har haft kigget/sorteret på et andet felt?
Avatar billede shjorth Nybegynder
10. september 2008 - 15:27 #9
Den er er taget fra min localhost og ikke fra serveren ude i byen :)
Strukturen er den samme
Avatar billede Slettet bruger
10. september 2008 - 16:07 #10
Ja okay - ja det har du ellers ret i pidgeot.
Avatar billede dkfire Nybegynder
10. september 2008 - 17:33 #11
Jeg kunne godt tænke mig at vide hvordan denne her linje er lavet:
ID: 11.212  userid  2008-90-10

Dato'en er vist helt hen i vejret. Måske du har pillet lidt for meget med dataerne inden vi har fået dem.
Avatar billede shjorth Nybegynder
10. september 2008 - 17:51 #12
hov :D det er bare en tastefejl fra min side.. det er 2008-09-10.. Så heller ikke den :S
Avatar billede shjorth Nybegynder
12. juni 2010 - 20:54 #13
Lukker her, skriv endelig hvis i vil have point :P
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