Gå til innhold

mysql hitcounter


Anbefalte innlegg

bruker dette:

if (!session_is_registered("counted")){
   $totalresult = mysql_db_query($database, "UPDATE counter SET count=(count + 1) WHERE countid=1");
   if(!($totalresult)) {
      array_push($countarr,"Hit Counter Update Error");
   }else{
       session_register("counted");
   }
}  

 

db:

+.........+............+
| count | countID |
+.........+............+

 

hva gjør jeg egentlig for å få til ip sjekking på den counter'n sånn at f.eks samme ip bare blir registrert etter på forhånd angitt tid...

 

begynte med mysql for kort stund siden, men php kan jeg det meste i... så en forklaring på det db relaterte er egenlig det jeg trenger...

Lenke til kommentar
Videoannonse
Annonse

jeg skjønner ikke hva du spør etter, men du vil kanskje telle hvor mange ganger en ip er inne på siden din?

 

hvis du vil ha en komplett log, vill jeg brukt en tabell med følgende kolonner:

 

create table http_log(
ip varchar(15),
tidspunkt datetime,
user_agent varchar(128),
side varchar(64),
referer varchar(255),
query_string(255),
id int unsigned auto_increment not null primary key);

 

Regner med du selv vet å hente ut relevante php variable for å fylle tabellen!

 

Da kan du siden grupperer ved hver ip for å få ut antall, eks:

select count(*) as antall_hit,max(tid) as sist_besok,* from http_log group by ip

Lenke til kommentar

ok så jeg prøvde sånn her:

 

if (!session_is_registered("plur")){
   $insert = mysql_db_query($database, "INSERT INTO http_log VALUES 
   ('$realip','$timestamp','$http_user_agent','$php_self','$http_referer')");
   if(!($insert)) {
      array_push($countarr,"Hit Counter Update Error -->".mysql_error());
   }else{
       session_register("plur");
   }
}  

 

og den går bare rett til feilmld med en gang...

 

jeg kjører en online sjekk til samme database fra samme fil så jeg vet at det er kontakt,

 

table er oppe og kjører, men jeg får altså ikke lagt til noe i den, så jeg antar feilen ligger i $insert query'en min...:

 

fullstendig feilmld:

 

* Hit Counter Update Error -->Column count doesn't match value count at row 1

Endret av magikern
Lenke til kommentar

du kan kun bruke "VALUES()" hvis du fyller ut alle kolonnene du har.

 

Bruker du den foreslåtte tabelldefinisjonen, så er det en "query_string" og en "id" kolonne der også, derav feilmeldingen, feil antall kolonner som du setter inn i forhold til det som er satt opp i tabellen. Du må angi hvilke kolonner som skal settes inn med verdiene du har.

 

Mysql er så krøkkete at den heller ikke forstår at id skal oppdateres automagisk i dette tilfellet her.

 

Hvorfor ikke bruke Mysql's Now() funksjon for å sette inn 'nå'-tid?

 

Jeg vil foreslå:

"INSERT INTO http_log (ip,tidspunkt,user_agent,side,referer) VALUES ('$realip',Now(),'$http_user_agent','$php_self','$http_referer')"

Lenke til kommentar

hey da funka det, men så var det å få ut noe fornuftig av dette da, prøvde:

 

while($row = mysql_fetch_array($totalresult)){
   $hit = stripslashes($row['antall_hit']);
   if($hit == 1) {
       array_push($countarr,"$hit bruker totalt");
   } else {
       array_push($countarr,"$hit brukere totalt");
   }
}

 

array_push($countarr bruker jeg for å kjøre det inn i et array som printer ut i en liste med et funksjonskall,

 

det jeg får ut av denne while loop'en er

 

<ul>

<li>1</li>

<li>16</li>

</li>

 

hvor 16 var antallet linjer i table da jeg testa forrige gang,

 

for det første hva er det 1 tallet for noe...

 

for det andre så lurer jeg på hvordan jeg skal få sjekket sånn at hver $row med lik ip bare blir talt 1 gang, evt 1 gang per avgitt tid...

 

det beste hadde kanskje vært å sjekket ip når man legger til ny rad i table, hvis det finnes en rad med samme ip fra før blir heller bare f.eks et felt "count" på den raden endret til count + 1, så kan man jo senere bruke dette til å sjekke hvilke ip'er som forekommer oftest...

 

 

er litt trøtt nå og tror at noen av tingene jeg lurer på egentlig burde være lett å finne, men jeg ser ikke helt feilene nå...

Lenke til kommentar

når du har "group by" i SQL spørringa, kollapser du alle rader med samme IP til en...

 

Så du har sikkert 16 hit fra en ip (din egen?) og 1 hit fra en annen ip...

 

Hvis du vil telle antall hit totalt, er det bare å ta "select count(*)"

 

Hvis du vil telle antall hit fra unike IP'er, må du ta "select count(distinct ip)"

Lenke til kommentar

fikk ikke helt til det siste der, men fant på en litt "stygg" måte som viste seg å fungere akkurat som jeg i utgangspunktet vil ha det:

 

$totalresult = mysql_db_query($database, "select count(*) as antall_hit,max(tidspunkt) as sist_besok,http_log.* from http_log group by ip"); 
if(!($totalresult)) {
    array_push($countarr, mysql_error());
}
$x = 0;
while($row = mysql_fetch_array($totalresult)){
   $x++;  
}
   if($x == 1) {
       array_push($countarr,"$x bruker totalt");
   } else {
       array_push($countarr,"$x brukere totalt");
   }

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...