Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] Licznik, analiza kodu MySQL
Forum PHP.pl > Forum > Przedszkole
DREEMus
  1. <?php
  2. // stary kod ...
  3. ?>


Streszczając chodzi o to, że licznik dodaje do 3, i potem dopiero wyświetla info "Już tutaj byłeś". Analizowałem kod parę razy, ale dla mnie wygląda dobrze, zmęczony trochę jestem (wiadomo - sobota), ale chyba jeszcze myślę biggrin.gif

W każdym razie, czy ktoś z Was widzi gdzieś tu błąd questionmark.gif
I generalnie nie widzę błędu :/ ale gdzieś być musi!

PS. Doszedłem do wniosku, że wartość licznika, policzę "countem" w SQL z tabeli z IP'kami ...


Wersja 2 - działająca biggrin.gif
  1. <?php
  2. function licznik ($adres) {
  3.    $dbWynik = mysql_query ('SELECT COUNT(adres) AS `ip` FROM `licznik` WHERE `adres` = "' . $adres . '"')
  4.        or die ('<p>Błąd podczas sprawdzania adresu IP</p>');
  5.    $row = mysql_fetch_assoc ($dbWynik);
  6.    if ($row['ip'] == 0) {
  7.        $dbWynik = mysql_query ('SELECT COUNT(id) AS `ile` FROM `licznik`')
  8.            or die ('<p>Błąd przy liczeniu rekordów ...</p>');
  9.        $row = mysql_fetch_assoc ($dbWynik);
  10.        echo $row['ile'] . '. Pierwszy raz :)';
  11.        $dbDodajAdres = mysql_query ('INSERT INTO `licznik` (`id`, `adres`) VALUES (NULL, "' . $adres . '");')
  12.            or die ('<p>Błąd podczas dodawania adresu do bazy ...</p>');
  13.            } else {
  14.                $dbWynik = mysql_query ('SELECT COUNT(id) AS `ile` FROM `licznik`')
  15.                    or die ('<p>Błąd przy liczeniu rekordów ...</p>');
  16.                $row = mysql_fetch_assoc ($dbWynik);
  17.                echo $row['ile'] . '. Już tutaj byłeś :)';
  18.                }
  19.    }
  20. ?>


Aha, IP trzymam, bo sobie statystykę z nich zrobię smile.gif
nospor
Masz tu 3 selecty. Na dobrą sprawę można to załatwić jednym. W tym jednym wylicz ilosc wszystkich i ilosc dla danego adresu.

hint: uzyj IF
DREEMus
po optymalizacji ...
  1. <?php
  2. function licznik ($adres) {
  3.    $dbWynik = mysql_query ('SELECT COUNT( id ) AS `ile`, COUNT( adres ) AS `ip` FROM `licznik` WHERE `adres` = "' . $adres . '"')
  4.        or die ('<p>Błąd podczas sprawdzania adresu IP</p>');
  5.    $row = mysql_fetch_assoc ($dbWynik);
  6.    if ($row['ip'] == 0) {
  7.        echo $row['ile'] . '. Pierwszy raz ... :)';
  8.        $dbDodajAdres = mysql_query ('INSERT INTO `licznik` (`id`, `adres`, `host`) VALUES (NULL, "' . $adres . '", "' . gethostbyaddr ($adres) . '");')
  9.            or die ('<p>Błąd podczas dodawania adresu do bazy ...</p>');
  10.        } else {
  11.            echo $row['ile'] . '. Już tutaj byłeś! :)';
  12.            }
  13.    }
  14. ?>


W dobrym brzmieniu będzie podziękować smile.gif
nospor
szczerze powiedziawszy nie wiem co ty tu teraz splodziles, ale napewno nie o tym ci mowilem smile.gif
DREEMus
Założenie było takie, że:

Wchodzisz na stronę, skrypt sprawdza Twoje IP czy znajduje się w bazie, jak tak wyświetla stan licznika i pokazuje komunikat "Już tutaj byłeś" (co chyba zmienię na "Witamy ponownie!" smile.gif, jeżeli nie, dodaje IP do bazy i pokazuje "Pierwszy raz ..."

Bo jak inaczej policzyć unikalne wizyty, bez bazy IP biggrin.gif

I potem, na podstawie IP mogę wykorzystać GeoIP, do swoich statystyk smile.gif
Tym samym zdobywać wiedzę smile.gif
nospor
no ok, a czemu ma sluzyc to:
COUNT( id ) AS `ile`, COUNT( adres ) AS `ip`
w jednym zapytaniu? czy oba nie count nie zwracają przypadkiem tej samej liczby?
DREEMus
Faktycznie ;D hmm, nie zwróciłem uwagi na to :/
ale wcześniej próbowałem z "AND" to wywalało mi błąd ...
żeby nie było, że nie szukałem biggrin.gif MySQL - Operatory i funkcje

Doszedłem do IF'a w MySQL smile.gif zasada jak w Excelu biggrin.gif
Zaraz naskrobie poprawnie smile.gif

"Spłodziłem" coś takiego biggrin.gif
  1. SELECT IF ('127.0.0.1' = '127.0.0.1', COUNT(id) AS 'ile', INSERT INTO `licznik` (`id`, `adres`, `host`) VALUES (NULL, '128.0.0.1', 'localhost) ) FROM `dreemus`.`licznik`

#1064 - 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 'AS 'ile', INSERT INTO `licznik` (`id`, `adres`, `host`) VALUES (NULL, ... at line 1

I generalnie nie wiem jak to poskładać ... :/

Poddaje się ... próbowałem z CASE ... chyba PHP łatwiejsze niż MySQL winksmiley.jpg
Nigdzie nie mogę znaleźć jak wstawić polecenie w jakiś warunek ... np. jeżeli tak albo nie ... zawsze błąd :/
np. IF ('123' = '123', 'tak', 'nie') i tyle w manualu sad.gif

Więc póki co zostaje przy "wersji 2" smile.gif
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.