Gå til innhold

Anbefalte innlegg

Okey, nå skal vi forklare dere nye i mysql og php litt hvordan man kan lage en enkel teller. Denne tellern skal bare kunne telle unike besøkede på siden men kan utvikles til mye mer med litt logisk tanke.

 

Steg 1:

 

Oppsett av MySQL tabellen vi skal ha. Det vi trenger da er altså en unik identifikasjon av raden og ip. Dette er alt man trenger for en kjapp og simpel teller.

 

Den unike "id" blir da noe man kaller primaery key (hovednøkkelen, kan bare inholde unike inlegg) og så skal vi ha den til å automatisk øke tallet inni seg for hvert inlegg vi legger inn (for hver ip vi legger inn.). Denne raden skal ha typen "INT" som er da bare heltall og skal være på lengde 20 siffer. Altså det er plass til 99999999999999999999 brukere på siden din før den må økes! Det er ikke så mange som får så mange unike på en side så dette holder lenge!

 

Raden vi kaller IP er da raden IP adressen til den besøkede skal ligge i. Typen denne raden skal ha er "VarChar" med 255 som maks lengde. Dette gjør at vi kan ha tall og bokstaver til maks 255 tegn

 

Her er koden for å lage tabellen (jeg kaller tabellen my_counter)

CREATE TABLE `my_counter` (
 `id` INT( 20 ) NOT NULL AUTO_INCREMENT ,
 `ip` VARCHAR( 255 ) NOT NULL ,
 PRIMARY KEY ( `id` )
);

 

Så var det å begynne med php.

 

Det første vi må gjøre er å sjekke om den besøkede har allerede fått ipen sin inlagt i databasen fra før. Dette gjøres ved å hente alle inlegga som har IP som matcher hans. Ipen hans henter vi med å bruke getenv('REMOTE_ADDR') eller $_SERVER['REMOTE_ADDR']. Dette gjøres som dette:

<?php
 mysql_connect("localhost", "root", "");
 mysql_select_db("phpmyadmin");
# Først må vi hente ipen hans til en variabel
$ip = getenv('REMOTE_ADDR');
# Så bygger vi opp spørringa.
$sql = "SELECT count(*) FROM my_counter WHERE ip='$ip' LIMIT 1";
# Spørringa over vil se noe som dette ut:
# SELECT count(*) FROM my_counter WHERE ip='152.123.212.133' LIMIT 1"
# Så må vi sende spørringa ut til databasen med å bruke query funksjonen!
$ans = mysql_query($sql); # Send spørringa til databasen!
# Nå skal vi se hvor mange rader den returnerte. Om den returnerte 0 så er ikke ipen hans allrede registrert i databasen
if(mysql_result($ans, 0, 0) < 1) {
  # Om den kommer hit så er antall rader returnert mindre en 1 altså ipen hans er ikke i databasen og da må vi ta å sette den inn!
  $sql = "INSERT INTO my_counter(`ip`) VALUES('$ip')";
  mysql_query($sql);
  # Der vvar den satt inn forhåpentligvis uten feil.
}
# Da må vi hente antall rader vi kan få utav alle ipene som er satt inn i datbasen dette gjørees med å velge count på alle..
$sql = "SELECT count(*) FROM my_counter";
$ans = mysql_query($sql);
$count = mysql_result($ans, 0, 0);
# Da har vi hentet alt vi trenger og nå kan vi bare echoe resultatet
echo "Siden har hatt totalt $count besøkede!";
?>

 

Og dette var alt man trengte for en enkel MySQL IP Teller!

 

Jeg har ikke testet dette men jeg har sett over det jeg har skrevet her og skal funke i teorien. (Jeg har testa før men ikke den koden jeg har skrevet nå) Si ifra om noen feil oppstår!

 

Ønsker dere noen fler tutorials ? Si ifra.

 

Mvh Thorleif Jacobsen

Lenke til kommentar
Videoannonse
Annonse

Spørsmålet er da, om man egentlig vil telle hvor mange unike iper som har besøkt siden, eller om man heller vil begrense dette, ved å legge til klokkeslett.

 

Feks. 10.0.0.1 besøker deg klokke 16:40. Da inkrementeres telleren en gang. Hvis ipen 10.0.0.1 besøker deg igjen, må det ha gått minst en time, før den inkrementeres igjen.

Lenke til kommentar

Jepp det er enkelt med adding av timestamp. Deretter om du då vil ha unike og totalt besøkede må du GROUP BY ip så filtrerer den ut alle doble iper og du får bare tilbake som svar UNIKE burkere. mens uten den får du alle besøkede ..

 

Men jeg lagde denne for nybegynnere i mysql, ikke vits å la dem stå å tenke med timestamps og sånt nå..

 

Mvh Thorleif Jacobsen

Lenke til kommentar
Ønsker dere noen fler tutorials ? Si ifra.

 

Mvh Thorleif Jacobsen

5779044[/snapback]

 

Veldig bra forklart.. selv er jeg ikke så flink til åforklare. men her er min versjon.. for litt videre kommende..

 

btw skulle hatt en tutorials om session, aldri vært borti det enda.

 

<?PHP

