Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MYSQL] Licznik, analiza kodu MySQL, Składnia MySQL !!
DREEMus
post 29.03.2009, 14:42:17
Post #1





Grupa: Zarejestrowani
Postów: 286
Pomógł: 34
Dołączył: 4.09.2008
Skąd: Wrocław

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


  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

Ten post edytował DREEMus 31.03.2009, 04:40:56


--------------------
Serwer : Acer Aspire 5050 : AMD Turion X2 2x1.9 MHz : 2x2 GB Dual : 250GB + 500 GB USB
Warsztat : Apache v2.2 : PHP v5.2 : MySQL v5.0 : phpMyAdmin v3.4 : phpDesigner v7
Go to the top of the page
+Quote Post
nospor
post 30.03.2009, 06:34:26
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
DREEMus
post 30.03.2009, 15:21:11
Post #3





Grupa: Zarejestrowani
Postów: 286
Pomógł: 34
Dołączył: 4.09.2008
Skąd: Wrocław

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


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


--------------------
Serwer : Acer Aspire 5050 : AMD Turion X2 2x1.9 MHz : 2x2 GB Dual : 250GB + 500 GB USB
Warsztat : Apache v2.2 : PHP v5.2 : MySQL v5.0 : phpMyAdmin v3.4 : phpDesigner v7
Go to the top of the page
+Quote Post
nospor
post 30.03.2009, 19:16:38
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




szczerze powiedziawszy nie wiem co ty tu teraz splodziles, ale napewno nie o tym ci mowilem smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
DREEMus
post 30.03.2009, 19:56:47
Post #5





Grupa: Zarejestrowani
Postów: 286
Pomógł: 34
Dołączył: 4.09.2008
Skąd: Wrocław

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


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

Ten post edytował DREEMus 30.03.2009, 19:58:28


--------------------
Serwer : Acer Aspire 5050 : AMD Turion X2 2x1.9 MHz : 2x2 GB Dual : 250GB + 500 GB USB
Warsztat : Apache v2.2 : PHP v5.2 : MySQL v5.0 : phpMyAdmin v3.4 : phpDesigner v7
Go to the top of the page
+Quote Post
nospor
post 30.03.2009, 20:00:44
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
DREEMus
post 30.03.2009, 20:08:44
Post #7





Grupa: Zarejestrowani
Postów: 286
Pomógł: 34
Dołączył: 4.09.2008
Skąd: Wrocław

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


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

Ten post edytował DREEMus 1.04.2009, 17:46:46


--------------------
Serwer : Acer Aspire 5050 : AMD Turion X2 2x1.9 MHz : 2x2 GB Dual : 250GB + 500 GB USB
Warsztat : Apache v2.2 : PHP v5.2 : MySQL v5.0 : phpMyAdmin v3.4 : phpDesigner v7
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 7.07.2025 - 01:44