Avatar billede backside Nybegynder
28. marts 2005 - 17:04 Der er 44 kommentarer og
1 løsning

PHP/MySQL tæller, igen

Er der en der kan lave mig en tæller?
Den skal vises på følgende måde:
http://backside.dk/idx.php?295641
Den includerer jeg så i et andet document. "Hits" skal være sidevisninger, ikke IP hits.
Forum indlæg hentes fra:
gh_forum - id
Nyheder hentes fra:
gh_news - id
Tips hentes fra:
gh_tips - id

Counter tables skal ligeledes ha et prefix der hedder gh_
Jeg er løbet sur i det og ønsker en komplet "pakke". ;)
Avatar billede jaw Nybegynder
28. marts 2005 - 18:33 #1
<?

$q = mysql_query("SELECT COUNT(gh_news.*) as nNews, COUNT(gh_forum.*) as nForum, COUNT(gh_tips.*) as nTips") or die(mysql_error());

while($row = mysql_fetch_array($q)) {
  echo "Antal news: " . $row['nNews'] . "<br />";
  echo "Antal forum: " . $row['nForum'] . "<br />";
  echo "Antal tips: " . $row['nTips'] . "<br />";
}

?>

Du kan jo prøve det for en starter... Hvad du vil med sidevisninger kan jeg ikke helt forstå?! Så skal du jo bare oprette en tabel der indeholder et tal der bliver 1 større hvergang en tilfældig side åbnes. Altså, scriptet skal includeres på hver side. Men det bliver jo meget hurtigt en million "besøgende"?!
Avatar billede jaw Nybegynder
28. marts 2005 - 18:34 #2
Hov:

$q = mysql_query("SELECT COUNT(gh_news.*) as nNews, COUNT(gh_forum.*) as nForum, COUNT(gh_tips.*) as nTips FROM gh_forum, gh_news, gh_tips") or die(mysql_error());
Avatar billede backside Nybegynder
28. marts 2005 - 18:48 #3
Ser på det senere. Foreløbig tak.
Avatar billede backside Nybegynder
28. marts 2005 - 22:09 #4
Ok, jeg kunne ikke lige få det til at virke. Den sagde fejl omkring *)

Men jeg har selv leget lidt med det.
$antalnews = mysql_query("SELECT id FROM gh_news");
$ialtnews = mysql_num_rows($antalnews);

Den har jeg så for både forum, tips og news.
Det virker fint. Og det står som det skal i min fine tabel.

Kan du klare det andet for mig?
(Hits dag, hits total og online)
Avatar billede jaw Nybegynder
28. marts 2005 - 22:18 #5
Tjah, du kan jo starte med at oprette en tabel der indeholder felterne id (auto increcement) og dato
Avatar billede backside Nybegynder
28. marts 2005 - 22:48 #6
Ja, det gav lidt problemer.
Jeg forstår det ikke, jeg får syntax fejl hver gang jeg vil oprette en tabel.
Men jeg klarede det på den hårde måde. ;)

Hvad nu?
Avatar billede jaw Nybegynder
28. marts 2005 - 22:50 #7
Ok, og du vil så have at ALLE sidevisninger bliver talt? Så hvis jeg besøgte 3 af dine sider, så skulle det tælle for 3? Og hvad hvis jeg besøger den samme side 2 gange, er det så 1 eller 2 "besøg"?
Avatar billede backside Nybegynder
28. marts 2005 - 22:55 #8
Så er det 2 besøg, altså sidevisninger.
Der kunne jo evt. tilføjes en "unikke besøgende" også.
Så vi har, sidevisninger, online, sidevisninger i alt og unikke besøgende.

De 3 andre har jeg selv fået styr på.  *stolt*  he he
Avatar billede jaw Nybegynder
28. marts 2005 - 22:58 #9
Så vil jeg lave en forespørgsel a'la:

mysql_query("INSERT INTO tabel (dato) VALUES('NOW()')") or die(mysql_error());

