Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] odrzucanie komentarzy z http
Forum PHP.pl > Forum > Przedszkole
bednus
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.
phpion
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.
bogdan89
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. }
Larges
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 (;
phpion
@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?
bednus
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
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.