Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> licznik
kalinowski
post
Post #1





Grupa: Zablokowani
Postów: 199
Pomógł: 0
Dołączył: 4.05.2003
Skąd: Tarnowskie Góry

Ostrzeżenie: (10%)
X----


napisalem sobie prosty licznik odwiedzin ktory wyglada tak:
[php:1:538d098489]<?php //licznik oparty na plikach tekstowych (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
if (!(file_exists("licznik.txt"))) {
$plik = fopen ("licznik.txt", "w+");
fputs ($plik, "-");
fclose ($plik);
}
$ile = filesize ("licznik.txt");
$plik = fopen ("licznik.txt", "a");
flock ($plik, 2);
fputs ($plik, "-");
flock ($plik, 3);
fclose ($plik);
print "Licznik odwiedzin: <b>$ile</B><br><i>(od 20.07.2003)</I>";
?>
[/php:1:538d098489]

jakzrobic aby licznik ten nie dzialal na odswierzanie
Go to the top of the page
+Quote Post
zulus
post
Post #2





Grupa: Zarejestrowani
Postów: 225
Pomógł: 18
Dołączył: 30.06.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


użyj cookies
Go to the top of the page
+Quote Post
Omega
post
Post #3





Grupa: Zarejestrowani
Postów: 273
Pomógł: 0
Dołączył: 5.05.2003
Skąd: Mazury

Ostrzeżenie: (0%)
-----


Stwórz oddzielny plik, licznikip.txt i zapisuj do niego datę oraz IP. Następnie przy każdym odświerzaniu sprawdzaj czy już dzisiaj przypadkiem nie było takiego IP.

np.:
plik licznikip.txt
Kod
64534563 // znacznik czasu unixa

246.54.233.5

246.54.654.87


dalej...

[php:1:375e2cef56]<?php
$data = file("licznikip.txt");
if ($data[0] > time()+(60*60*24)) {
fopen("licznikip.txt", "w");
}
$plik = implode(" " file("licznikip.txt"));
if ( eregi("$ip", $plik)) {
//tutaj kod licznika jeżeli danego ip nie było
} else {
echo "sory ale już dzisiaj tu byłeś...";
}
?>[/php:1:375e2cef56]
Myślę że to powinno działać, chociaż nie testowałem... (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
GeoS
post
Post #4





Grupa: Zarejestrowani
Postów: 602
Pomógł: 0
Dołączył: --
Skąd: W - WA -> GRO

Ostrzeżenie: (0%)
-----


Uzyc sesji (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Kinool
post
Post #5





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

Ostrzeżenie: (0%)
-----


hmm cookie jest chyba najprostrszym i najlepszym rozwiazaniem bo:

1. w przypadku dynamicznego IP ktos kto obladal strone zostanie zaliczony potem ktos inny moze miec te IP i co?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) nie zostanie zaliczony
2. niektre kompy sa w sieci lokalne z wyjsciem na net tylko z jednego kompa (udostepnianie polaczenia) i kazdy z tych kompow na zewnatrz ma takie same IP wiec nawet jesli w takiej sieci jest 100 kompow i kazdy z nich bedze wchodzil na strone to zaliczony zostanie tylko jeden.

3. Niekotry wchodza na strone kilkakrotnie np, 2, 3, 10 razy dzienni i to jest wizyta danego usera (co innego jest nabijanie licznika przez odswierzanie)

przydatnosc ciasteczka do sporzycia mozna ustawic np na 15-20 minut (mozna powiedziec ze tyle mniejwiecej osoba siedzi sobie na stronie i cos przeglada)

jezeli po godzinie wejdzie na strone to zostanie zaliczona ale jezeli w cigu tych 15-20 minut bedzie chodzila po stronie to niebedzie zaliczana wiec nie bedzie sztucznych nabic licznika
Go to the top of the page
+Quote Post
kalinowski
post
Post #6





Grupa: Zablokowani
Postów: 199
Pomógł: 0
Dołączył: 4.05.2003
Skąd: Tarnowskie Góry

Ostrzeżenie: (10%)
X----


Cytat
hmm cookie jest chyba najprostrszym i najlepszym rozwiazaniem bo:

1. w przypadku dynamicznego IP ktos kto obladal strone zostanie zaliczony potem ktos inny moze miec te IP i co?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) nie zostanie zaliczony
2. niektre kompy sa w sieci lokalne z wyjsciem na net tylko z jednego kompa (udostepnianie polaczenia) i kazdy z tych kompow na zewnatrz ma takie same IP wiec nawet jesli w takiej sieci jest 100 kompow i kazdy z nich bedze wchodzil na strone to zaliczony zostanie tylko jeden.