Måske du skal lave dato-feltet til DATETIME-type i databasen - det glemte jeg vist før?!
Avatar billede backside Nybegynder
28. marts 2005 - 22:59 #10
Det har jeg gjort.....det med DATETIME
Avatar billede jaw Nybegynder
28. marts 2005 - 23:00 #11
Ok, så kan du kalde den f.eks. visit.php og include den i dine php-sider. Bare prøv med en enkelt side i første omgang for at se om det funker...
Avatar billede backside Nybegynder
28. marts 2005 - 23:01 #12
Må lige ha lidt mere info. Er stadig ret grøn på området. ;)
Avatar billede jaw Nybegynder
28. marts 2005 - 23:02 #13
Erhm, ok. Opret visit.php med flg. indhold:

<?

//forbindelse til databasen her!
mysql_query("INSERT INTO tabel (dato) VALUES('NOW()')") or die(mysql_error());

?>

Så tager du én af dine nuværende php-sider og indsætter i toppen:

<? include("visit.php"); ?>

Besøger siden og ser om der bliver indsat noget i tabellen eller om der kommer fejl...
Avatar billede backside Nybegynder
28. marts 2005 - 23:06 #14
Yup, den indsætter.
Med en 0000-00-00 00:00:00 hver gang.
Avatar billede jaw Nybegynder
28. marts 2005 - 23:08 #15
Prøv:

mysql_query("INSERT INTO tabel (dato) VALUES(NOW())") or die(mysql_error());

i stedet for
Avatar billede backside Nybegynder
28. marts 2005 - 23:09 #16
Så kom der dato og tid på.
Avatar billede backside Nybegynder
28. marts 2005 - 23:16 #17
Avatar billede jaw Nybegynder
28. marts 2005 - 23:19 #18
Fint, så er det vel hvad du gerne vil have sker hver gang en bruger besøger én af dine sider. Altså, den skal includes i alle dine php-filer.

