Licznik oparty o MySQL


(kostek135) #1
<?

require_once "maincore.php";

$k = 1;

$visit = USER_IP;

$check = dbquery("SELECT * FROM ".$db_prefix."counter ORDER BY id");

if (dbrows($check) > 0) {

while($checked = dbarray($check)) {

echo $checked['counter']."
";

if ($checked['counter'] = $visit) $k = 0;

}

}


if ($k = 1)

$insert = dbquery("INSERT INTO ".$db_prefix."counter (counter) VALUES ('$visit')");


?>

Planowałem napisanie licznika unikalnych odwiedzin w oparciu o SQL. Problem w tym, że mimo po znalezieniu za pomocą zapytania SELECT adresu IP, nadal dodaje ten sam IP do bazy, za każdym odświeżeniem. Wprowadziłem też testowo:

echo $checked['counter']."
";

Ma to służyć zobaczeniu czy wpisy w ogóle są dodawane rekordy i dobrze dobrany został SELECT. Do tej pory wszystko działa, więc błąd jest gdzieś po tym. Czyli:

if ($checked['counter'] = $visit) $k = 0;

powinno zostać zmienione z 1 na 0, jeśli raz odnajdzie taki sam adres w bazie (przerzuconej do tablicy asocjacyjnej). W przeciwnym razie powinna zostać 1 i dalszy INSERT powinien zostać wykonany bezproblemowo, czyli dodać adres którego brakuje. Ponieważ skrypt jest oparty o core z php-fusion to :

USER_IP - to samo o $_SERVER['REMOTE_ADDR'] - czyli pobieranie adresu IP.

(athei) #2

Nie analizowałem tego co napisałeś, ale kilka rzeczy rzuca się w oczy.

Przypisujesz czy porównujesz?

if ($checked['counter'] = $visit) $k = 0; -> if ($checked['counter'] == $visit) $k = 0; 

if ($k = 1) -> if ($k == 1)

http://www.php.net/manual/pl/language.o ... arison.php


(kostek135) #3

Porównuje... żal, oczywiście przecież w warunkach nie ma co przypisywać, tylko sprawdzać czy zgadza się ze stanem faktycznym, ehh. Dzięki.