Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] licznik odwiedzin - dobrze napisany?
dwwa
post 11.10.2011, 11:57:36
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 14.09.2011

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


napisałem prosty licznik odwiedzin oparty o bazę danych mysql, ale nie wiem czy to optymalne rozwiązanie i dobrze napisane... chodzi mi o licznik unikalnych odwiedzin. Na razie sprawdzam tylko ip, ale zaraz dopiszę jeszcze sprawdzanie ciastka.
  1. // counter
  2. function counter() {
  3. $ip = $_SERVER['REMOTE_ADDR'];
  4. $check_ip_query = mysql_query("SELECT `ip` FROM `counter` WHERE `ip` = '$ip'");
  5. if (mysql_num_rows($check_ip_query) == 0) {
  6. mysql_query("INSERT INTO `counter` VALUES (null, '$ip')");
  7. }
  8. $counter = mysql_num_rows(mysql_query("SELECT `id` FROM `counter`"));
  9. return $counter;
  10. }

dobrze to jest napisane? działać działa
Go to the top of the page
+Quote Post
nospor
post 11.10.2011, 12:09:54
Post #2





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




Do sprawdzania liczby rekordów służy COUNT w mysql a nie pobieranie wszystkiego do php i dopiero tam liczenie ile się pobrało - strasznie nieoptymalne.


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

"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
dwwa
post 11.10.2011, 12:17:22
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 14.09.2011

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


ale chodzi mi o samo rozwiązanie tego licznika, że oparty on jest o bazę

robię statystyki dla strony, dopisałem ilość unikalnych wizyt dziennie, tygodniowo i miesięcznie, co o tym sądzicie?
  1. function counter($value) {
  2.  
  3. switch($value) {
  4. case 'all':
  5. $counter = mysql_num_rows(mysql_query("SELECT `id` FROM `counter`"));
  6. break;
  7. case 'day':
  8. $day = date('Y-m-d H:i:s', time()-1440*60); // 24 hours
  9. $counter = mysql_num_rows(mysql_query("SELECT * FROM `counter` WHERE `date` > '$day'"));
  10. break;
  11. case 'week':
  12. $week = date('Y-m-d H:i:s', time()-10080*60); // 7 days
  13. $counter = mysql_num_rows(mysql_query("SELECT * FROM `counter` WHERE `date` > '$week'"));
  14. break;
  15. case 'mounth':
  16. $mounth = date('Y-m-d H:i:s', time()-43200*60); // 1 mounth
  17. $counter = mysql_num_rows(mysql_query("SELECT * FROM `counter` WHERE `date` > '$mounth'"));
  18. break;
  19. }
  20.  
  21. $ip = $_SERVER['REMOTE_ADDR'];
  22. $date = date('Y-m-d H:i:s', time());
  23. $check_ip_query = mysql_query("SELECT `ip` FROM `counter` WHERE `ip` = '$ip'");
  24. if (mysql_num_rows($check_ip_query) == 0) {
  25. mysql_query("INSERT INTO `counter` VALUES (null, '$ip', '$date')");
  26. }
  27. return $counter;
  28. }

wyświetlam tak:
  1. echo counter('value');


Ten post edytował dwwa 11.10.2011, 12:19:47
Go to the top of the page
+Quote Post
nospor
post 11.10.2011, 12:20:08
Post #4





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




Kurcze, pytasz się o ty czy jest to optymalne rozwiązanie i czy jest dobrze napisane, to ci odpowiadam że nie jest. Na co ty, że nie takiej odpowiedzi oczekujesz :/

No to dobrze: jest to super napisane, w życiu nie widziałem nic lepszego, chętnie odkupię od ciebie ten skrypt za 2 tys euro.


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

"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
dwwa
post 11.10.2011, 12:29:21
Post #5





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 14.09.2011

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


ok, poprawiłem na COUNT. Teraz będzie dobrze?
  1. function counter($value) {
  2.  
  3. switch($value) {
  4. case 'all':
  5. $counter = mysql_query("SELECT COUNT(`id`) FROM `counter`");
  6. break;
  7. case 'day':
  8. $day = date('Y-m-d H:i:s', time()-1440*60); // 24 hours
  9. $counter = mysql_query("SELECT COUNT(`id`) FROM `counter` WHERE `date` > '$day'");
  10. break;
  11. case 'week':
  12. $week = date('Y-m-d H:i:s', time()-10080*60); // 7 days
  13. $counter = mysql_query("SELECT COUNT(`id`) FROM `counter` WHERE `date` > '$week'");
  14. break;
  15. case 'mounth':
  16. $mounth = date('Y-m-d H:i:s', time()-43200*60); // 1 mounth
  17. $counter = mysql_query("SELECT COUNT(`id`) FROM `counter` WHERE `date` > '$mounth'");
  18. break;
  19. }
  20.  
  21. $ip = $_SERVER['REMOTE_ADDR'];
  22. $date = date('Y-m-d H:i:s', time());
  23. $check_ip_query = mysql_query("SELECT `ip` FROM `counter` WHERE `ip` = '$ip'");
  24.  
  25. if (mysql_num_rows($check_ip_query) == 0) {
  26. mysql_query("INSERT INTO `counter` VALUES (null, '$ip', '$date')");
  27. }
  28.  
  29. $counter = mysql_fetch_row($counter);
  30. $counter = $counter[0];
  31. return $counter;
  32.  
  33. }


Ten post edytował dwwa 11.10.2011, 12:30:54
Go to the top of the page
+Quote Post
nospor
post 11.10.2011, 12:33:50
Post #6





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




Najpierw zliczasz, potem dodajesz. Wynik będziesz miał o jeden nieaktualny.

Jak ktoś już się pojawił miesiąc temu, to nawet jeśli dzisiaj wszedł, to już jako dzisiaj nie zostanie zliczony - no chyba, że jest to celowe.A, to jest celowe, bo to nie jest licznik online, a licznik odwiedzin smile.gif
Powód edycji: [nospor]:


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

"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
dwwa
post 11.10.2011, 12:41:35
Post #7





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 14.09.2011

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


czyli mam wszystko w miarę dobrze teraz?
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: 2.05.2025 - 05:34