Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z IP
Forum PHP.pl > Forum > Przedszkole
dasko
chciałem napisać skrypt sondy tak, aby z jednego adresu IP móc oddać tylko jeden głos(ip są zapisywane w pliku). niestety z tego samego ip mozna głosować kilka razy. nie wiem w czym tkwi problem...

Macie kawałek kodu:
  1. <?php
  2. $answs = array(&#092;"Tak\", \"Nie\", \"Nie wiem\");
  3. $fp = fopen(&#092;"ips.dat\", \"r\");
  4. $ips = fgets($fp, 10000);
  5. fclose($fp);
  6. $takips = explode(&#092;"|\", $ips);
  7. foreach($takips As $ip) {
  8. if($ip != $_SERVER['REMOTE_ADDR'] && $ip != &#092;"END\") {
  9. continue;
  10. }
  11. ...........kilka linijek niewaznego kodu wykonywanego gdy dojdzie do END............
  12.  
  13. if($ip == $_SERVER['REMOTE_ADDR']) {
  14. $fp = fopen(&#092;"ile.dat\", \"r\");
  15. $value = fgets($fp, 16);
  16. fclose($fp);
  17. $taken = explode(&#092;",\", $value);
  18. $suma = $taken[0] + $taken[1] + $taken[2];
  19. $vot0 = round($taken[0] / $suma * 100);
  20. $vot1 = round($taken[1] / $suma * 100);
  21. $vot2 = round($taken[2] / $suma * 100);
  22. echo &#092;"<table width=147 height=131 cellpadding=0  cellspacing=0 background=9.gif class=sonda><tr><td width=100% class=lightbut colspan=2>Wyniki>/td></tr>
  23.  <tr><td class=lightbut width=75%>&#092;" . $answs[0] . \"</td><td class=lightbut width=25%>\" . $vot0 . \"%</td></tr>
  24.  <tr><td class=lightbut width=75%>&#092;" . $answs[1] . \"</td><td class=lightbut width=25%>\" . $vot1 . \"%</td></tr>
  25.  <tr><td class=lightbut width=75%>&#092;" . $answs[2] . \"</td><td class=lightbut width=25%>\" . $vot2 . \"%</td></tr></table>\"; 
  26.  }
  27. }
  28.  
  29. ?>


a tu macie plik ips.dat, z ktorego odczytywane sa IP...

Kod
82.160.49.131|82.160.49.131|END


Chodzi o to, ze warunek $ip == $_SERVER['REMOTE_ADDR'] nie chce się spełnić i skrypt wyświetla ponownie formularz głosowania.....

Z góry dzięki za pomoc....
eS...
nie lepiej zastosować COOKIE zamiast tego ifa??
dasko
tak, mozna, ale cookie mozna usunac biggrin.gif

ale chciałbym jednak wiedziec, czemu to nie działa, moze komus sie kiedys przyda...
eS...
no tak można smile.gif ale sa jeszcze sesje, a co do twojego problemu to :)nei wiem co nawala
dr_bonzo
Anie prosciej w ten sposob:
ips.txt
Kod
82.160.49.131
82.160.49.132
123.23.44.5


  1. <?php
  2. // potem wczytujesz te ip do tablicy:
  3. $ips = file( 'ips.txt' );
  4. // usuniecie znakow konca linii z kazdego z wierszy
  5. foreach ( $ips as $ii => $vv )
  6. {
  7. $ips[ $ii ] = str_replace( &#092;"n\", '', $vv ); // jesli nie dziala \"n\" to sproboj \"rn\" itd.
  8. }
  9.  
  10. // teraz $ips zawiera tylko adresy IP
  11.  
  12. // sprawdzasz czy IP glosujacego jest w tablicy $ips:
  13.  
  14. if ( in_array( $_SERVER[ 'REMOTE_ADDR' ], $ips ) === TRUE )
  15. {
  16. // adres w pliku ips.txt == user juz glosowal
  17. }
  18. ...
  19. ?>
dasko
ok dzieki biggrin.gif

zmienilem tylko na in_array i od razu poszło biggrin.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.