Avatar billede webweaver Praktikant
01. maj 2005 - 01:05 Der 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)

Her er koden:


$ip = $_SERVER["REMOTE_ADDR"];
                    $time = time();
                    $dato = date("d. F - Y");
                    $tid = date("H:i:s");
                    $sti = $_SERVER["PHP_SELF"];
                                           
                    $db = mysql_connect("********", "*********", "*********");
                    mysql_select_db("webster_statistik", $db);
                   
                    $query = mysql_query("SELECT * FROM `Total_today_counter` WHERE `ip` LIKE '$ip' ORDER BY id DESC LIMIT 0, 1") or die(mysql_error());
                   
                    $count_ip = mysql_num_rows($query);
                   
                    while($data = mysql_fetch_array($query)){
                    $dato_check = $data["dato"] != $dato;
                    }
                   
                    if ($count_ip != 0) {
                                                               
                    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...

Endnu en gang tak for din hjælp :D

Mvh. Lasse Jensen
Avatar billede coderdk Praktikant
01. maj 2005 - 02:21 #1
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.
Avatar billede webweaver Praktikant
01. maj 2005 - 02:28 #2
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?
Avatar billede coderdk Praktikant
01. maj 2005 - 02:31 #3
Hvis du bare bruger formatet Y-m-d i stedet for d. F - Y så burde det virke. Du behøver ikke lavet typen om...
Avatar billede webweaver Praktikant
01. maj 2005 - 02:41 #4
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?
Avatar billede coderdk Praktikant
01. maj 2005 - 02:42 #5
Nej, det er jo ikke meningen at der skal ligge poster i databasen med en dato i fremtiden, vel? ;)
Avatar billede coderdk Praktikant
01. maj 2005 - 02:42 #6
Men ellers bare lav

dato>=\'%s\'

om til:

dato=\'%s\'
Avatar billede webweaver Praktikant
01. maj 2005 - 02:52 #7
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
Avatar billede coderdk Praktikant
01. maj 2005 - 03:02 #8
Hov, ja, det er korrekt, men du stadig ikke kunne sortere ;) Men ja, for at få dem fra dags dato, men du godt bare bruge =
Avatar billede webweaver Praktikant
01. maj 2005 - 03:03 #9
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.
Avatar billede webweaver Praktikant
01. maj 2005 - 03:04 #10
Jeg har givet dig dine point.. :o)
Avatar billede webweaver Praktikant
01. maj 2005 - 03:08 #11
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:

$maaned = date("F");
                    $maaned = str_replace("January", "Januar", $maaned);
                    $maaned = str_replace("February", "Februar", $maaned);
                    $maaned = str_replace("March", "Marts", $maaned);
                    $maaned = str_replace("April", "April", $maaned);
                    $maaned = str_replace("May", "Maj", $maaned);
                    $maaned = str_replace("June", "Juni", $maaned);
                    $maaned = str_replace("July", "Juli", $maaned);
                    $maaned = str_replace("August", "August", $maaned);
                    $maaned = str_replace("September", "September", $maaned);
                    $maaned = str_replace("October", "Oktober", $maaned);
                    $maaned = str_replace("November", "November", $maaned);
                    $maaned = str_replace("December", "December", $maaned);



Og koden ovenover virker også helt fint, men hvis jeg så fx skriver:

$dato = date("d. $maaned - Y");

så virker det ikke. Hvordan kan det være?

Tak for hjælpen :D
Avatar billede coderdk Praktikant
02. maj 2005 - 15:22 #12
Mja, den tror nok du vil bruge noget datohalløj, brug strftime i stedet:

    $dato = strftime( "%d. $maaned - %Y" );
Avatar billede Bjarne Novice
02. maj 2005 - 18:36 #13
strftime() virker sikkert, men jeg synes da du skal smide det i en funktion.

function convertMonth($maaned) {
$maaned = str_replace("January", "januar", $maaned);
$maaned = str_replace("February", "februar", $maaned);
$maaned = str_replace("March", "marts", $maaned);
$maaned = str_replace("April", "april", $maaned);
$maaned = str_replace("May", "maj", $maaned);
$maaned = str_replace("June", "juni", $maaned);
$maaned = str_replace("July", "juli", $maaned);
$maaned = str_replace("August", "august", $maaned);
$maaned = str_replace("September", "september", $maaned);
$maaned = str_replace("October", "oktober", $maaned);
$maaned = str_replace("November", "november", $maaned);
$maaned = str_replace("December", "december", $maaned);

return $maaned;

}

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.
Avatar billede webweaver Praktikant
03. maj 2005 - 09:20 #14
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
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