Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] AntySpam komentarze. Problem z rand.
Forum PHP.pl > Forum > PHP
mariuszstanikowski
Witam,
Zbudowałem taki system antyspamowy dla dodawania komentarzy. Tzn. mam formularz z kilkoma polami i są losowane trzy cyfry, które tworzą liczbę i jeżeli w polu spam jest wpisana liczba z wylosowanych cyfr to komentarz zostaje dodany.
No właśnie.. niestety nie zostaje dodany, nie wiem z czego to wynika. Gdy usunę opcję z tym anty spamem to wszystko chodzi... Może ktoś widzi coś czego ja nie widzę ?

  1. <?php
  2. $a = rand(1,9);
  3. $b = rand(1,9);
  4. $c = rand(1,9);
  5. $spam = "".$a."".$b."".$c."";
  6. if (addslashes($_POST['nick']) && addslashes($_POST['tresc']) && addslashes($_POST['spam'])==$spam) {
  7. $zapytanie_add = "INSERT INTO komentarze VALUES ('".addslashes($_POST['nick'])."','".addslashes($_POST['tresc'])."')";
  8. $wynik_add = mysql_query($zapytanie_add);
  9. if ($wynik_add){
  10. echo "<strong>Komentarz został pomyślnie dodany!</strong>";
  11. }
  12. }
  13. ?>
-=Peter=-
Prawdopodobieństwo, że komentarz zostanie dodany to 1/(9*9*9) (jeśli $_POST['spam'] to trzy cyfrowa liczba nie zawierająca zer). Co kryje się się pod zmienną $_POST['spam']? Jakim prawem ta zmienna ma być równa dopiero co wylosowanej liczbie? Czemu poprostu liczby nie wylosujesz za pomocą rand(100, 999) (nie chcesz mieć zer?)? Chyba próbujesz zrobić coś na wzór captcha, więc poszukaj w googlach pod hasłem "captcha".

Liczbę musisz wylosować, gdy wyświetlasz formularz, zapisać ją np. w sesji i gdy formularz został wysłany sprawdzić czy użytkownik wpisał taką samą liczbę.
mariuszstanikowski
$_POST['spam'] jest to wysyłana zawartość pola w formularzu w które wpisujemy wylosowaną liczbę. jeżeli komentarz ma zostać dodany musi być wprowadzona taka sama jak ta wylosowana.
nie losuję jednej liczby, ponieważ mam grafiki od 1-9 i losuję trzy cyfry aby z grafik ułożyło mi liczbę.
Liczba jest losowana gdy wyświetlam formularz...

Kod formularza:

  1. <form action="index.php?go=wiecejnews&amp;id=<? echo $id; ?>" method="POST" style="display: inline;">
  2. <table width="100%" summary="">
  3. <tr>
  4. <td><input type="text" name="nick" value="nick" size="24" maxlength="30"></td>
  5. </tr>
  6. <tr>
  7. <td><textarea name="tresc" rows="9" cols="40">treść</textarea></td>
  8. </tr>
  9. <tr>
  10. <td><img alt="" src="img/spam/<? echo $a; ?>.png"> <img alt="" src="img/spam/<? echo $b; ?>.png"> <img alt="" src="img/spam/<? echo $c; ?>.png">
  11. </td>
  12. </tr>
  13. <tr>
  14. <td><input type="text" name="spam" value="" size="10" maxlength="10"></td>
  15. </tr>
  16. <tr>
  17. <td><input type="submit" value="Dodaj"><input type="reset" value="Wyczyść"></td>
  18. </tr>
  19. </table></form>
-=Peter=-
Wyświetlając formularz losujesz trzycyfrową liczbę, zapisujesz ją w sesji. Użytkownik wypełnia formularz, wpisuje do jednego z inputów ten kod co ma na obrazku, wysyła formularz. Po wysłaniu sprawdzasz, czy $_POST['spam'] == $_SESSION['spam'], tylko czasem nie generuj nowej liczby po wysłaniu formularza smile.gif
mariuszstanikowski
No właśnie chyba cały sęk i problem w tym, że po wysłaniu formularza cyfry losują się od nowa i dlatego nie porównuje z tymi wcześniej wylosowanymi tylko z tymi nowymi....
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.