Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Banowanie IP.
Forum PHP.pl > Forum > PHP
Frostbourn
Dopiero zaczynam cokolwiek pisać w php. Siedze już nad tym 3 dzień, nigdzie nie mogę nic znaleźć.
Otoż mam taki skrypt shoutboxa i próbuje go zmodyfikować tak, żęby po kliknięciu w link dodawało mi adres ip autora postu do pliku zbanowanych ip (bannedips.php) i dodatkowo usuwało tego posta z pliku shouts.php. Niestety dodaje mi ip wszystkich, którzy napisali jakieś posty łącznie ze mną. Pomożecie?

Część kodu, który próbuje zmienić:
  1. <?php
  2. $shouts = file("shouts.php");
  3. $shouts = array_reverse($shouts);
  4. foreach ($shouts as $item){
  5.    if ($row_count == $numshoutsdisplay){
  6.        if ($_REQUEST["viewall"] == true)    echo "<div id='moreshouts' style='display:inline'>";
  7.        else    echo "<div id='moreshouts' style='display:none'>";
  8.        $viewalled = true;
  9.    }
  10.    
  11.    if ($_GET[akcja]=='zbanuj') {
  12.            if($FilePointer = fopen("lists/bannedips.php", "a+")){
  13.            fwrite($FilePointer,"$ip\n");
  14.            fclose($FilePointer);
  15.            }
  16.            echo "<script>location.href='shoutboxadm.php';</script>";
  17.     }
  18.    
  19.    $row = ($row_count % 2) ? "one" : "two";
  20.    list ($poster,$message,$date,$time,$ip) = explode ("|^|", $item);
  21.    $thisnamecolor = "";
  22.    $thisnamecolor = colornames($poster,$thisnamecolor);
  23.    $message=profanityfilter(shoutcode(smilies(killhtml($message))));        
  24.    $thisshout = "<span style='color: $thisnamecolor !important;' class='name'><a href='shoutboxadm.php?akcja=zbanuj'><img src='ban.png' title='Zbanuj to IP:&nbsp; $ip' border='0'></a>$poster</span> $message";
  25.    $thisshout = killscript($thisshout);
  26.    echo "<div class='shout' id='row-$row' title=\"Napisano $date @ $time\">$thisshout</div>";
  27.    $row_count++;
  28. }
  29. ?>
erix
Cytat
shoutboxadm.php?akcja=zbanuj

Nigdzie nie przekazujesz, co chcesz konkretnie zbanować, poza tym: skąd Ci się wzięła zmienna $ip?

A banuje wszystkich z racji tego, że skrypt nie sprawdza żadnego innego warunku prócz action=zbanuj.
blinki
mozesz banowac tez przy uzyciu mysql tworzyc liste banow
Kod
<?
include "jakies_polaczenie.php";
polaczenie();
$ip=$_SERVER['REMOTE_ADDR'];
//i ogien :D
$zap=mysql_query("SELECT * FROM bans WHERE ip='$ip' LIMIT 1");
$row=mysql_fetch_row($zap);
if($row==1)
{
echo "<b>Jestes zbanowany na tym servisie</b>";
}
else
{
//tresc strony
}
?>


a zeby zabnowac

przy wswietlaniu userow robisz cos takiego
9zakladajac ze przy kazdym logowaniu zapisuje sie ip usera
Kod
<?
while($w=mysql_fetch_array($jakies_zapytanie))
{
echo "jakies dane";
if($_SESSION['admin']=='ok')
{
echo "<a href=ban.php?ip=".$w['ip'].">banuj tego usera</a>";
}
echo "jakas dalasz tresc";
}
?>



