Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php + mysql] licznik.... czemu nie działa ? [BŁĘDY POPRAWIONE - DZIAŁA]
Forum PHP.pl > Forum > PHP
Ermes
JUŻ NIE AKTUALNE POPRAWNY KOD NA DOLE STRONY

Chciałbym żeby ktoś to obejrzał i spróbował mi wyjaśnić czemu to nie chce działac :/
Ten skrypt miał zliczać odwiedziny ludzi, ale dodatkowo miał zapamiętywać po ip kto odwiedził stronę i nie zliczac jego dalszych poczynań (np. odświerzanie strony co minuta) przez następne 24h (żeby nie wychodziły kosmiczne liczby odwiedzin) no i jak wsadziłem to na serwer okazło się że pokazuje tylko 1 i nic wiecej... a kilku lidzi odwiedziło stronę
powiem jeszcze, żeby nie było niejasności, że skrypt poprawnie stworzył bazę i tabele, ale już nie chciał odawać niczego tak jak by mu się coś urwało przy insertownaiu... sad.gif HELP!
  1. <?
  2. //****************** połączenie z bazą
  3. $sql_connect = mysql_connect(localhost, 'admin', 'x*x*x*x*x');
  4. if ($sql_connect) {
  5. $sql_select = mysql_query('USE odwiedziny');
  6. if (!$sql_select) {
  7. //***************** jeśli nie ma takiej bazy to niech ją utworzy  
  8. $sql_create = mysql_query('CREATE DATABASE odwiedziny');
  9. $sql_select = mysql_query('USE odwiedziny');
  10. //***************** zaznaczenie bazy, stworzenie tabel i wpisanie rekordu z 0 w li
    czniki
  11. $sql_create_table = mysql_query('CREATE TABLE liczniki (id char(1) NOT NULL, ilosc char(6), PRIMARY KEY(id))');
  12. $sql_create_table = mysql_query('CREATE TABLE ip_time (id char(1) NOT NULL, ip char(15), time char(10), PRIMARY KEY(id))');
  13. $sql_query = mysql_query('INSERT INTO liczniki VALUES (1, 0)');
  14. $sql_query = mysql_query('INSERT INTO liczniki VALUES (2, 0)');
  15. }
  16. }
  17. //***************** odczytanie wszystkich ip jakie otwierały stronę i zliczenie il
    e ich było
  18. $sql_query = mysql_query('SELECT ip FROM ip_time');
  19. $num_rows = mysql_num_rows($sql_query);
  20. //****************** 1 sytuacja
  21. //***************** jeśli nie było jeszcze żadnego to ustawnienie licznika na 1 i 
    zapisanie w bazie 
  22. //***************** dodatkowo zapisanie numeru id, godziny i ip który otworzył str
    onę
  23. if ($num_rows == 0) {
  24. $num_rows++;
  25. $licznik = 1;
  26. $sql_query = mysql_query('UPDATE liczniki SET ilosc=1 WHERE id=1');
  27. $ip = $_SERVER['REMOTE_ADDR'];
  28. $time = time();
  29. $sql_query = mysql_query('INSERT INTO ip_time VALUES ('.$num_rows.', '.$ip.', '.$time.'');
  30. //***************** wyświetlenie wartosci licznika
  31. echo $licznik;
  32. }
  33. //***************** 2 sytuacja
  34. //***************** jeśli było już kilka ip które otworzyły stronę to sprawdza czy
     takie ip juz nie wystapiło w bazie
  35. else {
  36. $ip = $_SERVER['REMOTE_ADDR'];
  37. $time = time();
  38. $sql_query = mysql_query('SELECT time FROM ip_time WHERE ip='.$ip.'');
  39. if ($sql_query == '') {
  40. //***************** jesli nie wystapiło za zapisuje ip godzine i numer id i zwieks
    za licznik
  41. $num_rows++;
  42. $sql_query = mysql_query('INSERT INTO ip_time VALUES ('.$num_rows.', '.$ip.', '.$time.')');
  43. $sql_query = mysql_query('SELECT ilosc FROM liczniki WHERE id=1');
  44. $licznik = mysql_fetch_assoc($sql_query);
  45. $licznik++;
  46. $sql_query = mysql_query('UPDATE liczniki SET ilosc='.$licznik.' WHERE id=1');
  47. echo $licznik;
  48. }
  49. //************** 3 sytuacja
  50. //************** jeśli jednak wystąpiło to sprawdza godzinę przi danym ip i porówn
    uje czy minęło już 24h od otwarcia strony
  51. else {
  52. $ip_time = mysql_fetch_assoc($sql_query);
  53. $ip_time['time'] = $ip_time['time']+86400;
  54. //*************** jak minęło 24h to odnawia godzinę przy ip i zwiększa licznik
  55. if ($ip_time['time'] < $time) {
  56. $num_rows++;
  57. $sql_query = mysql_query('UPDATE ip_time SET time='.$time.' WHERE ip='.$ip.'');
  58. $sql_query = mysql_query('SELECT ilosc FROM liczniki WHERE id=1');
  59. $licznik = $sql_query;
  60. $licznik++;
  61. $sql_query = mysql_query('UPDATE liczniki SET ilosc='.$licznik.' WHERE id=1');
  62. echo $licznik;
  63. }
  64. //***************** jeśli nie minęło 24h to poprostu odczytuje licznik
  65. else {
  66. $sql_query = mysql_query('SELECT ilosc FROM liczniki WHERE id=1');
  67. $licznik = mysql_fetch_assoc($sql_query);
  68. echo $licznik;
  69. }
  70. }
  71. }
  72. //****************** zamyka połączenie
  73.  mysql_close($sql_connect);
  74. ?>


