Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Blokada dodawania wpisu.
moto0095
post 14.04.2010, 14:41:18
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


Witam. Szukam w google i nic nie mogę znaleźć.
Więc mój problem wygląda tak że mam sobie skrypt komentarzy [ oparty na plikach *.txt ] i ostatnio pojawili się SPAMERZY.
I mam takie pytanie jak zablokować (zbanować) IP ale tylko np na 5 min questionmark.gif
Albo czego mam w google szukaćquestionmark.gif
smile.gif
Go to the top of the page
+Quote Post
tehaha
post 14.04.2010, 14:51:08
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


zapisujesz w bazie numer IP oraz czas, a potem sprawdzasz czy w tabli istnieje rekord z takim numer IP oraz czasem większym niż 5min temu

czyli masz tabelę np. check_spam z kolumnami:
Id INT
IP varchar
date datetime

i potem robisz zapytanie
  1. $time = date("Y-m-d H:i:s", strtotime("-5 min"));

  1. SELECT id FROM check_spam WHERE ip =$ip AND date > $time


Ten post edytował tehaha 14.04.2010, 14:57:17
Go to the top of the page
+Quote Post
moto0095
post 14.04.2010, 15:39:59
Post #3





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


A dało by się aby IP zapisywały się w pliku *.txt.

Bo znalazłem coś takiego
  1. oj mam coś lepszego Roberto..
  2. Jest to skrypt pozwalający zbanować ip z panelem administratora (który jak narazie pozwala jednak jedynie na dodanie ip do listy zbanowanych, lecz wkrótce sie to zmieni, znaczy sie dopisze resztę),
  3. plik banned.php - jest to własnie skrypt pozwalający dodawac numery IP do listy, umieść go gdzieś w Panelu Administracyjnym na swojej stronie:
  4.  
  5. <?php
  6. if(isset($_GET['numery']) && $_GET['numery']=='dopisz'){
  7. $plik = fopen("ban.txt", "w");
  8. $ip = $_POST['ip'];
  9. fputs($plik, $ip);
  10. fclose;
  11. echo '<a href="index.php">PRZEJDŹ DO STRONY GŁÓWNEJ</a>';
  12. }else {
  13. echo '<b>DODAJ NUMER IP DO LISTY ZBANOWANYCH</b><br>';
  14. echo '<form method="POST" action="banned.php?numery=dopisz">
  15. <table border="0" width="100%">
  16. <tr>
  17. <td>Numer:</td>
  18. <td><input type="text" name="ip" size="64"></td>
  19. </tr>
  20. <tr>
  21. <td> </td>
  22. <td><input type="submit" value="DODAJ"></td>
  23. </tr>
  24. </table>
  25. </form>';}
  26. ?>
  27.  
  28. plik ban.txt - zostawiasz pusty
  29. plik ip.php - skrypt sprawdza czy dany ip wystepuje na liscie, jesli tak to zabrania dostepu
  30.  
  31. <?php
  32. global $_SERVER;
  33. $ip = file('ban.txt');
  34. foreach($ip as $v){
  35. if(trim($v) == $_SERVER['REMOTE_ADDR']){
  36. die("JESTEŚ ZBANOWANY!!");
  37. } }
  38. ?>
  39.  
  40. aby uniemozliwic dostep do twojej strony podanym numerom ip na swojej stronie musisz dodac:
  41.  
  42. include "ip.php";
  43.  
  44. Mam nadzieje ze skrypt sie przyda, jak bedą pozytywne opinie to dorobię jeszcze funkcje usuwania wybranego ip z listy... oj mam coś lepszego Roberto..
  45. Jest to skrypt pozwalający zbanować ip z panelem administratora (który jak narazie pozwala jednak jedynie na dodanie ip do listy zbanowanych, lecz wkrótce sie to zmieni, znaczy sie dopisze resztę),
  46. plik banned.php - jest to własnie skrypt pozwalający dodawac numery IP do listy, umieść go gdzieś w Panelu Administracyjnym na swojej stronie:
  47.  
  48. <?php
  49. if(isset($_GET['numery']) && $_GET['numery']=='dopisz'){
  50. $plik = fopen("ban.txt", "w");
  51. $ip = $_POST['ip'];
  52. fputs($plik, $ip);
  53. fclose;
  54. echo '<a href="index.php">PRZEJDŹ DO STRONY GŁÓWNEJ</a>';
  55. }else {
  56. echo '<b>DODAJ NUMER IP DO LISTY ZBANOWANYCH</b><br>';
  57. echo '<form method="POST" action="banned.php?numery=dopisz">
  58. <table border="0" width="100%">
  59. <tr>
  60. <td>Numer:</td>
  61. <td><input type="text" name="ip" size="64"></td>
  62. </tr>
  63. <tr>
  64. <td> </td>
  65. <td><input type="submit" value="DODAJ"></td>
  66. </tr>
  67. </table>
  68. </form>';}
  69. ?>
  70.  
  71. plik ban.txt - zostawiasz pusty
  72. plik ip.php - skrypt sprawdza czy dany ip wystepuje na liscie, jesli tak to zabrania dostepu
  73.  
  74. <?php
  75. global $_SERVER;
  76. $ip = file('ban.txt');
  77. foreach($ip as $v){
  78. if(trim($v) == $_SERVER['REMOTE_ADDR']){
  79. die("JESTEŚ ZBANOWANY!!");
  80. } }
  81. ?>
  82.  
  83. aby uniemozliwic dostep do twojej strony podanym numerom ip na swojej stronie musisz dodac:
  84.  
  85. include "ip.php";
  86.  
  87. Mam nadzieje ze skrypt sie przyda, jak bedą pozytywne opinie to dorobię jeszcze funkcje usuwania wybranego ip z listy...


tylko że to blokuje na stałe.
Jak przerobić to aby blokowało na 5 min a nie na zawsze.

questionmark.gif
Go to the top of the page
+Quote Post
tehaha
post 14.04.2010, 15:42:00
Post #4





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


no ale ten skrypt to zajmie kilka linijek więc nie wiem po co Ci gotowiec, lepiej by było na bazie danych ale skoro jej nie chcesz to zapisuj do pliku IP i czas np. w formacie

IP-czas

potem jak sprawdzasz każdąlinjkę dajesz explode na '-' i patrzysz czy jest linijka gdzie jest taki numer IP i czas większy niż 5min temu

czyli wiersz możesz zapisać czymś takim:
  1. $row = $_SERVER['REMOTE_ADDR']."-".date("Y-m-d H:i:s", time());


a potem przy analizowaniu każdej linijki sprawdzasz czymś takim (pisane na kolanie):
  1. $time_5_min_ago = date("Y-m-d H:i:s", strtotime("-5 min"));
  2.  
  3. $rows = explode("\n", $file);
  4.  
  5. foreach($rows as $value)
  6. {
  7. $one_row = explode('-', $value);
  8.  
  9. if($one_row[0] == $_SERVER['REMOTE_ADDR'] && $one_row[1] > $time_5_min_ago)
  10. {
  11. echo "Komentować można tylko raz na 5min.";
  12. }
  13. }
Go to the top of the page
+Quote Post
moto0095
post 14.04.2010, 18:49:20
Post #5





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


Zrobiłem coś takiego ale nie działa sad.gif
Nie wyświetla się żaden błąd, ale też nie zapisuje do pliku.
  1. <?php
  2. $pole1 = trim($_POST['pole1']);
  3. $pole2 = trim($_POST['pole2']);
  4.  
  5. $file = "fip.txt";
  6. $time_5_min_ago = date("Y-m-d H:i:s", strtotime("-5 min"));
  7. $rows = explode("\n", $file);
  8.  
  9.  
  10. if(empty($pole1) and empty($pole2)) {
  11.  
  12. // prosty formularz zawierający dwa pola
  13. echo '<form action="?dod" method="post">
  14. <input type="text" name="pole1" style="width: 200px;" /><br />
  15. <textarea name="pole2" style="width: 200px; height: 100px;">
  16. </textarea><br />
  17. <input type="submit" value="Zapisz" />
  18. </form>';
  19. }else
  20. if(isset($_GET['dod'])){
  21.  
  22. foreach($rows as $value)
  23. {
  24. $one_row = explode('-', $value);
  25. if($one_row[0] == $_SERVER['REMOTE_ADDR'] && $one_row[1] > $time_5_min_ago)
  26. {
  27. echo "Komentować można tylko raz na 5min.";
  28. }
  29. }
  30. }else{
  31. $dane = $_SERVER['REMOTE_ADDR']."-".date("Y-m-d H:i:s", time())."-".$pole1."-".$pole2."\n";
  32. $file = "fip.txt";
  33. $fp = fopen($file, "a");
  34. flock($fp, 2);
  35. fwrite($fp, $dane);
  36. flock($fp, 3);
  37. fclose($fp);
  38.  
  39. echo "Dane zostały zapisane!<br />";
  40. echo "<a href=\"podglad.php\">Zobacz wpisane dane</a>";
  41. }
  42. ?>



questionmark.gifquestionmark.gif

Ja nie wiem gdzie jest błąd sad.gif.

questionmark.gifquestionmark.gif

Ten post edytował moto0095 14.04.2010, 17:47:49
Go to the top of the page
+Quote Post
tehaha
post 14.04.2010, 20:48:20
Post #6





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


wiesz nie mam dużego doświadczenia na plikach bo zawsze bazy używam, ale wydaje mi się, że w linijkach 5,6 plik najpierw trzeba otworzyć i odczytać przy pomocy funkcji fopen() czyli w linijce 5:
  1. $file = fopen('fip.txt', 'r') or die("Nie udało się otworzyć pliku");


a czy dane są zapisywane poprawnie do pliku?

Ten post edytował tehaha 14.04.2010, 20:50:07
Go to the top of the page
+Quote Post
moto0095
post 14.04.2010, 21:02:34
Post #7





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


Tak, zapis jest poprawny smile.gif

Niestety nadal nie działa sad.gif.
Go to the top of the page
+Quote Post
tehaha
post 14.04.2010, 21:03:41
Post #8





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


ok to spróbuj z tą funkcją fopen, może nawet od razu po otworzeniu spróbuj go wyświetlić czy coś żeby upewnić się czy w ogóle jest otwierany a jak już to będzie działać to wtedy będzie można analizować dane w nim zapisane
Go to the top of the page
+Quote Post
moto0095
post 14.04.2010, 21:14:36
Post #9





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


Samo zapisywanie, bez tej funkcji blokady IP działa be zarzutu i nie wiem co jest nie tak sad.gif.
Ale jeszcze coś pokombinuję.
Go to the top of the page
+Quote Post
tehaha
post 14.04.2010, 21:17:49
Post #10





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


no tak ale musisz ustalić w którym miejscu coś nie działa np. spróbuj dać
  1. print_r($rows);
w 8 linijce żeby zobaczyć czy plik otwiera jak tu jest ok, to lecisz dalej robisz to samo z $one_row żeby zobaczyć czy tam wszystko jest ok i tak aż do momentu kiedy zlokalizujesz błąd i go naprawisz
Go to the top of the page
+Quote Post
moto0095
post 14.04.2010, 22:07:29
Post #11





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


Pokazało się: Array ( [0] => Resource id #6 )

sad.gif

A jest jakiś inny sposób bez MySQL aby zablokować IP na 5 min.questionmark.gifquestionmark.gif
Go to the top of the page
+Quote Post
AndyPSV
post 15.04.2010, 05:59:09
Post #12





Grupa: Zarejestrowani
Postów: 393
Pomógł: 5
Dołączył: 6.02.2003
Skąd: The.Luciferian.Doctrine.p
df

Ostrzeżenie: (30%)
XX---


zapisuj w bazie danych!
pliki .txt sa zbyt wolne
Go to the top of the page
+Quote Post
mortus
post 15.04.2010, 07:12:07
Post #13





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Prześledź ten kod i zobacz, co zmieniłem (podświetlone wiersze)
[PHP] blokada.php - pobierz, plaintext
  1. <?php
  2. $pole1 = isset($_POST['pole1']) ? trim($_POST['pole1']) : '';
  3. $pole2 = isset($_POST['pole2']) ? trim($_POST['pole2']) : '';
  4.  
  5. if(file_exists("fip.txt")) $file = file("fip.txt");
  6. $time_5_min_ago = date("Y-m-d H:i:s", strtotime("-5 min"));
  7. // $rows = explode("\n", $file);
  8.  
  9.  
  10. if (empty($pole1) && empty($pole2)) {
  11.  
  12. // prosty formularz zawierający dwa pola
  13. echo '<form action="?dod" method="post">
  14. <input type="text" name="pole1" style="width: 200px;"/><br/>
  15. <textarea name="pole2" style="width: 200px; height: 100px;">
  16. </textarea><br/>
  17. <input type="submit" value="Zapisz" />
  18. </form>';
  19. } else
  20. if (isset($_GET['dod'])) {
  21.  
  22. if(isset($file)) { foreach ($file as $value)
  23. {
  24. $one_row = explode('`', $value);
  25. if ($one_row[0] == $_SERVER['REMOTE_ADDR'] && strtotime($one_row[1]) > strtotime($time_5_min_ago))
  26. {
  27. echo "Komentować można tylko raz na 5min.";
  28. }
  29. } }
  30. // } else {
  31. $dane = $_SERVER['REMOTE_ADDR']."`".date("Y-m-d H:i:s", time())."`".$pole1."`".$pole2."\n";
  32. $file = "fip.txt";
  33. $fp = fopen($file, "a");
  34. flock($fp, 2);
  35. fwrite($fp, $dane);
  36. flock($fp, 3);
  37. fclose($fp);
  38.  
  39. echo "Dane zostały zapisane!<br />";
  40. echo "<a href=\"index.php\">Zobacz wpisane dane</a>";
  41. }
  42. ?>
[PHP] blokada.php - pobierz, plaintext
Po co te zmiany?
Go to the top of the page
+Quote Post
moto0095
post 15.04.2010, 15:19:25
Post #14





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


Wielkie dzięki mortus. Wszystko działa smile.gif
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 30.06.2025 - 05:34