Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem ze skryptem. Sesje.
bleze
post 20.01.2009, 14:51:26
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 1.01.2007

Ostrzeżenie: (10%)
X----


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. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
legorek
post 20.01.2009, 15:18:37
Post #2





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

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


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;

Ten post edytował legorek 20.01.2009, 15:19:10


--------------------
Go to the top of the page
+Quote Post
bleze
post 20.01.2009, 15:29:32
Post #3





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 1.01.2007

Ostrzeżenie: (10%)
X----


próbowałem już tak, niestety nic to nie dało. gdzie indziej jeszcze może tkwić problem?
Go to the top of the page
+Quote Post
erix
post 20.01.2009, 17:03:28
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszó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. $_SESSION['last_session_request'] = time();
  7. ?>

Za każdym żądaniem resetujesz czas, stąd problem.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
bleze
post 20.01.2009, 17:19:09
Post #5





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 1.01.2007

Ostrzeżenie: (10%)
X----


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.

Ten post edytował bleze 20.01.2009, 17:21:13
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: 14.08.2025 - 13:16