z tymi komentarzami chyba da się nieco zrozumiec ?
wipo
Człowieku kto to pisał?
Chińczyk z czarnego lądu?
Ermes
jeśli ci się nie podoba to popraw, bo głównie oto mi chodzi tongue.gif
Babcia@Stefa
Cytat(wipo @ 9.02.2007, 21:00:58 ) *
Człowieku kto to pisał?
Chińczyk z czarnego lądu?


Zgadam się, troche dużo tego kodu ^^,
Jak na licznik powinno tego być mało (ja mam licznik w php, mysql w paru linijkach).

Dziękuję, Babcia@Stefa
Ermes
hm... może dodam trochę komentarza to się wam trochę rozjaśni o co w nim biega ;]

OK! już sam sobie poradziłem z paroma błedami w kodzie tongue.gif

dam tutaj teraz poprawnie działający kod jeśli ktoś bedzie chciał go użyć tongue.gif
Przypomnę skrypt zlicza odwiedziny na stronie zapamiętując kto ją odwiedził i nie zlicza ponownego wejścia na stronę z danego ip przed upływem 24 godzin.
  1. <?
  2. /* Połaczenie z bazą */
  3. $sql_connect = mysql_connect(localhost, 'admin', 'xxxxx');
  4. if ($sql_connect) {
  5. /* Sprawdza czy baza odwiedziny istnieje */
  6. $sql_select = mysql_query('USE odwiedziny');
  7. if (!$sql_select) {
  8. /* jeśli takabaza nie istnienie to ją tworzy */
  9. $sql_create = mysql_query('CREATE DATABASE odwiedziny');
  10. $sql_select = mysql_query('USE odwiedziny');
  11. /* tworzy tabele w bazie */
  12. $sql_create_table = mysql_query('CREATE TABLE liczniki (id char(1) NOT NULL, ilosc char(6), PRIMARY KEY(id))');
  13. $sql_create_table = mysql_query('CREATE TABLE ip_time (id char(1) NOT NULL, ip char(15), time char(10), PRIMARY KEY(id))');
  14. /* ustawia wartość poczatkową dla licznika = 0*/
  15. $sql_query = mysql_query('INSERT INTO liczniki VALUES (1, 0)');
  16. }
  17. }
  18. /* pobiera wszystkie ip które odwiedziły stronę i ilczy ile ich jest */
  19. $sql_query = mysql_query('SELECT ip FROM ip_time');
  20. $num_rows = mysql_num_rows($sql_query);
  21. /* jeśli jeszcze wcześnie żaden komputer nie odwiedził strony to ustawia licznik na 1 i zapisuje aktualny IP
  22. godzinę i numer id w bazie */
  23. if ($num_rows == 0) {
  24. $num_rows++;
  25. $licznik = 1;
  26. $sql_query = mysql_query('UPDATE liczniki SET ilosc="1" WHERE id="1"');
  27. $ip = $_SERVER['REMOTE_ADDR'];
  28. $time = time();
  29. /*zapisuje dane o odwiedzajacym */
  30. $sql_query = mysql_query('INSERT INTO ip_time VALUES ('.$num_rows.', "'.$ip.'", '.$time.')');
  31. /* wyświetla licznik */
  32. echo $licznik;
  33. }
  34. else {
  35. /* jesli już ktoś odwiedził stronę wcześniej to pobiera aktualne IP i czas */
  36. $ip = $_SERVER['REMOTE_ADDR'];
  37. $time = time();
  38. /* sprawdza czy to ip już wystapiło w bazie czy nie */
  39. $sql_query = mysql_query('SELECT time FROM ip_time WHERE ip="'.$ip.'"');
  40. /* jeśli nie to zapisuje informacje o nowym ip w tabeli (czas i ip)
  41. oraz zwiększa licznik o 1*/
  42. $ip_time = mysql_fetch_assoc($sql_query);
  43. if ($ip_time['time'] == '') {
  44. $num_rows++;
  45. $sql_query = mysql_query('INSERT INTO ip_time VALUES ('.$num_rows.', "'.$ip.'", '.$time.')');
  46. $sql_query = mysql_query('SELECT ilosc FROM liczniki WHERE id=1');
  47. $licznik = mysql_fetch_assoc($sql_query);
  48. $licznik['ilosc']++;
  49. $sql_query = mysql_query('UPDATE liczniki SET ilosc='.$licznik['ilosc'].' WHERE id=1');
  50. /* wypisuje stan licznika */
  51. echo $licznik['ilosc'];
  52. }
  53. else {
  54. /* jeśli jednak IP wystąpiło już w bazie to sprawdza czy od czasu odwiedziny upłyneło juz 24h czy nie */
  55. $ip_time['time'] = $ip_time['time']+86400;
  56. if ($ip_time['time'] < $time) {
  57. /* jeśli upłunęło to updatuje informacje o czasie odwiedzin w bazie i zwiększa licznik o 1*/
  58. $num_rows++;
  59. $sql_query = mysql_query('UPDATE ip_time SET time='.$time.' WHERE ip="'.$ip.'"');
  60. $sql_query = mysql_query('SELECT ilosc FROM liczniki WHERE id=1');
  61. $licznik = mysql_fetch_assoc($sql_query);
  62. $licznik['ilosc']++;
  63. $sql_query = mysql_query('UPDATE liczniki SET ilosc='.$licznik['ilosc'].' WHERE id=1');
  64. echo $licznik['ilosc'];
  65. }
  66. else {
  67. /* jeśli nie upłyneło 24h od odwiedzin poprostu odczytuje stary stan licznika */
  68. $sql_query = mysql_query('SELECT ilosc FROM liczniki WHERE id=1');
  69. $licznik = mysql_fetch_assoc($sql_query);
  70. echo $licznik['ilosc'];
  71. }
  72. }
  73. }
  74.  mysql_close($sql_connect);
  75. ?>
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.