Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem licznik na mysql nie odporny na odświeżanie
Forum PHP.pl > Forum > Gotowe rozwiązania
jarod20
Witam!!
Mam problem z licznikiem odwiedzin a mianowicie, nie jest odporny na odświeżanie strony, i to troche dziwne gdyż wysyłam cookie zeby tak nie było sad.gif. Wiec prosze o zerkniecie w ten kod i napisanie mi gdzie robi błąd

plik stats.php
[php:1:fd160373a4]<?php
<?php

include("connect.inc");


function stats() {
{
$wynik = mysql_query ("SELECT id FROM stats ;");
$liczba = mysql_num_rows($wynik);
}
return $liczba;
}

function wstaw_stats($data, $czas, $przegladarka, $system, $ip, $host) {

$query = "SELECT * FROM stats ";
$wynik = mysql_query($query);

$query = "INSERT INTO stats (id, data, czas, przegladarka, system, ip, host) VALUES ('', '$data', '$czas', '$przegladarka', '$system', '$ip', '$host');";

$wynik = mysql_query($query);
}

$TryCookie=$HTTP_COOKIE_VARS["licznik"];
if(isset($TryCookie))
{

$wszystko=stats();
print"Jeste&para;&nbsp<b> $wszystko</b>&nbsposob&plusmn; odwiedzaj&plusmn;c&plusmn; tę stronę";

} else {

$data = date("Y-m-d");
$czas = date("H:i:s");
$browser=$_SERVER["HTTP_USER_AGENT"];
$ip=$_SERVER["REMOTE_ADDR"];
$host=gethostbyaddr($ip);

if(eregi("msie",$browser) || eregi("compatible",$browser)) { $przegladarka="MS Internet Explorer"; }
elseif(eregi("mozilla",$browser) && !eregi("compatible",$browser) || eregi("communicator",$browser)) { $przegladarka="mozilla"; }
elseif(eregi("opera",$browser)) { $przegladarka="opera"; }
elseif(eregi("lynx",$browser)) { $przegladarka="lynx"; }
elseif(eregi("links",$browser)) { $przegladarka="links"; }
elseif(eregi("mosaic",$browser)) { $przegladarka="mosaic"; }
else { $przegladarka="inna"; }

if(eregi("win",$browser) || !eregi("linux",$browser)) { $system="Windows"; }
elseif(eregi("linux",$browser)) { $system="Linux"; }
elseif(eregi("mac",$browser)) { $system="Macintosh"; }
elseif(eregi("sunos",$browser)) { $system="SunOs"; }
elseif(eregi("irix",$browser)) { $system="IRIX"; }
elseif(eregi("amiga",$browser)) { $system="Amiga"; }
elseif(eregi("os/2",$browser)) { $system="OS/2"; }
else { $system="inne"; }

wstaw_stats($data, $czas, $przegladarka, $system, $ip, $host);

$wszystko=stats();
print"Jeste&para;&nbsp<b> $wszystko</b>&nbsposob&plusmn; odwiedzaj&plusmn;c&plusmn; tę stronę";

}
?>
?>

?>[/php:1:fd160373a4]

a w piku top.php ktory wywolywany jest na kazdej podstronie znajduje się:
[php:1:fd160373a4]<?php
<?php
ob_start();
setcookie("licznik","2", time()+3600*6);



?>[/php:1:fd160373a4]
Pomóżcie bo naprawde nie wiem co robie żle
rmn
a sporbuj tak?:
[php:1:c7de900c35]<?php

include("connect.inc");


function stats() {
{
$wynik = mysql_query ("SELECT id FROM stats ;");
$liczba = mysql_num_rows($wynik);
}
return $liczba;
}

function wstaw_stats($data, $czas, $przegladarka, $system, $ip, $host) {

$query = "SELECT * FROM stats ";
$wynik = mysql_query($query);

$query = "INSERT INTO stats (id, data, czas, przegladarka, system, ip, host) VALUES
('', '$data', '$czas', '$przegladarka', '$system', '$ip', '$host');";

$wynik = mysql_query($query);
}

