Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]ANTYFLOOD
Forum PHP.pl > Forum > Przedszkole
qwertY1234
Witam,


Mam problem z antyfloodem w php.

Skrypt mial robic:
1. Sprawdzac czy IP jest w bazie, jesli nie to zapisuje IP i date unixowa po wyslaniu komentarza.
2. JEsli IP jest w bazie a nie minelo 900s to wyswietla komunikat, jesli czas minal usuwa IP z bazy i wstawia komentarz,

Ale problem jest taki ze ochrona "wlacza " sie po dodaniu drugiego koemntarza...i juz sie nie wylacza tzn. pozniej z IP nie mozna dodac koemntarza. JEstem poczatkujacym wiec prosze o wyrozumialosc smile.gif
Kod
<?php
  include('baza.php');
  #DODAWANIE NEWSA:
  $ip = $_POST['ip'];
  $date2 = $_POST['date'];
  $autor = $_POST['autor'];
  $tresc = $_POST['tresc'];
  $id = $_POST['id'];
  $tresc=strip_tags($_POST['tresc']);
  $data = date('d.m.Y');
  $autor = trim($autor);
  $data = trim($data);
  if (!empty($autor) || !empty($tresc))
  {
      if (empty($autor) || empty($tresc))
          {
          echo '<p class="ramka">Wypełnij wszystkie pola!</p>';
          exit;
          }
      if (strlen($autor) > 15 || strlen($tresc) > 255)
          {
          echo '<p class="ramka"> Krócej, krócej... :)</p>';
          exit;
          }
      #sprawdzanie czy w bazie jest IP.
      $sprawdz = mysql_query("SELECT * FROM flood WHERE IP = '$ip'");
      $num = mysql_num_rows($sprawdz);    
      
      if ($num > 0)
          {
          $data = mysql_query("SELECT * FROM flood WHERE IP = '$ip'");
          while ($zpt = mysql_fetch_assoc($data))
              {
              $dat = $zpt['czas'];
              }
          $roznica = $date2 - $dat;
          if ($roznica < 120)
              {
              echo '<p class="ramka"> Musisz troche poczekać...</p>';
              exit;
              }
          else
          $odswiez = mysql_query("DELETE FROM flood WHERE IP = '$ip'");
          $wynik3 = mysql_query("INSERT INTO komentasz VALUES (NULL, '".$tresc."', '".$autor."', '".$data."', '".$id."')");
              if ($wynik)
              {
                  echo
  <<<EOD
  <script language="JavaScript" type="text/javascript">                
                                                                  
  setTimeout("window.location.replace(index.php?id=komentarz&amp;idk='$id'')",5);                                                                                  
  </script>
  EOD;
              }
          }
      else if ($num == 0)
          {
          $wynik2 = mysql_query("INSERT INTO flood VALUES (NULL, '".$ip."', '".$date2."')"); #dodawanie IP i daty.
          $wynik = mysql_query("INSERT INTO komentasz VALUES (NULL, '".$tresc."', '".$autor."', '".$data."', '".$id."')");
          
          if ($wynik)
              {
              echo
  <<<EOD
  <script language="JavaScript" type="text/javascript">                
                                                                  
setTimeout("window.location.replace(index.php?id=komentarz&amp;idk='$id'')",5);                                                                                  
  </script>
  EOD;
              }
          }
Eagle
1. Nie pobieraj IP i dany przez $_POST bo to będzie można podrobić smile.gif
  1. <?php
  2. $ip = $_SERVER['REMOTE_ADDR']; 
  3. $date2 = time();
  4. ?>


2.
  1. <?php
  2. $sprawdz = mysql_query("SELECT * FROM flood WHERE IP = '$ip'");
  3. ?>

Nie ma sensu pobierać wszystkich danych z bazy sql.
Zamiast * wpisz jakąś kolumnę która używasz z tego co widzę to tylko `czas` więc :

  1. <?php
  2. $sprawdz = mysql_query("SELECT `czas` FROM flood WHERE IP = '$ip'");
  3. ?>


3. Może zobacz zamiast
  1. IP ='$ip'
to
  1. IP LIKE '$ip'
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.