Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt banów z wykożystaniem MySQL
Forum PHP.pl > Forum > Bazy danych > MySQL
Kunicki
Chcę stworzyć skrypt banów na IP, że wpisuje w PA ip lub HOST osoby zbanowanej i dodaje się ona do bazy danych (to umiem i już zrobię). Jest problem z tym jak te ip i HOST wyciągnąć i każdy sprawdzić i porównać z osobą wchodzącą. Na razie napisałem takie coś ale wiem ze to nie zadziała:

  1. <?
  2. $banip = $REMOTE_ADDR;
  3. $banhost = gethostbyaddr($banip);
  4. $ban = mysql_query("SELECT * FROM ban");
  5. if($banip==$ban || $banhost==$ban)
  6. {
  7.  
  8. echo 'Zostałeś zbanowany!<br>';
  9. echo 'Zbanowne IP: '.$banip.'<br>';
  10. echo 'Zbanowowany HOST: '.$banhost.'<br>';
  11.  
  12. }
  13. else {
  14.  
  15. KOD STRONY
  16.  
  17. }
  18. ?>


Nie wiem jak to przerobić.
Proszę o pomoc.


//Edit

Tak myślę żeby zrobić pętle w której będą wszystkie wyciągnięte dane i wszystkie porównać.
GwynBleidD
nie napisałeś jaką strukturę bazy masz, także przyjmę że w kolumnie ip przechowujesz ip zbanowanych a w host hosty. Nie musisz porównywać tego w PHP, SQL zrobi to za Ciebie, wystarczy że użyjesz zapytania:
  1. SELECT * FROM ban WHERE ip LIKE 'ip' OR host LIKE 'host'
gdzie za ip i host (te w apostrofach) wstawiasz (poprzez PHP) ip i host osoby która wchodzi na stronę. Jeśli zapytanie zwróci jakieś rezultaty to dany odwiedzający ma bana.

Praktyczne zastosowanie w PHP:
  1. $ban = mysql_query("SELECT * FROM ban WHERE ip LIKE '".mysql_real_escape_string($banip)."' OR host LIKE '".mysql_real_escape_string($banhost)."'");

to jest linijka z zapytaniem, dalej masz błąd gdyż w zmiennej ban jest przechowywany "odnośnik" do rezultatu zapytania. Ten wynik musisz uzyskać następną funkcją, w tym przypadku wystarczy użycie mysql_num_rows, który zwraca ilość znalezionych w bazie rekordów, w przypadku braku bana zwróci 0, czyli IFa zmieniasz na:
  1. if(mysql_num_rows($ban) > 0)
Kunicki
Cytat(GwynBleidD @ 1.01.2011, 17:33:29 ) *
nie napisałeś jaką strukturę bazy masz, także przyjmę że w kolumnie ip przechowujesz ip zbanowanych a w host hosty. Nie musisz porównywać tego w PHP, SQL zrobi to za Ciebie, wystarczy że użyjesz zapytania:
  1. SELECT * FROM ban WHERE ip LIKE 'ip' OR host LIKE 'host'
gdzie za ip i host (te w apostrofach) wstawiasz (poprzez PHP) ip i host osoby która wchodzi na stronę. Jeśli zapytanie zwróci jakieś rezultaty to dany odwiedzający ma bana.

Praktyczne zastosowanie w PHP:
  1. $ban = mysql_query("SELECT * FROM ban WHERE ip LIKE '".mysql_real_escape_string($banip)."' OR host LIKE '".mysql_real_escape_string($banhost)."'");

to jest linijka z zapytaniem, dalej masz błąd gdyż w zmiennej ban jest przechowywany "odnośnik" do rezultatu zapytania. Ten wynik musisz uzyskać następną funkcją, w tym przypadku wystarczy użycie mysql_num_rows, który zwraca ilość znalezionych w bazie rekordów, w przypadku braku bana zwróci 0, czyli IFa zmieniasz na:
  1. if(mysql_num_rows($ban) > 0)


Wyświetla błąd:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Program Files (x86)\WebServ\httpd\head.php on line 9

Wszystko wydaje sie że działa:

  1. <?
  2. $banip = $REMOTE_ADDR;
  3. $banhost = gethostbyaddr($banip);
  4. $ban = mysql_query("SELECT * FROM ban WHERE ip LIKE '".mysql_real_escape_string($banip)."' OR host LIKE '".mysql_real_escape_string($banhost)."'");
  5. if(mysql_num_rows($ban) > 0) {
  6.  
  7. echo 'Zostałeś zbanowany!<br>';
  8. echo 'Zbanowne IP: '.$banip.'<br>';
  9. echo 'Zbanowowany HOST: '.$banhost.'<br>';
  10.  
  11. }
  12.  
  13. ?>


A baza wygląda tak:
ban
id | ip | host
GwynBleidD
Bo brakuje mysql_connect smile.gif
Kunicki
Cytat(GwynBleidD @ 1.01.2011, 20:14:03 ) *
Bo brakuje mysql_connect smile.gif



A no racja bo połączenie z bazą miałem niżej. Już przestawiłem i działa 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.