Yritin kehitella jutun jolla tarkistaa onko ip-osoite asetettu epahuomioitavaksi kavijalaskurissa.
Mutta ilmeisesti en ymmarra taysin tuon breakin toimivuutta, kun se ei tuossa toimi.
<?php /* luetaan tiedostosta ei-huomioitavat ip:t. Jos kayttajan ip loytyy listasta asetetaan $lasketaanko muuttuja falseksi. ip:t tiedostossa muodossa: xxxxx|iposoite xxxxx|iposoite */ $ip = $_SERVER['REMOTE_ADDR']; $bannatut= file("ban.txt"); for ($i=0; $i < count($bannatut); $i++) { $osa=explode("|",$bannatut[$i]); $ignoreip=$osa[1]; if ($ip==$ignoreip) { $lasketaanko=false; break 1; } } //jos $lasketaanko muuttuja ei ole false jatketaan. if ($lasketaanko !== false) { echo ("ip:ta ei loydy listasta, joten kaynti lasketaan"); } else { echo("ip loytyi listasta, joten kayntia ei lasketa"); } ?>
ban.txt nayttaa talta.
Erkki|69.242.175.101 mina|69.242.175.173 Jaska|69.242.134.173
Jos listassa on pelkasataan oma ip:ni tai se on viimeisena niin toimii kylla, mutta kun se on tuollain keskella listaa niin ei toimi kuten haluaisin.
Komento break poistuu silmukasta, joten sitä olet käyttänyt ihan oikein. Mutta ongelma taitaa olla siinä, että et ole antanut aloitusarvoa $lasketaanko-muuttujalle. Siksi se ei milloinkaan ole tosi. Minä muuttaisin nimeksi $listalla ja panisin arvoksi 1, jos IP on listalla. Muuttujan oletusarvo on 0. Silloin ehdoksi riittää if ($listalla) { ... } else { ... }
.
En ole täysin varma, mutta koeta muuttaa vertailussa tuo !== muotoon != (mielestäni !== ei ole mitään kunnon kieltä...) ja laita koodin alkuun $lasketaanko = true, sillä itse en ainakaan muista mikä on alustamattoman muuttujan oletusarvo.
sqwiik kirjoitti:
En ole täysin varma, mutta koeta muuttaa vertailussa tuo !== muotoon != (mielestäni !== ei ole mitään kunnon kieltä...) ja laita koodin alkuun $lasketaanko = true, sillä itse en ainakaan muista mikä on alustamattoman muuttujan oletusarvo.
!== on myös PHP:tä, ero !=:n ja !==:n välillä on se että !== erottelee nollan ja falsen. Sama juttu == ja ===.
Sharph kirjoitti:
!== on myös PHP:tä, ero !=:n ja !==:n välillä on se että !== erottelee nollan ja falsen. Sama juttu == ja ===.
Ero !=:n ja !==:n välillä on se, että === ottaa huomioon muuttujan tyypin. Eli:
Muokkailin tuota Laaksosen ohjeitten mukaan ja ei vielakaan toimi. Olen vaikka mita yrittanyt mutta en ole saanut toimimaan. Vaikka ip olisi listlla niin tuo sanoo ettei olisi.
<?php /* luetaan tiedostosta ei-huomioitavat ip:t. Jos kayttajan ip loytyy listasta asetetaan $listalla muuttuja 1:ksi. ip:t tiedostossa muodossa: xxxxx|iposoite xxxxx|iposoite */ $ip = $_SERVER['REMOTE_ADDR']; $bannatut= file("ban.txt"); $listalla= 0; for ($i=0; $i < count($bannatut); $i++) { $osa=explode("|",$bannatut[$i]); if ($osa[1] == $ip) { $listalla= 1; break; } } if ($listalla) echo "ip loytyi listalta, joten kayntia ei lasketa"; else echo "ip:ta ei loydy listalta, joten kaynti lasketaan"; ?>
Mitenkä olisi rtrim($osa[1]) == $ip vertailu?
Nyt toimii.
Oikein hienoa.
Mietin tuota kylla yhdessa valissa mutta en tiennyt funktiota niin enpa sitten kokeillut.
Kiitos kaikille auttajille.
Aihe on jo aika vanha, joten et voi enää vastata siihen.