magikern Skrevet 3. november 2003 Del Skrevet 3. november 2003 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
Torbjørn Skrevet 3. november 2003 Del Skrevet 3. november 2003 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
magikern Skrevet 3. november 2003 Forfatter Del Skrevet 3. november 2003 det jeg tenkte er å få en teller som ikke oppdateres ved refresh, sånn i første omgang trenger jeg ikke å vise noe info om de besøkende. som det er nå legger den bare til count + 1 på count, uansett om det er refresh eller om det faktisk er en ny person inne på sia... Lenke til kommentar
Torbjørn Skrevet 3. november 2003 Del Skrevet 3. november 2003 det går an å bruke cookies eller ip for dette, ingen av dem er feilsikre. hvis du logger alt, er det lett i etterkant å filtrere ut hit med samme ip Lenke til kommentar
magikern Skrevet 4. november 2003 Forfatter Del Skrevet 4. november 2003 (endret) 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 4. november 2003 av magikern Lenke til kommentar
Torbjørn Skrevet 4. november 2003 Del Skrevet 4. november 2003 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
magikern Skrevet 4. november 2003 Forfatter Del Skrevet 4. november 2003 funka fett det!! da er det bare det at jeg får en feilmld på denne også; $totalresult = mysql_db_query($database, "select count(*) as antall_hit,max(tid) as sist_besok,* from http_log group by ip"); <-- linja som liksom skal ta ut resultatet... Lenke til kommentar
Torbjørn Skrevet 4. november 2003 Del Skrevet 4. november 2003 prøv med max(tidspunkt) istedet for max(tid), hvis du brukte tabelldefinisjonen over. Lenke til kommentar
magikern Skrevet 4. november 2003 Forfatter Del Skrevet 4. november 2003 det hjalp ikke så veldig mye selvom det nok ble nærmere... feilmld: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '* from http_log group by ip' at line 1 Lenke til kommentar
Torbjørn Skrevet 4. november 2003 Del Skrevet 4. november 2003 kan du koble til mysql serveren manuelt og kjøre queryet? sjekk at alle kolonnenavn matcher det du har. Lenke til kommentar
magikern Skrevet 4. november 2003 Forfatter Del Skrevet 4. november 2003 kan du koble til mysql serveren manuelt og kjøre queryet? sjekk at alle kolonnenavn matcher det du har. jeg kan koble til med phpmyadmin og der får jeg akkurat samme feilmld, alle kolonner stemmer... Lenke til kommentar
Torbjørn Skrevet 4. november 2003 Del Skrevet 4. november 2003 select count(*) as antall_hit,max(tid) as sist_besok,http_log.* from http_log group by ip der, den godtok ikke stjerne til slutt i select-rekka, uten tabellnavn først. det gikk først derimot. snedig. Lenke til kommentar
magikern Skrevet 4. november 2003 Forfatter Del Skrevet 4. november 2003 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
Torbjørn Skrevet 4. november 2003 Del Skrevet 4. november 2003 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
magikern Skrevet 4. november 2003 Forfatter Del Skrevet 4. november 2003 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
Torbjørn Skrevet 4. november 2003 Del Skrevet 4. november 2003 select count(distinct ip) as antall from http_log burde gi antall unike iper i databasen, gjør det i min log hvertfall. Lenke til kommentar
magikern Skrevet 5. november 2003 Forfatter Del Skrevet 5. november 2003 (endret) opps moderator: slett denne Endret 5. november 2003 av magikern Lenke til kommentar
magikern Skrevet 5. november 2003 Forfatter Del Skrevet 5. november 2003 opps moderator: slett denne Lenke til kommentar
magikern Skrevet 5. november 2003 Forfatter Del Skrevet 5. november 2003 hadde vist glemt å ta bort noen variabler i query som ikke skulle være der, men nå fungerer det... takk for all hjelp... **lese mysql** Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå