Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Licznik odwiedzin
Forum PHP.pl > Forum > Przedszkole
redelek
Witam,

Zrobiłem sobie taki licznik odwiedzin,
  1. <?php
  2. require_once('browser.php');
  3.  
  4. $db = mysql_connect("localhost", "user","pass");
  5. mysql_select_db("licznik",$db);
  6. $wynik = mysql_query ("SELECT * FROM licznik_odw");
  7.  
  8.  
  9. for ($count = 0; $row = mysql_fetch_row ($wynik); ++$count)
  10. {}
  11.  
  12. $now = getdate();
  13. $month = $now[mon];
  14. $mday = $now[mday];
  15. $year = $now[year];
  16. $hours = $now[hours];
  17. $min = $now[minutes];
  18. $sec = $now[seconds];
  19. $id = $count++;
  20. $ip = "$REMOTE_ADDR";
  21. $br = new Browser;
  22. $sys=$br->Platform;
  23. $przeg=$br->Name.' '.$br->Version;
  24. $time = "$year-$month-$mday $hours:$min:$sec";
  25.  
  26. for ($i=0; $i < strlen($id); $i++)
  27. {
  28. $sign = substr($id, $i, 1);
  29. print("<img src=\"image/$sign.gif\" border=\"0\" alt=\"$sign\">");
  30. }
  31. //print "$id";
  32. $wynik = mysql_query ("SELECT ip FROM licznik_odw ");
  33. list($ip_db) = mysql_fetch_array($wynik);
  34. //echo "<br>".$ip_db;
  35. //echo "<br>".$ip;
  36. If ($ip == $ip_db ){
  37. echo "<br><b>IP już odnotowany :</b> ".$ip_db."";
  38. }else {
  39. $counter = "INSERT INTO licznik_odw (ID, przegladarka, IP, system, time) VALUES ('$id','$przeg','$ip','$sys','$time')";
  40. $wynik = mysql_query($counter);
  41. }
  42. ?>


Problem jest w tym , że jak ktoś się łączy to ma nadal wyświetlaną starą cyferkę dopiero jak odświeży stronę cyfra się zmienia i pojawia się komunikat że jego IP jest już w bazie. Macie może pomysł gdzie zrobiłem błąd że tak się dzieje ?

Pozdrawiam
Redelek
nospor
No ale zastanow sie przez chwile...
najpierw wyswietlasz stan licznikow a dopiero potem wkladasz. No to sie nie dziw ze stan licznikow przed wlozeniem jest inny.

ps:
  1. <?php
  2. for ($count = 0; $row = mysql_fetch_row ($wynik); ++$count)
  3. {}
  4. ?>
blinksmiley.gif a czemu to ma niby sluzyc?
redelek
Cytat(nospor @ 21.02.2008, 09:45:18 ) *
No ale zastanow sie przez chwile...
najpierw wyswietlasz stan licznikow a dopiero potem wkladasz. No to sie nie dziw ze stan licznikow przed wlozeniem jest inny.

ps:
  1. <?php
  2. for ($count = 0; $row = mysql_fetch_row ($wynik); ++$count)
  3. {}
  4. ?>
blinksmiley.gif a czemu to ma niby sluzyc?


A bo mi nie wyświetlał licznika i kolega mi podpowiedział że to powinno pomóc smile.gif
Czyli mówisz że najpierw wyświetlić dane a potem dodać czy źle Cię zrozumiałem?
nospor
Cytat
Czyli mówisz że najpierw wyświetlić dane a potem dodać
No to przeciez na odwrot! Najpierw dodac, potem wyswietlic. Mowilem przeciez: "zastanow sie przez chwile"

Jak moze wyswietlic sie cos, skoro to dodajesz dopiero po wyswietleniu?
redelek
Cytat(nospor @ 21.02.2008, 10:15:32 ) *
No to przeciez na odwrot! Najpierw dodac, potem wyswietlic. Mowilem przeciez: "zastanow sie przez chwile"

Jak moze wyswietlic sie cos, skoro to dodajesz dopiero po wyswietleniu?


Kurcze nie mogę sobie poradzić, problem chyba jest w tym moim zabezpieczeniu które ma uniemożliwić zwiększanie licznika jeśli jest ten sam IP.
Jak to wyłączę to licznik pięknie śmiga , ale za to liczny odświeżanie strony:(.

Patrzę jak sroka w gnat i nie widzę tego smile.gif rozjaśnijcie proszę


Redelek
nospor
bo źle podchodzisz do sprawdzania czy jest.

Sprawdzac masz tak:
  1. SELECT ip FROM tabela WHERE ip='twojeszukaneip'

Jesli to zapytanie zwroci ci rekord, znaczy ze ip jest juz w bazie i masz wyswietlic komunikat: JESTES
Jesli nie zwroci ci rekordu, masz wowczas dodac i wyswietlic: DODALEM CIE DO BAZY. JAK WEJDZIESZ NASTEPNYM RAZEM TO ZOBACZYSZ "JESTES"
redelek
Cytat(nospor @ 21.02.2008, 11:35:06 ) *
bo źle podchodzisz do sprawdzania czy jest.

Sprawdzac masz tak:
  1. SELECT ip FROM tabela WHERE ip='twojeszukaneip'

Jesli to zapytanie zwroci ci rekord, znaczy ze ip jest juz w bazie i masz wyswietlic komunikat: JESTES
Jesli nie zwroci ci rekordu, masz wowczas dodac i wyswietlic: DODALEM CIE DO BAZY. JAK WEJDZIESZ NASTEPNYM RAZEM TO ZOBACZYSZ "JESTES"


No to ja mam to tu
  1. <?php $wynik = mysql_query ("SELECT ip FROM licznik_odw");
  2. list($ip_db) = mysql_fetch_array($wynik);
  3. //echo "<br>".$ip_db;
  4. If ($ip == $ip_db ){
  5. echo "<br><b>IP już odnotowany :</b> ".$ip_db."";
  6. }else {
  7. $counter = "INSERT INTO licznik_odw (ID, przegladarka, IP, system, time) VALUES ('$id','$przeg','$ip','$sys','$time')";
  8. $wynik = mysql_query($counter);?>


Jeśli jest to nie zmienia , ale jeśli nie ma to też nie zwiększa cyferki dopiero za drugim razem ? źle myślę ?sad.gif
nospor
no nie. ty masz inaczej. naprawde nie widzisz roznicy miedzy moim zapytaniem a twoim? Moje pobiera maksymalnie jeden rekord i to ten rekord ktorego szukamy. Twoje leci po wszystkich rekordach i dopiero w petli sprawdza czy jest czy nie ma. Ale zle to zrobiles to masz kwiatki. A ze mi sie nie chce ci tlumaczyc na podstawie twojego zlego kodu, to podalem ci inne (lepszze) rozwiązanie smile.gif
redelek
Cytat(nospor @ 21.02.2008, 11:59:22 ) *
no nie. ty masz inaczej. naprawde nie widzisz roznicy miedzy moim zapytaniem a twoim? Moje pobiera maksymalnie jeden rekord i to ten rekord ktorego szukamy. Twoje leci po wszystkich rekordach i dopiero w petli sprawdza czy jest czy nie ma. Ale zle to zrobiles to masz kwiatki. A ze mi sie nie chce ci tlumaczyc na podstawie twojego zlego kodu, to podalem ci inne (lepszze) rozwiązanie smile.gif


Wiem , że kombinuję, ale inaczej się nie nauczę. Nie chcę gotowca , nie liczę na to. Chcę skromnej pomocy która mnie naprowadzi w moim projekcie i zakręceniu smile.gif

Poprawiłem na Twoje zapytanie hmmm ale jest to samo z czym walczę

Redelek
nospor
Cytat
Poprawiłem na Twoje zapytanie hmmm
Miej litosc... pokaz nowy kod ktory napisales...
redelek
Cytat(nospor @ 21.02.2008, 12:22:02 ) *
Miej litosc... pokaz nowy kod ktory napisales...


Wstydzę się bo będziesz krzyczała zaraz wstydnis.gif

  1. <?php
  2. $wynik = mysql_query ("select ip from licznik_odw where ip='$ip'");
  3. list($ip_db) = mysql_fetch_array($wynik);
  4. echo $ip_db;
  5. If ($ip_db == $ip ){
  6. echo "<br><b>IP już odnotowany :</b> ".$ip_db."";
  7. }else {
  8. $counter = "INSERT INTO licznik_odw (ID, przegladarka, IP, system, time) VALUES ('$id','$przeg','$ip','$sys','$time')";
  9. $wynik = mysql_query($counter);
  10. ?>
nospor
Cytat
Wstydzę się bo będziesz krzyczała zaraz
Nie taki nospor straszny jak go maluja winksmiley.jpg

No i git. Zakladam ze zmienna $ip wypelniasz wczesniej? Jesli tak to co ci teraz nie dziala?

Wyswietlaj tez ewewntualne bledy:
  1. <?php
  2. $wynik = mysql_query ("select ip from licznik_odw where ip='$ip'") or die(mysql_error());
  3. ?>

I tak z kazdym mysql_query()

edit: zmien ten kod na:
  1. <?php
  2. $wynik = mysql_query ("select ip from licznik_odw where ip='$ip'") or die(mysql_error());
  3.  
  4.  
  5. If (mysql_num_rows($wynik) > 0 ){
  6. echo "<br><b>IP już odnotowany :</b> ".$ip_db."";
  7. }else {
  8. $counter = "INSERT INTO licznik_odw (ID, przegladarka, IP, system, time) VALUES ('$id','$przeg','$ip','$sys','$time')";
  9. $wynik = mysql_query($counter) or die(mysql_error());
  10. }
  11. ?>
redelek
Całość wygląda tak i jest nadal to samo:(

  1. <?php 
  2.  
  3. require_once('browser.php');
  4.  
  5. $db = mysql_connect("localhost", "predel","niuniek2");
  6. mysql_select_db("licznik",$db);
  7. $wynik = mysql_query ("SELECT * FROM licznik_odw");
  8.  
  9.  
  10. for ($count = 1; $row = mysql_fetch_row ($wynik); ++$count)
  11. {}
  12.  
  13. $now = getdate();
  14. $month = $now[mon];
  15. $mday = $now[mday];
  16. $year = $now[year];
  17. $hours = $now[hours];
  18. $min = $now[minutes];
  19. $sec = $now[seconds];
  20. $id = $count++;
  21. $ip = "$REMOTE_ADDR";
  22. $br = new Browser;
  23. $sys=$br->Platform;
  24. $przeg=$br->Name.' '.$br->Version;
  25. $time = "$year-$month-$mday $hours:$min:$sec";
  26.  
  27. for ($i=0; $i < strlen($id); $i++)
  28. {
  29. $sign = substr($id, $i, 1);
  30. print("<img src=\"image/$sign.gif\" border=\"0\" alt=\"$sign\">");
  31. }
  32. //print "$id";
  33.  
  34. $wynik = mysql_query ("select ip from licznik_odw where ip='$ip'") or die(mysql_error());
  35.  
  36.  
  37. If (mysql_num_rows($wynik) > 0 ){
  38. echo "<br><b>IP już odnotowany :</b> ".$ip_db."";
  39. }else {
  40. $counter = "INSERT INTO licznik_odw (ID, przegladarka, IP, system, time) VALUES ('$id','$przeg','$ip','$sys','$time')";
  41. $wynik = mysql_query($counter) or die(mysql_error());
  42. }
  43. ?>
nospor
No ale te wyswietlanie tych cyferek zrob po dodaniu usera. Czyli po tym kodzie co zmieniles.
redelek
Cytat(nospor @ 21.02.2008, 12:49:24 ) *
No ale te wyswietlanie tych cyferek zrob po dodaniu usera. Czyli po tym kodzie co zmieniles.


To jest to samo sad.gif

  1. <?php
  2. $wynik = mysql_query ("select ip from licznik_odw where ip='$ip'") or die(mysql_error());
  3. If (mysql_num_rows($wynik) > 0 ){
  4. echo "<br><b>IP już odnotowany :</b> ".$ip_db."";
  5. }else {
  6. $counter = "INSERT INTO licznik_odw (ID, przegladarka, IP, system, time) VALUES ('$id','$przeg','$ip','$sys','$time')";
  7. $wynik = mysql_query($counter) or die(mysql_error());
  8.  
  9.  
  10. }
  11. for ($i=0; $i < strlen($id); $i++)
  12. {
  13. $sign = substr($id, $i, 1);
  14. print("<img src=\"image/$sign.gif\" border=\"0\" alt=\"$sign\">");
  15. }
  16. ?>
nospor
ale musisz caly kod przeniesc na dół, włącznie z zapytaniem, włącznie z pętla co sie pytalem o nia, itd.

a tak na marginesie to liczbe rekordow tez sie liczy inaczej. Ty teraz przelatujesz po wszystkich rekordach i zwiekszasz $count o 1. tak sie nie robi. nalezy wykonac zapytanie:
  1. SELECT count(*) FROM tabela

Ono zwraca liczbe rekordow. I juz. zadnych petli ani innych cudakow co u ciebie sa winksmiley.jpg
redelek
To zrobiłem tak i chyba działa, ale jeśli IP jest w bazie to wyświetla tylko napis a jak wyświetlić poprzedni stan licznika ?
  1. <?php
  2. require_once('browser.php');
  3.  
  4. $db = mysql_connect("localhost", "predel","niuniek2");
  5. mysql_select_db("licznik",$db);
  6. $wynik = mysql_query ("SELECT * FROM licznik_odw");
  7.  
  8.  
  9. for ($count = 1; $row = mysql_fetch_row ($wynik); ++$count)
  10. {}
  11.  
  12. $now = getdate();
  13. $month = $now[mon];
  14. $mday = $now[mday];
  15. $year = $now[year];
  16. $hours = $now[hours];
  17. $min = $now[minutes];
  18. $sec = $now[seconds];
  19. $id = $count++;
  20. $ip = "$REMOTE_ADDR";
  21. $br = new Browser;
  22. $sys=$br->Platform;
  23. $przeg=$br->Name.' '.$br->Version;
  24. $time = "$year-$month-$mday $hours:$min:$sec";
  25.  
  26. If (mysql_num_rows($wynik) > 0 ){
  27. echo "<br><b>IP już odnotowany :</b> ".$ip."";
  28.  
  29. }else {
  30. $counter = "INSERT INTO licznik_odw (ID, przegladarka, IP, system, time) VALUES ('$id','$przeg','$ip','$sys','$time')";
  31. $wynik = mysql_query($counter) or die(mysql_error());
  32.  
  33. for ($i=0; $i < strlen($id); $i++)
  34. {
  35. $sign = substr($id, $i, 1);
  36. print("<img src=\"image/$sign.gif\" border=\"0\" alt=\"$sign\">");
  37. }
  38. //print "$id";
  39.  
  40. $wynik = mysql_query ("select ip from licznik_odw where ip='$ip'") or die(mysql_error());
  41.  
  42.  
  43.  
  44. }
  45. ?>
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.