01. maj 2005 - 01:05Der er
13 kommentarer og 1 løsning
Problemer med min "Besøg i dag" tæller
Hejsa.
Jeg har jo desværre lige opdaget at den tæller jeg selv har kodet ikke virker korrekt. Der befinder sig uheldigvis en bug i den. Jeg troede ikke den fejlede noget, fordi den virkede godt nok her i April hvor tælleren blev aktiveret, men så pludselig her da vi skiftede til en ny måned, gik den helt ned.. Nu er den begyndt i istedet for at tælle IP'er kun for i dag at tælle alle i hele tabellen. Og jeg kan ikke finde ud af/forstå hvorfor, så håber virkelig du kan hjælpe!!! Mange mange mange tak :o)
if ($dato_check) { mysql_query("INSERT INTO Total_today_counter (ip, time, dato, tid, sti) VALUES ('$ip','$time','$dato','$tid','$sti')") or die(mysql_error()); } } else { mysql_query("INSERT INTO Total_today_counter (ip, time, dato, tid, sti) VALUES ('$ip','$time','$dato','$tid','$sti')") or die(mysql_error()); }
$dateformat = sprintf('%s', $dato); $query = sprintf('SELECT * FROM Total_today_counter WHERE dato>=\'%s\'', $dateformat); $foresp = mysql_query($query) or die(mysql_error());
$counter_unik = mysql_num_rows($foresp);
$total_counter_unik = $counter_unik + 0; // Hvor tælleren starter med at tælle fra
echo "<i>$total_counter_unik</i>";
?>
Eftersom det er delen med at tælle som fejler, så må fejlen jo ligge der går jeg ud fra. Der er nemlig ikke nogle problemer med registreringen. Ip'en bliver kun talt 1 gang pr. døgn, præcis som den skal...
Den virker desværre fint.... Du har derimod designet databasen forkert ;) Du siger WHERE dato >= '%s' - hvor %s så er sprintf( '%s', $dato ) - som for øvrigt er helt overflødigt, %s kunne lige så godt være $dato - Men $dato er en dato med formatet 01. May - 2005. Rent sammenligningsmæssigt er '01. May - 2005' mindre end '02. April - 2005' - For at sortere korrekt på et datofelt skal det enten være i et format som f.eks. 2005-05-01 eller et MySQL DATE felt, TIMESTAMP eller et UNIX timestamp... Jeg vil foreslå dig at lave din database om (tilføje et nyt felt) til en af dem, og så skrive et lille script der laver dine eksisterende datoer om til det korrekte format, og derefter droppe det gamle felt.
Altså skal jeg bare lave datoen om fra 1- May - 2005 til 2005-05-01 og så vil det virke? Eller er det nødvendigt med TIMESTAMP i databasen lige meget hvad?
Hmm det lader desværre ikke til at virke. Hvis jeg har en række i tabellen som ser sådan her ud: 2005-06-01 og en anden som ser sådan her ud: 2005-05-01.. Så tæller den begge 2, selvom det jo faktisk kun er den ene som er i dag.. Altså en fejl så det ikke virker?
Det lader til at jeg slet ikke behøver at ændre datoen alligevel, men at skrive: dato=\'%s\' i stedet for dato>=\'%s\' er nok. Kan det virkelig passe? Det håber jeg :D
Ja det kan jeg se. Men også rigtig nok de så ikke kan sorteres, men det gør heller ikke helt så meget. Så længe den tæller rigtigt, dvs. kun dags dato, så er jeg tilfreds :D Og det lader til at virke.
Jeg har lige et tillægs spørgsmål, hvis det er i orden? Hvordan kan jeg bruge str_replace eller hvad den nu hedder.. Jeg vil gerne have skiftet "May" inde i databasen ud med "Maj" på dansk.. Til dette formål bruger jeg denne kode:
Så kan du skrive $dato = convertMonth(date("d. F Y")); og få datoen på dansk. Alle de steder på din side, hvor du udskriver en dato. Evt. inkludere funktionen med require.
Tak for hjælpen til Jer begge. Jeg har valgt at bruge coderdk's simple metode, og den virker. Jeg har ikke testet din (Endnu) bjarne003..
Mvh. Lasse Jensen
Synes godt om
Ny brugerNybegynder
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.