For at se dem der har været online i dag, burde du kunne bruge:
$q = mysql_query("SELECT id FROM test WHERE dato >= CURDATE()");
Avatar billede backside Nybegynder
28. marts 2005 - 23:28 #19
Tror sku det virker. Rettede den ene dato til i går.
Avatar billede backside Nybegynder
28. marts 2005 - 23:32 #20
Så mangler der "online besøgende"
"unikke besøgende" tror jeg selv jeg leger med efter skoletimen her.
Avatar billede jaw Nybegynder
28. marts 2005 - 23:46 #21
Ok, så skal vi have en næsten lignende tabel med dato og ip-adresse. Ip-adresse skal være unikt.
Avatar billede jaw Nybegynder
28. marts 2005 - 23:46 #22
tilføj id også bare for en ordens skyld - måske det bliver nyttigt?! Igen som auto increcement
Avatar billede jaw Nybegynder
28. marts 2005 - 23:48 #23
Og følgende script benytter jeg selv, måske du kan bruge det med en smule modifikation:

    $ip = $_SERVER['REMOTE_ADDR'];

    $q = mysql_query("
        SELECT id
        FROM tabel
        WHERE ip = '$ip'
        ");

    if(mysql_num_rows($q) == 0) {
      mysql_query("
          INSERT INTO tabel (dato, ip)
          VALUES (NOW(),'$ip')
      ");
    } else {
      mysql_query("
          UPDATE tabel
          SET `dato` = NOW(),
          WHERE ip='$ip'
      ");
    }
   
    mysql_query("
        DELETE FROM tabel
        WHERE date_add(time,interval 5 MINUTE) < NOW()
    ");

    $antal_online = mysql_query("
        SELECT COUNT(*)
        FROM tabel
    ");
Avatar billede backside Nybegynder
28. marts 2005 - 23:58 #24
Hmm, det giver mig lidt problemer at oprette den tabel. jeg får fejl hele tiden.
Avatar billede jaw Nybegynder
29. marts 2005 - 00:00 #25
Må have lidt info at kunne hjælpe. Hvilken fejl, hvor?
Avatar billede backside Nybegynder
29. marts 2005 - 00:01 #26
Den var der nu. Problemet var at tilføje et felt.
Damn, jeg har meget at lære endnu.
Avatar billede backside Nybegynder
29. marts 2005 - 00:11 #27
Hvis jeg så kan lokke dig til at gå ind på siden så jeg kan se om det virker......;)
Avatar billede jaw Nybegynder
29. marts 2005 - 00:12 #28
Done
Avatar billede backside Nybegynder
29. marts 2005 - 00:13 #29
Hmm, der burde jo stå 2 så....
Avatar billede jaw Nybegynder
29. marts 2005 - 00:16 #30
Og du er sikker på at det bliver kørt fra den side jeg går ind på?
Avatar billede backside Nybegynder
29. marts 2005 - 00:17 #31
Avatar billede jaw Nybegynder
29. marts 2005 - 00:18 #32
Ja, noget går der galt - hvad bliver der indsat i din database? Din egen eller min ip-adresse?
Avatar billede backside Nybegynder
29. marts 2005 - 00:19 #33
Begge to bliver indsat.
Avatar billede jaw Nybegynder
29. marts 2005 - 00:20 #34
Hvordan udskriver du så antallet?
Avatar billede backside Nybegynder
29. marts 2005 - 00:20 #35
Damn du er tålmodig.  *G*

Det er nok udskrivningen den er gal med, hvordan gør jeg så det?
Avatar billede jaw Nybegynder
29. marts 2005 - 00:23 #36
Hvis du har brugt mit script, så prøv at udskrive med: echo mysql_result($antal_online, 0);

Og jeg sidder her jo alligevel bare og koder lidt selv :)
Avatar billede backside Nybegynder
29. marts 2005 - 00:32 #37
Hov, nu skete der noget. :o)
Har lige haft en 3. inde og se, skal lige se om den sletter igen.
Avatar billede jaw Nybegynder
29. marts 2005 - 00:36 #38
Der skulle gerne gå 5 minutter så sletter den personen igen...
Avatar billede backside Nybegynder
29. marts 2005 - 00:37 #39
har rettet til 1 min. men det lader ikke til at den sletter.
Avatar billede backside Nybegynder
29. marts 2005 - 00:40 #40
Har rettet til dette:

$ip = $_SERVER['REMOTE_ADDR'];

    $q = mysql_query("
        SELECT id
        FROM gh_online
        WHERE ip = '$ip'
        ");

    if(mysql_num_rows($q) == 0) {
      mysql_query("
          INSERT INTO gh_online (dato, ip)
          VALUES (NOW(),'$ip')
      ");
    } else {
      mysql_query("
          UPDATE gh_online
          SET `dato` = NOW(),
          WHERE ip='$ip'
      ");
    }
   
    mysql_query("
        DELETE FROM gh_online
        WHERE date_add(time,interval 1 MINUTE) < NOW()
    ");

    $antal_online = mysql_query("
        SELECT COUNT(*)
        FROM gh_online
    ");

Og jeg har felterne id, ip og dato.
Er der noget jeg har misset?
Avatar billede jaw Nybegynder
29. marts 2005 - 00:49 #41
Åh ja, min fejl! Den her:

    mysql_query("
        DELETE FROM gh_online
        WHERE date_add(time,interval 1 MINUTE) < NOW()
    ");

skal vist lige rettes til:

    mysql_query("
        DELETE FROM gh_online
        WHERE date_add(dato,interval 1 MINUTE) < NOW()
    ");
Avatar billede backside Nybegynder
29. marts 2005 - 00:53 #42
Det er jo perfekt. :o)
Tror det virker nu.
Avatar billede backside Nybegynder
29. marts 2005 - 00:59 #43
Smid et svar. Du får lige 50 bønner oven i hatten, de er velfortjent.
Mange tak for hjælpen, jeg fik lært en del.
Avatar billede backside Nybegynder
29. marts 2005 - 01:00 #44
Jeg smutter i seng med det samme, skal op kl. 5.45
Jeg accepterer dit svar i morgen.
Avatar billede jaw Nybegynder
29. marts 2005 - 11:38 #45
Godmorgen, jeg gik også i seng med det samme :)

Men det glæder mig da at du har lært noget, og selv tak...
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