Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem ze skryptem. Sesje.
Forum PHP.pl > Forum > Przedszkole
bleze
Skrypt pownien nie wykonywać tego co jest w warunku ($message && flood($_SESSION['last_session_request'])==FALSE && $znaki<=500 && $znaki !== 0 && $wulgar==FALSE) jeśli skrypt zostanie wykonany więcej razy niż 1 w czasie 30 sekund (zabezpieczenie przed floodowaniem). Niestety tak się nie dzieje, nie wiem już co może być nie tak. Za każdym razem jak testuje w odstępie czasu 6-7 sekund to wywala mi komunikat "Komentarz dodano!" i komentarz zostaje dodany.
  1. <?
  2. function  flood() {
  3. if($_SESSION['last_session_request'] > time() - 30){
  4.  
  5.  echo "<div style=\"color:red\">Aby dodać następny komentarz musisz odczekać 30 sekund!</div>";
  6.  exit;
  7. }
  8. $_SESSION['last_session_request'] = time();
  9. }
  10.  
  11. $id = $_GET[id];
  12. $message=$_POST['message'];
  13. $name=$_POST['name'];
  14. $message = htmlspecialchars($message, ENT_QUOTES);
  15. $name = htmlspecialchars($name, ENT_QUOTES);
  16. $message = str_replace("r\n", " ", $message);
  17. $name = str_replace("r\n", " ", $name);
  18. $message = str_replace("
  19. ", " ", $message);
  20. $name = str_replace("
  21. ", " ", $name);
  22. $message = str_replace("|", "&sl&", $message);
  23. $name = str_replace("|", "&sl&", $name);
  24. if ($name == FALSE) {$name="Anonim";}
  25.  
  26. include "../profilter.php";
  27.  
  28. $message = iconv("utf-8","ISO-8859-2",$message);
  29. $name = iconv("utf-8","ISO-8859-2",$name);
  30.  
  31. $znaki = strlen($message);
  32.  
  33. if ($message && flood($_SESSION['last_session_request'])==FALSE && $znaki<=500 && $znaki !== 0 && $wulgar==FALSE)  
  34. {
  35.    $date = date("Y-m-d H:i");  
  36.    $message = "$name|$date|$message\n";  
  37.    #$fp = fopen ("comment/$id.comment", "a");  
  38.    $fp = fopen ("comment/" . $id . ".comment", "a");
  39.    fwrite ($fp, $message);  
  40.    fclose ($fp);
  41. echo "<div style='color:green'>Komentarz dodano!</div>";
  42. }
  43. else {
  44.  
  45.    if ($znaki>=500) {echo "<div style='color:red'>Twój komentarz musi mieć mniej niż 500 znaków!</div>";}
  46.  
  47.    else if ($znaki==0) { echo "<div style='color:red'>Musisz wpisać jakiś tekst!</div>";}
  48.  
  49.    echo "<div style='color:red'>$wulgar</div>";
  50.  
  51.    echo "<FORM id=\"form\" method=\"post\" action=\"comments.php?id=".$id."\">  
  52. <b>Imię/nick:</b><BR><INPUT name=\"name\" type=\"text\" size=\"25\" maxlength=\"15\"><BR>  
  53. <DIV id=\"iloscZnakow\"><b>Twój komentarz:</b> (wpisanych znaków 0<script>document.write(parseInt(document.forms[0].opis.value.length))</SCRIPT>/500)</DIV>
  54. <TEXTAREA onFocus=\"iloscZnakow(this)\" onBlur=\"skoncz(this)\" style=\"overflow:auto\" name=\"message\" rows=\"5\" cols=\"45\">$message</TEXTAREA>
  55. </FORM><button onclick=\"SendRequestForm()\">Dodaj komentarz</button>";
  56. }
  57. ?>
legorek
Na pierwszy rzut oka problem tkwi w:

  1. <?php
  2. if($_SESSION['last_session_request'] > time() - 30){
  3.  
  4. echo "<div style=\"color:red\">Aby dodać następny komentarz musisz odczekać 30 sekund!</div>";
  5. }
  6. ?>

Zamień exit; na return true;
bleze
próbowałem już tak, niestety nic to nie dało. gdzie indziej jeszcze może tkwić problem?
erix
  1. <?php
  2. if($_SESSION['last_session_request'] > time() - 30){
  3.  
  4. echo "<div style=\"color:red\">Aby dodać następny komentarz musisz odczekać 30 sekund!</div>";
  5. }
  6. $_SESSION['last_session_request'] = time();
  7. ?>

Za każdym żądaniem resetujesz czas, stąd problem.
bleze
już sobie poradziłem. Problem był związany z tworzeniem/utrzymywaniem sesji, dodałem do wszystkich stron z których wywołuję ten skrypt - @session_start(); i po problemie.
Natomiast zastanawia mnie jeszcze jedno. Dlaczego skoro ten warunek o którym pisałem w pierwszym poście nie jest spełniony przez flood($_SESSION['last_session_request'])==FALSE to nie wyświetla się ten formularz:
  1. <?php
  2. echo "<FORM id=\"form\" method=\"post\" action=\"comments.php?id=".$id."\">  
  3. <b>Imię/nick:</b><BR><INPUT name=\"name\" type=\"text\" size=\"25\" maxlength=\"15\"><BR>  
  4. <DIV id=\"iloscZnakow\"><b>Twój komentarz:</b> (wpisanych znaków 0<script>document.write(parseInt(document.forms[0].opis.value.length))</SCRIPT>/500)</DIV>
  5. <TEXTAREA onFocus=\"iloscZnakow(this)\" onBlur=\"skoncz(this)\" style=\"overflow:auto\" name=\"message\" rows=\"5\" cols=\"45\">$message</TEXTAREA>
  6. </FORM><button onclick=\"SendRequestForm()\">Dodaj komentarz</button>";
  7. ?>

Jeżeli zaś ten warunek nie spełnia się przez pozostałe np. $znaki<=500 czy $message==FALSE to formularz zostaje wyświetlony.
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.