/*
Tabel:
CREATE TABLE `teller` (
`ip` VARCHAR( 20 ) NOT NULL ,
`teller` INT NOT NULL DEFAULT '0',
`forste` TIMESTAMP NOT NULL ,
`siste` TIMESTAMP NOT NULL ,
UNIQUE (
`ip`
)
)

*/

// denne queryen går utifra at du alt har kontakt med databasen når denne blir kjørt.


// her lager vi insettningen i DB. Hvis den ikke finnes fra før så lagrer vi IP samt datoen for første besøk
// hvis den finnes fra før lager oppdaterer vi den som finnes, plusser på 1 i antall besøk og noterer datoen han er på nå i  "siste".
$query = 'INSERT INTO teller set ip = "'.$_SERVER['REMOTE_ADDR'].'", forste = now(), siste = now(), teller = 1 ON DUPLICATE KEY UPDATE teller = teller +1, siste = now()';

// sender queryen.
mysql_query( $query);


// da er telleren ferdig, her er noen funksjoner.

// denne funksjonen henter ut unike hvor mange besøk du har hatt.
function teller_uniqe(){
$query = 'SELECT count(1) as antall FROM teller LIMIT 1';
$resultat = mysql_query($query);
$data = mysql_fetch_assoc($resultat);

return $data['antall'];
}

// denne heter ut antall besøk totalt... sender du en med en IP vil den bare telle antall besøk den IP'n har hatt
function teller_uniqe( $ip = ""){
$query = 'SELECT sum(teller) as antall FROM teller '.($ip?' WHERE ip = "'.$ip.'"':'').' LIMIT 1';
$resultat = mysql_query($query);
$data = mysql_fetch_assoc($resultat);

return $data['antall'];
}


?>

 

( hvis det er noen feil i koden er det for at dere skal ha noe å gjør på ;) )

Lenke til kommentar

Ja er ganske mye feil, du koder på norsk! :( Prøv å gjør en vane ut av å skrive på engelsk. Det er viktig om du skal klare deg med arbeid som PHP Koder, selv jobber jeg avertil med svensker på prosjekt, danske.. Trur du dem skjønner noe om vi skal lage ett toll script? $tull = "Tullen er just nu uppa!"; .. hva faen får jeg som normann utav det? lager en "TUllete variabel"?

 

Engelsk er viktig i php. les min forrige post i forumet

Lenke til kommentar
Ja er ganske mye feil, du koder på norsk! :( Prøv å gjør en vane ut av å skrive på engelsk. Det er viktig om du skal klare deg med arbeid som PHP Koder, selv jobber jeg avertil med svensker på prosjekt, danske.. Trur du dem skjønner noe om vi skal lage ett toll script? $tull = "Tullen er just nu uppa!"; .. hva faen får jeg som normann utav det? lager en "TUllete variabel"?

 

Engelsk er viktig i php. les min forrige post i forumet

5779298[/snapback]

 

*lerlitt* med andre ord skriver jeg navnene på norsk så er det å regne med feil ? :D

 

om jeg ville ha gitt funksjonen mine navn som "jhudEfd" og "jhDEFCdd" så hadde det fortsatt ikke vært feil :) eller kanskje det står i PHP dokumentasjoen som jeg ikke har lest ?

 

Function names follow the same rules as other labels in PHP. A valid function name starts with a letter or underscore, followed by any number of letters, numbers, or underscores. As a regular expression, it would be expressed thus: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.

 

Står ikke noe om at de må være på engelsk ?

 

ha en fortsatt fin dag, og takk for en liten latter :)

Lenke til kommentar
*Allerede sur på*

 

Du skjønner hva jeg mener, så ikke gidd å start engang. Kod i engelsk så får du større jobber. Større utvidningspotensiale og fler å få hjelp fra. Enkelt. Bare barnsligt å kverulere sånn på den måten du prøver på!

5779367[/snapback]

 

Neida, ikke meningen at du skulle bli sur :) Heler ikke meningen å kverulere.

 

Når du sier:

Ja er ganske mye feil, du koder på norsk!

 

Så er det vel opp til meg om jeg vil kode på norsk eller ikke? Du kan ikke si det er feil.

 

Men som du sier, la oss ikke gå videre på dette. Du mener at det er feil, jeg mener at det ikke er det.

Lenke til kommentar

En siste kommentar. Prøv å bli verdenskjent med din kode så skal jeg med min, du ryker ut ellerede i "NM" siden de i VM kommiteen ikke skjønner en shit.. Dysleksi så ikke klag om jeg skriver for mykkje feil! :)

 

Og nei er jo ingen VM eller NM som jeg vet om .. BAre eksempel :) hehe

 

*trøtt vurdere å sove, eller skrive en simpel guestbook guide...

Lenke til kommentar
En siste kommentar. Prøv å bli verdenskjent med din kode så skal jeg med min, du ryker ut ellerede i "NM" siden de i VM kommiteen ikke skjønner en shit.. Dysleksi så ikke klag om jeg skriver for mykkje feil! :)

 

Og nei er jo ingen VM eller NM som jeg vet om .. BAre eksempel :) hehe

 

*trøtt vurdere å sove, eller skrive en simpel guestbook guide...

5779412[/snapback]

 

Gjestebok høres best ut :) du kan se her: https://www.diskusjon.no/index.php?showtopic=550523

 

joda har dysleksi selv, så ikke noe problem der.

Endret av trondes
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...