ban.php
Kod
<?
include "jakies_polaczenie.php";
polaczenie();
if($_SESSION['admin']=='ok')
{
mysql_query("INSERT INTO bans (`ip`) VALUES ('".$_GET['ip']."')";
}
else
{
echo "chyba nie jestes adminem";
}
?>



kod moze zawierac literowki bo jest pisany z glowy
Frostbourn
Dobra to przerasta poki co narazie moje mozliwosci. Tak ze dam sobie spokoj, recznie to bede robil tongue.gif Dzieki i do zamkniecia.
blinki
ale to jest owiele prostrzee nic twoj kod.. biggrin.gif przeanalizuj i pomysl.. pozatym strony w php bez oparcia na bazie danych nie maja zastosowania w tych czasach.. biggrin.gif jesli chcesz zapisywac np hasla w pliku to szybko moze stracic swoja strone.. biggrin.gif
erix
Cytat
pozatym strony w php bez oparcia na bazie danych nie maja zastosowania w tych czasach..

A cache, to co? tongue.gif Pliki ZAWSZE będą szybsze niż baza.

Cytat
jesli chcesz zapisywac np hasla w pliku to szybko moze stracic swoja strone..

Głupoty opowiadasz.
blinki
moim skromnym zdanie baza jest bardziej bezpieczna smile.gif jakos wole sql smile.gif
Frostbourn
  1. <?php
  2. include "../db_connect.php";
  3. polaczenie();
  4. $ip=$_SERVER['REMOTE_ADDR'];
  5. //i ogien biggrin.gif
  6. $zap=mysql_query("SELECT * FROM bans WHERE ip='$ip' LIMIT 1");
  7. $row=mysql_fetch_row($zap);
  8. if($row==1)
  9. {
  10. echo '$bannedmessage';
  11. }
  12.  
  13.  
  14.        
  15. $shouts = file("shouts.php");
  16. $shouts = array_reverse($shouts);
  17. foreach ($shouts as $item){
  18.    if ($row_count == $numshoutsdisplay){
  19.        if ($_REQUEST["viewall"] == true)    echo "<div id='moreshouts' style='display:inline'>";
  20.        else    echo "<div id='moreshouts' style='display:none'>";
  21.        $viewalled = true; //We already displayed the viewall div
  22.    }
  23. $row = ($row_count % 2) ? "one" : "two";
  24.    list ($poster,$message,$date,$time,$ip) = explode ("|^|", $item);
  25.    $thisnamecolor = "";
  26.    $thisnamecolor = colornames($poster,$thisnamecolor);
  27.    $message=profanityfilter(shoutcode(smilies(killhtml($message))));        
  28.    $thisshout = "<span style='color: $thisnamecolor !important;' class='name'>";
  29.    while($w=mysql_fetch_array($jakies_zapytanie))
  30. {
  31. echo "jakies dane";
  32. if($_SESSION['admin']=='ok')
  33. {
  34. echo "<a href=ban.php?ip=".$w['ip']."><img src='ban.png' title='Zbanuj to IP:&nbsp; $ip' border='0'></a>$poster</span> $message";
  35. }
  36. echo "jakas dalasz tresc";
  37. }
  38.  
  39.    $thisshout = killscript($thisshout);
  40.    echo "<div class='shout' id='row-$row' title=\"Napisano $date @ $time\">$thisshout</div>";
  41.    $row_count++;
  42. }
  43. ?>


Tak zrobilem, ale przestałą się wyświetlać zawartość shoutboxa. Jednak wolalbym, zeby mnie ktoś nakierował jak zrobic na plikach.





Zrobiłem tak. Teraz banuje tylko moje ip.

  1. <?php
  2. if ($_GET[akcja]=='zbanuj') {
  3.           if($FilePointer = fopen("lists/bannedips.php", "a+")){
  4.            fwrite($FilePointer,"$_SERVER[REMOTE_ADDR]\n");
  5.            fclose($FilePointer);
  6.            }
  7.            
  8.            echo "<script>location.href='shoutboxadm.php';</script>";
  9.            
  10.        }
  11.        
  12. $shouts = file("shouts.php");
  13. $shouts = array_reverse($shouts);
  14. foreach ($shouts as $item){
  15.    if ($row_count == $numshoutsdisplay){
  16.        if ($_REQUEST["viewall"] == true)    echo "<div id='moreshouts' style='display:inline'>";
  17.        else    echo "<div id='moreshouts' style='display:none'>";
  18.        $viewalled = true; //We already displayed the viewall div
  19.    }
  20.    
  21.    
  22.    
  23.    $row = ($row_count % 2) ? "one" : "two";
  24.    list ($poster,$message,$date,$time,$ip) = explode ("|^|", $item);
  25.    $thisnamecolor = "";
  26.    $thisnamecolor = colornames($poster,$thisnamecolor);
  27.    $message=profanityfilter(shoutcode(smilies(killhtml($message))));        
  28.    $thisshout = "<span style='color: $thisnamecolor !important;' class='name'><a href='shoutboxadm.php?akcja=zbanuj'><img src='ban.png' title='Zbanuj to IP:&nbsp; $ip' border='0'></a>$poster</span> $message";
  29.    $thisshout = killscript($thisshout);
  30.    echo "<div class='shout' id='row-$row' title=\"Napisano $date @ $time\">$thisshout</div>";
  31.    $row_count++;
  32. }
  33. ?>
blinki
bo powinienes zrobic zeby np.. jak ktos ostatnio sie logowal na konto zeby w bazie urzytkownikow zapisywalo sie jego ostatnie ip

czyli cos takiego

login.php
Kod
//dodajemy potem jesli login jest udany
mysql_query("UPDATE users SET ip='$ip' WHERE login='".$_POST['login']."' LIMIT 1");


i wtedy powinienes przy uzytkonikach dodac ten kawalek skryptu co ci ostatnio dalem tam jest przeczytaj
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.