Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] odrzucanie komentarzy z http
bednus
post 16.09.2009, 12:48:25
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 25.12.2003

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


Witam
W module relacji live korzystam z prostego skryptu:
  1. <?php
  2.  
  3. // nazwa pliku z trescia komentarzy
  4. $nazwa = 'komentarze.txt';
  5.  
  6.  
  7. // zapis jesli co wyslano z formularza
  8. if($_POST['tytul'] & $_POST['tresc'] & $_POST['autor'])
  9. {
  10. $fp=fopen($nazwa, 'a');
  11. flock($fp, 2);
  12. fwrite($fp,$_POST['tytul'].'||'.strip_tags(strtr($_POST['tresc'],'\n',' ')).'||'.$_POST['autor'].'\n');
  13. flock($fp, 3);
  14. fclose($fp);
  15. }
  16.  
  17. // jezeli juz istnieja jakies komentarze
  18. if(is_file($nazwa))
  19. {
  20. $linia = explode('\n',file_get_contents($nazwa));
  21. $ilosc = count($linia);
  22. for($i=0; $i<$ilosc; $i++)
  23. {
  24. $komentarz = explode('||',$linia[$i]);
  25. echo '<hr><br /><b>'.$komentarz[0].'</b><br />'.$komentarz[1].'<br /><i>'.$komentarz[2].'</i><br />';
  26. }
  27. }
  28. else
  29. echo 'Jeszcze nie ma zadnych komentarzy. Badz pierwszy i skomentuj!<br /><br />';
  30.  
  31. ?>

i formularz
  1. <form action="" method="POST">
  2. <table><tr><td>Tytul </td><td><input type="text" name="tytul" /></td></tr>
  3. <tr><td>Tresc</td><td><textarea cols="30" name="tresc" rows="7"></textarea> </td></tr>
  4. <tr><td>Autor </td><td><input type="text" name="autor" /> </td></tr>
  5. <tr><td><input type="submit" value="Dodaj komentarz" /></td></tr></table>
  6. </form></font>


Niestety jest on zasypywany dużą ilością spamu z linkami do różnych stron, chciałbym zapytać czy jest możliwość wprowadzenia warunku aby skrypt automatycznie odrzucał komentarze w których treści znajdzie się http.
Go to the top of the page
+Quote Post
phpion
post 16.09.2009, 12:56:15
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Nie dopisuj komentarza do pliku jeśli w jego treści znajduj się link. Co Ci będzie potrzebne? Wyrażenia regularne (poczytaj o ich budowie, a najlepiej znajdź gotowe wyrażenie pod adres WWW) oraz funkcja sprawdzająca czyli preg_match.
Go to the top of the page
+Quote Post
bogdan89
post 16.09.2009, 13:07:20
Post #3





Grupa: Zarejestrowani
Postów: 320
Pomógł: 36
Dołączył: 28.08.2006
Skąd: Wrocław

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


a czy trzeba korzystać z wyrażeń regularnych?

nie można ze zwykłej funkcji typu strpos ? smile.gif

  1. $content = 'jakas tresc z adresem';
  2. if (!strpos($content, "http://")) {
  3. //nie ma 'http://' w tresci
  4. } else {
  5. //jest 'http://' w tresci
  6. }
Go to the top of the page
+Quote Post
Larges
post 16.09.2009, 13:35:38
Post #4





Grupa: Zarejestrowani
Postów: 333
Pomógł: 16
Dołączył: 13.05.2008
Skąd: Łódź

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


Polecam zdobycie trochę wiedzy o CAPTCHA winksmiley.jpg
http://pl.wikipedia.org/wiki/CAPTCHA

Warto stosować.
A jeśli nie chcesz to jak kolega wcześniej napisał strpos().
Problem w tym, że nie tylko boty pragną podzielić się linkiem. Jeśli lubisz linki do innych, wartościowych stron to w ten sposób zabronisz również ich wrzucania przez ludzi (;


--------------------
Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
phpion
post 16.09.2009, 13:38:24
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




@bogdan89:
https://mojastrona.pl
www.mojastrona.pl

Zdecydowanie lepiej napisać wyrażenie regularne. Oczywiście ZAWSZE będzie możliwość obejścia tego w różny sposób ale wyrażenie regularne utrudni to w większym stopniu niż strpos.

@Larges:
Jak chcesz za pomocą captchy uniknąć dodawania linków do komentarzy?
Go to the top of the page
+Quote Post
bednus
post 16.09.2009, 13:59:13
Post #6





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 25.12.2003

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


Zrobiłem to tak:

  1. if($_POST['tytul'] & $_POST['tresc'] & $_POST['autor'])


na
  1. if($_POST['tytul'] && $_POST['tresc'] && $_POST['autor'] && strpos($_POST['tresc'], 'http://') === false)


i działa smile.gif dzięki wszystkim za pomoc i nakierowanie mnie na rozwiązanie

Ten post edytował bednus 16.09.2009, 14:05:28
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: 15.06.2025 - 11:25