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". ;)
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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"?!
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());
28. marts 2005 - 18:48
#3
Ser på det senere. Foreløbig tak.
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)
28. marts 2005 - 22:18
#5
Tjah, du kan jo starte med at oprette en tabel der indeholder felterne id (auto increcement) og dato
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?
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"?
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
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?!
28. marts 2005 - 22:59
#10
Det har jeg gjort.....det med DATETIME
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...
28. marts 2005 - 23:01
#12
Må lige ha lidt mere info. Er stadig ret grøn på området. ;)
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...
28. marts 2005 - 23:06
#14
Yup, den indsætter. Med en 0000-00-00 00:00:00 hver gang.
28. marts 2005 - 23:08
#15
Prøv: mysql_query("INSERT INTO tabel (dato) VALUES(NOW())") or die(mysql_error()); i stedet for
28. marts 2005 - 23:09
#16
Så kom der dato og tid på.
28. marts 2005 - 23:16
#17
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()");
28. marts 2005 - 23:28
#19
Tror sku det virker. Rettede den ene dato til i går.
28. marts 2005 - 23:32
#20
Så mangler der "online besøgende" "unikke besøgende" tror jeg selv jeg leger med efter skoletimen her.
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.
28. marts 2005 - 23:46
#22
tilføj id også bare for en ordens skyld - måske det bliver nyttigt?! Igen som auto increcement
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 ");
28. marts 2005 - 23:58
#24
Hmm, det giver mig lidt problemer at oprette den tabel. jeg får fejl hele tiden.
29. marts 2005 - 00:00
#25
Må have lidt info at kunne hjælpe. Hvilken fejl, hvor?
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.
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......;)
29. marts 2005 - 00:12
#28
Done
29. marts 2005 - 00:13
#29
Hmm, der burde jo stå 2 så....
29. marts 2005 - 00:16
#30
Og du er sikker på at det bliver kørt fra den side jeg går ind på?
29. marts 2005 - 00:17
#31
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?
29. marts 2005 - 00:19
#33
Begge to bliver indsat.
29. marts 2005 - 00:20
#34
Hvordan udskriver du så antallet?
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?
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 :)
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.
29. marts 2005 - 00:36
#38
Der skulle gerne gå 5 minutter så sletter den personen igen...
29. marts 2005 - 00:37
#39
har rettet til 1 min. men det lader ikke til at den sletter.
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?
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() ");
29. marts 2005 - 00:53
#42
Det er jo perfekt. :o) Tror det virker nu.
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.
29. marts 2005 - 01:00
#44
Jeg smutter i seng med det samme, skal op kl. 5.45 Jeg accepterer dit svar i morgen.
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...
Vi tilbyder markedets bedste kurser inden for webudvikling