Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skrypt banów z wykożystaniem MySQL
Kunicki
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 16.11.2010

Ostrzeżenie: (0%)
-----


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ć.

Ten post edytował Kunicki 1.01.2011, 14:56:45
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
GwynBleidD
post
Post #2





Grupa: Zarejestrowani
Postów: 28
Pomógł: 9
Dołączył: 16.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post
Kunicki
post
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 16.11.2010

Ostrzeżenie: (0%)
-----


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

Ten post edytował Kunicki 1.01.2011, 18:29:36
Go to the top of the page
+Quote Post
GwynBleidD
post
Post #4





Grupa: Zarejestrowani
Postów: 28
Pomógł: 9
Dołączył: 16.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Bo brakuje mysql_connect (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Kunicki
post
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 16.11.2010

Ostrzeżenie: (0%)
-----


Cytat(GwynBleidD @ 1.01.2011, 20:14:03 ) *



A no racja bo połączenie z bazą miałem niżej. Już przestawiłem i działa (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 14:38