//tutaj jest zmiana. poprzednia wersja tej instrukcji sila rzeczy inicjalizuje zmienna (ewentualnie z 'pusta' wartoscia) wiec isset zawsze zwroci prawde. W ten sposob powinno dzialac:)
if(isset($HTTP_COOKIE_VARS["licznik"]))
{

$wszystko=stats();
print"Jeste&para;&nbsp<b> $wszystko</b>&nbsposob&plusmn; odwiedzaj&plusmn;c&plusmn;
tę stronę";

} else {

$data = date("Y-m-d");
$czas = date("H:i:s");
$browser=$_SERVER["HTTP_USER_AGENT"];
$ip=$_SERVER["REMOTE_ADDR"];
$host=gethostbyaddr($ip);

if(eregi("msie",$browser) || eregi("compatible",$browser)) { $przegladarka="MS
Internet Explorer"; }
elseif(eregi("mozilla",$browser) && !eregi("compatible",$browser) ||
eregi("communicator",$browser)) { $przegladarka="mozilla"; }
elseif(eregi("opera",$browser)) { $przegladarka="opera"; }
elseif(eregi("lynx",$browser)) { $przegladarka="lynx"; }
elseif(eregi("links",$browser)) { $przegladarka="links"; }
elseif(eregi("mosaic",$browser)) { $przegladarka="mosaic"; }
else { $przegladarka="inna"; }

if(eregi("win",$browser) || !eregi("linux",$browser)) { $system="Windows"; }
elseif(eregi("linux",$browser)) { $system="Linux"; }
elseif(eregi("mac",$browser)) { $system="Macintosh"; }
elseif(eregi("sunos",$browser)) { $system="SunOs"; }
elseif(eregi("irix",$browser)) { $system="IRIX"; }
elseif(eregi("amiga",$browser)) { $system="Amiga"; }
elseif(eregi("os/2",$browser)) { $system="OS/2"; }
else { $system="inne"; }

wstaw_stats($data, $czas, $przegladarka, $system, $ip, $host);

$wszystko=stats();
print"Jeste&para;&nbsp<b> $wszystko</b>&nbsposob&plusmn; odwiedzaj&plusmn;c&plusmn;
tę stronę";

}
?>[/php:1:c7de900c35]
jarod20
niestety nadal dodaje odwiedzjacych i zminilem czas cookie na 12 godzin Ja mam wrazenie ze te moje cookie nie dziala sad.gif mimo ze w systemie cookie sie zapisuje :?:
rmn
a sprawdz wartosc

output_buffering w php.ini

powinines wpradze dostawac waringi jesli to wina tego ale zobacz...
i sprawdz co Ci wyrzuci
Kod
print_r($HTTP_COOKIE_VARS);

aha i napisz jaka masz wersje php:)
jarod20
Nie mam pojecia mialem output_buffering na off (nie maialem zadnych warningow) zmieniłem na ON i nadal przy odswiezaniu dodaje kolejny wpis do bazy grrr sad.gif. Może jeszcze masz do zaproponowania jestem otwarty na propozycje smile.gif bo siedze juz 2 dni i walcze i nie mam pojecia, a i jeszcze jedno u mojego kumpla ten sam skrypt dziala poprawnie :?:
party
Masz register_globals off czy on ?
rmn
Sprawdz jeszcze to:
zamiast
[php:1:66ff59c510]<?php
ob_start();
setcookie("licznik","2", time()+3600*6);
?>[/php:1:66ff59c510]
zrob
[php:1:66ff59c510]<?php
ob_start();
if(!isset($HTTP_COOKIE_VARS["licznik"]) setcookie("licznik","2", time()+3600*6);
?>[/php:1:66ff59c510]

co z tym [php:1:66ff59c510]<?php
print_r($HTTP_COOKIE_VARS);
?>[/php:1:66ff59c510]questionmark.gif
jarod20
wstawiłem kod ale chyba nie tam gdzie trzeba (po if gdzie ciastko sprawdza) ale nic mi nie zwrociło no to wstawiłem na sam koniec skryptu i tez nic nie pokazało. Szczerze to ja jestem już zielony i to napewno nie od bakania smile.gif. A php Version 4.3.4 (Krasnal Serv 2.6).
jarod20
teraz to mi wywalil:
Parse error: parse error, unexpected T_STRING in c:usrkrasnalwwwwesttop.php on line 3

a i print_r($HTTP_COOKIE_VARS); zwrocił Array ( [licznik] => 1 ) bo zminiłem liczbe cookie z 2 na 1 wiec chyba dobrze zwraca.?

a i ustawilem jak bylo czyli na 2 wiec zwrociło Array ( [licznik] => 2 )
wiec teraz wogole nie mam pojecia o co chodzi. Moze Microshit 2k3 juz mi sie skonczył
rmn
Zrobiłem literówke:) Teraz powinno byc ok:)