3. Niekotry wchodza na strone kilkakrotnie np, 2, 3, 10 razy dzienni i to jest wizyta danego usera (co innego jest nabijanie licznika przez odswierzanie)

przydatnosc ciasteczka do sporzycia mozna ustawic np na 15-20  minut (mozna powiedziec ze tyle mniejwiecej osoba siedzi sobie na stronie i cos przeglada)

jezeli po godzinie wejdzie na strone to zostanie zaliczona ale jezeli w cigu tych 15-20 minut bedzie chodzila po stronie to niebedzie zaliczana wiec nie bedzie sztucznych nabic licznika


moze jakis przyklad z cookie
Go to the top of the page
+Quote Post
Kinool
post
Post #7





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

Ostrzeżenie: (0%)
-----


ja mam zrobione tak:

kod pliku do liczenia:
[php:1:d099b041d8]<?php

$fp=fopen("./coun/licznik.txt","r");
flock($fp,1);
$count=fgets($fp,20);
flock($fp,3);
fclose($fp);


if($odwiedziny!="tak") { // to jest sprawdzenie czy cooki jest na dysku klienta

$fw=fopen("./coun/licznik.txt","w");
flock($fw,2);
$count=$count+1;
fputs($fw,$count);
flock($fw,3);
fclose($fw);
}

echo ("Ilosc odwiedzin<br> od 14.07.2003: $count");


?>[/php:1:d099b041d8]


a na glownej stronie dajesz cos takiego
[php:1:d099b041d8]<?php

setcookie("odwiedziny",tak,time()+600);

?>[/php:1:d099b041d8]

600 = 10 minut

acha i pamietaj zeby ciasteczko wpisac na samym poczatku przed <head>
Go to the top of the page
+Quote Post
kalinowski
post
Post #8





Grupa: Zablokowani
Postów: 199
Pomógł: 0
Dołączył: 4.05.2003
Skąd: Tarnowskie Góry

Ostrzeżenie: (10%)
X----


Cytat
ja mam zrobione tak:

kod pliku do liczenia:
[php:1:b7da8b3d2f]<?php

   $fp=fopen("./coun/licznik.txt","r");
   flock($fp,1);  
   $count=fgets($fp,20);
   flock($fp,3);
   fclose($fp);


  if($odwiedziny!="tak") { // to jest sprawdzenie czy cooki jest na dysku klienta
     
   $fw=fopen("./coun/licznik.txt","w");
   flock($fw,2);
   $count=$count+1;
   fputs($fw,$count);
   flock($fw,3);
   fclose($fw);
}
 
   echo ("Ilosc odwiedzin<br> od 14.07.2003: $count");


?>[/php:1:b7da8b3d2f]


a na glownej stronie dajesz cos takiego
[php:1:b7da8b3d2f]<?php

setcookie("odwiedziny",tak,time()+600);

?>[/php:1:b7da8b3d2f]

600 = 10 minut

acha i pamietaj zeby ciasteczko wpisac na samym poczatku przed <head>


nie dziala tak jak ma bo jak odswierzam to i tak powieksza sie liczba na liczniku
Go to the top of the page
+Quote Post
spenalzo
post
Post #9





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


1. Przez przesady z cytowaniem.
2. Zastosuj tablice globalne $_COOKIE.
Go to the top of the page
+Quote Post
kalinowski
post
Post #10





Grupa: Zablokowani
Postów: 199
Pomógł: 0
Dołączył: 4.05.2003
Skąd: Tarnowskie Góry

Ostrzeżenie: (10%)
X----


Cytat
1. Przez przesady z cytowaniem.
2. Zastosuj tablice globalne $_COOKIE.


moze jakas podpowiedz
Go to the top of the page
+Quote Post
Omega
post
Post #11





Grupa: Zarejestrowani
Postów: 273
Pomógł: 0
Dołączył: 5.05.2003
Skąd: Mazury

Ostrzeżenie: (0%)
-----


