Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czasowe bany
Forum PHP.pl > Forum > PHP
DarkItachiPL
Witam... chciałem zrobić skrypt który po insercie z datą przyspieszoną o godzinę sprawdzał czy już godzina minęła, jeśli tak usuwał by bana... Skonstruowałem takie coś, ale nie działa, ponieważ usuwa zawsze bana ;/
  1. <?php
  2. //---
  3. $d = date("d");
  4. $m = date("m");
  5. $y = date("y");
  6. $h = date("H");
  7. $i = date("i");
  8. $s = date("s");
  9. //---
  10. $data = $h.$m.$y.$h.$i.$s;
  11. $h++;
  12. $dataa = $h.$m.$y.$h.$i.$s;;
  13.  
  14. $sql = "SELECT * FROM banned WHERE ip = '$ip'";
  15. $result = mysql_db_query($db,$sql) or die(mysql_error());
  16. if ($row=mysql_fetch_row($result)) {
  17. if ($data >= $row[1]) {
  18. $sql = "DELETE FROM banned WHERE ip='$ip'";
  19. $result = mysql_db_query($db,$sql) or die(mysql_error());
  20. }
  21. }
  22. ?>
klocu
Zakręciłeś i to dla mnie zdrowo.
Wstawiasz do bazy do pola formatu datetime datę wygaśnięcia blokady dostępu do konta tak?
To jakim problemem potem jest wywołanie zwykłego kodu:
  1. <?php
  2. mysql_query( 'DELETE FROM banned WHERE ip="'. $ip .'" and pole_z_Twoja_data <= "'. date('Y-m-d H:i:s') .'";' );
  3. ?>


Taką metodą jaką chciałeś generować datę to się można zabić jak tępym nożem.
Optymalizuj połączenia, po co masz je wyciągać i sprawdzać, niech baza się tym zajmie i nie zwraca Ci czegoś czego tak naprawdę nie potrzebujesz.

Dobrze skierowałem mój tok myślenia?

A nawet zobacz: wyszukujesz te rekordy, wyciągasz ich ID a potem wywalasz WSZYSTKIE bany dla danego ip. bez sensu nie? już wiesz gdzie leży błąd? nie może nie usuwać bana bo to mu właśnie każesz, jeśli już to wyrzucaj po ID rekordu (choć to też bez sensu nie?)
DarkItachiPL
mam proźbe... napisz mi cały skrypt który będzie po wejściu na stronke dodwał bana, i po wejściu wyświetlał że masz bana, a po 60 minutach odbanuje ;] bo właśnie o zrobienie takiego skryptu mi chodzi
klocu
Napiszę w funkacjach bo nie chce mi się myśleć nad klasą. Sory :]

  1. <?php
  2. function zbanuj( $ip ) {
  3.  
  4. $uchwyt = mysql_query( 'INSERT INTO `tablica_zbanowanych` SET ip = "'. $ip .'", koniec_blokady = "'. date( 'Y-m-d H:i:s', strtotime('+1 hour')) .'";' );
  5. if( $uchwyt ) {
  6. echo 'klient zbanowany ;)';
  7. } else {
  8. echo 'cos poszło nie tak';
  9. }
  10. }
  11.  
  12. function sprawdz( $ip ) {
  13.  
  14. $uchwyt = mysql_query( 'SELECT koniec_blokady FROM `tablica_zbanowanych` WHERE ip = "'. $ip .'" ORDER BY koniec_blokady DESC LIMIT 0, 1;' );
  15. $rzad = mysql_fetch_assoc( $uchwyt );
  16.  
  17. if( $rzad['koniec_blokady'] <> null ) {
  18. echo 'przykro mi masz bana, koniec blokady mija: '. date( 'd-m-Y H:i', strtotime( $rzad['koniec_blokady'] ));
  19. }
  20.  
  21. }
  22.  
  23. function odbanuj( $ip ) {
  24.  
  25. mysql_query( 'DELETE FROM `tablica_zbanowanych` WHERE ip="'. $ip .'" and koniec_blokady <= "'. date('Y-m-d H:i:s') .'";' );
  26.  
  27. }
  28. ?>


struktura tablicy wynika z tego taka:
- id
- ip
- koniec_blokady
typy pól, ich zakres i pojemności stwórz sam. to jest tylko jakiś ogólny zarys jak może to wyglądać.

do tego znajomość tablicy $_SERVER i sprawdzanie ip bądź też ip chowanego za nietransparentnym proxy mile widziana.

uwaga. dodam iż nie tworzyłem tablicy i nie kontrolowałem funkcji. a może temat nadaje się już na gotowe rozwiązania?
jeszcze co do dodawania. bo teraz dodaje wielokrotne bany dla jednego klienta, a możesz select'em sprawdzić czy już jakiś ban istnieje i ew go przedłużyć o kolejną godzinkę. metoda rozwiązania jest dowolna.
DarkItachiPL
Dzięki!! Działa z tym skryptem na usuwanie!! Very Thanks!! guitar.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.