[php:1:0c385dd10b]<?php
ob_start();
if(!isset($HTTP_COOKIE_VARS["licznik"])) setcookie("licznik","2", time()+3600*6);
?>[/php:1:0c385dd10b]


To gdzie w koncu wstawiłeś to print_r?
jarod20
no to teraz tylko nie spadnij z krzesła prosze. Dalej odswieza i zwieksza wynik odwiedzin rolleyes.gif rozumiesz cos z tego bo ja wogole moze ja powinienem szukac przyczyny gdzie indziej, a jeszcze jedno cookie musi byc tak samo wywolywane ja header czy session przed calym dokumentem?
print_r wstawiłem na sam poczatek dokumentu po wywołaniu ciastak i wskazalo array => 1 dla ciastka z wartoscia 1 i =>2 dla ciastka z wartoscia 2.
jarod20
Cytat
Masz register_globals off czy on ?

mam na on

a i zmieniłem na off i ten sam skutek.

Ale jaja chyba ostrego cwieka zabiłem ? smile.gif (wybaczcie musze sie smiac zeby nei plakać)


To może poprosze kogoś zebymi pomógł zmodyfikować ten skrypt zeby działa na sesjach a nie na cookie? :?
ludwik
Na samej górze pliku z licznikiem piszę
[php:1:d5e962b717]<?php
session_start();
?>
[/php:1:d5e962b717]
A potem w miejscu gdzie mam się pojawić licznik:

[php:1:d5e962b717]<?php
if(!$dodaj)
{
session_register("dodaj");
$dodaj = "1";
$conn=mysql_connect("","","");
mysql_select_db("test", $conn);
$query = "UPDATE licznik SET wartosc=wartosc+1";
$wynik = mysql_query($query);

$zapytanie = "SELECT * FROM licznik WHERE id = 1";
$wykonaj = mysql_query($zapytanie);
while($wiersz = mysql_fetch_array($wykonaj))
{
print "Stronę odwiedzono już:<b>".$wiersz['wartosc']."</B> razy";
}
}
else
{
$conn=mysql_connect("","","");
mysql_select_db("test", $conn);
$zapytanie = "SELECT * FROM licznik WHERE id = 1";
$wykonaj = mysql_query($zapytanie);
while($wiersz = mysql_fetch_array($wykonaj))
{
print "Stronę już:<b>".$wiersz['wartosc']."</B> razy";
}
}

?>
[/php:1:d5e962b717]

Jest to oparte na sesjach i u mnie chodzi. Spróbuj przerobić do swoich potrzeb. Albo przynajmniej popatrz o co w tym chodzi i zrób swój licznik na sesjach.

Jak będę miał trochę czasu to pomogę przerobić. No ale napewno nie dziś i nie jutro.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.