Muwię zrób na plikach z IP... Tak ja pisałem wcześniej, na pewno będzie działać... Do tak prostego skryptu pliki są lepszym rozwiązaniem...
Go to the top of the page
+Quote Post
spenalzo
post
Post #12





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Cytat
Cytat
2. Zastosuj tablice globalne $_COOKIE.

moze jakas podpowiedz

Zamiast odwoływać się do zmiennej zapisanej w ciastku poprzez $odwiedziny odwołaj się poprzez $HTTP_COOKIE_VARS["odwiedziny"]

Omega: a co jeżeli więcej osób korzysta z jednego ip, np. w małej sieci? Poza tym IP w Polsce często jest dynamicznie przydzielane, więc może się zdarzyć, że np. następnego dnia ktoś całkowicie mi obcy będzie chciał zagłosować, a nie bęzie mogł bo ma takie samo IP. I po trzecie - do Mozilli jest dodatek (chyba się proctor zwie), który umożliwia zmianę numeru IP - też odpada. Nie ma rozwiązania idealnego, ale ja proponuję:
1. sprawdzić czy użtkownik może zapisywać ciastka
2a. jeżeli tak to może głosować
2b. jeżeli nie to nie może
itd
Go to the top of the page
+Quote Post
Bakus
post
Post #13


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

Ostrzeżenie: (0%)
-----


A nie można zrobić logowania użytkowników...
W bazie przechowujesz np. nazwę usera, hasło i inne potrzebne Ci dane i datę ostatniego głosowania...
Jest to chyba najskuteczniejsze rozwiązanie...
Go to the top of the page
+Quote Post
dragonballpj
post
Post #14





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 11.06.2002

Ostrzeżenie: (0%)
-----


Kod
<?

# Database server to connect to

$dbhost  =    "localhost";

# Database to use

$db  =    "mysql";

# Database username

$dbuser  =    "root";

# Database password

$dbpasswd    =    "krasnal";

# Table to use

$table  =    "counter";



mysql_connect("$dbhost","$dbuser","$dbpasswd")

    or die("Unable to connect to SQL server!");

@mysql_select_db("$db")

    or die("Unable to select database!");



if(!$name) { $name = "default"; }



$query = mysql_query("select * from $table where name="$name"");

while ($row  =  mysql_fetch_array($query)) {

  $start = $row[start];

  $count = $row[count];

}



if(!$count) {

    mysql_query("insert into $table values (current_date()+0,"1","$name")");

    $count = "1";

}



print("$count");

if($_COOKIE['glosowales']==1){



}else{

setcookie("glosowales", "1", time()+3600*24);



$count++;

mysql_query("update $table set count="$count" where name="$name"");



}

?>

[sql:1:cf27b94039]CREATE TABLE counter (
START date default NULL,
count int(20) unsigned default NULL,
name char(255) NOT NULL default '',
PRIMARY KEY (name)
) TYPE=MyISAM;
[/sql:1:cf27b94039]
Go to the top of the page
+Quote Post
Bakus
post
Post #15


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

Ostrzeżenie: (0%)
-----


@dragonballpj: Zmień znaczniki [CODE] na [php]
Go to the top of the page
+Quote Post
cipojsza
post
Post #16





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 4.01.2004
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Cytat
A nie można zrobić logowania użytkowników...
W bazie przechowujesz np. nazwę usera, hasło i inne potrzebne Ci dane i datę ostatniego głosowania...
Jest to chyba najskuteczniejsze rozwiązanie...

Tylko jeszcze musisz zmusi uzytkownikow do logowania, biorac pod uwage przypadkowych userow, raczej nie zda to egzaminu. (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
cipojsza
post
Post #17





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 4.01.2004
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


kalinowski byc moze uzyles tego kodu w funkcji (tak jak ja), wtedy musisz pamietac o przekazaniu zmiennej ciasteczka => $odwiedziny do wnetrza funkcji, teraz mi dziala na zwykłych cookies bez zadnych tablic (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Mam teraz takie pytanie, w zwiazku z tym iz rozpocząłem prace nad wlasnym licznikiem i sa one zaawansowane,
mam problem jednak robiac projekt "admina" tych statystyk,
potzrebuje wygenerowac wykresy odwiedzin w miesiącach tygodniach czy dniach, jakiej tu funkcji bym musial uzyc?
bo z grafiki to jestem zielony 8)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 03:31