Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapobieganie floodowi
Balon
post
Post #1





Grupa: Zarejestrowani
Postów: 422
Pomógł: 0
Dołączył: 14.12.2005
Skąd: Wałbrzych

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


W skrypcie pisanym przeze mnie jest mozliwosc komentowania newsow ale niestety jak sie wpisze tresc komenta i wysle sie go to po odswiezeniu strony pojawia sie nastepny koment... w jaki sposob temu zapobiec ? probowalem za pomoca header ale sie gryzlo to cos ... czy jest inny sposob ? prosze o podawanie przykladow bo jak ktos bedzie proponowal JS to nie bede wiedzial w jaki sposob to zrobic ....

pozdrawiam


--------------------
Postura wielka i morda wredna, jestem Balon, kozak z osiedla !
bzdury.pl - Królestwo rozrywki
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
crash
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


Po dodaniu newsa użyj funkcji header( 'Location: ' . $_SERVER[ 'PHP_SELF' ] ); aby przeładować stronę.


--------------------
Go to the top of the page
+Quote Post
Balon
post
Post #3





Grupa: Zarejestrowani
Postów: 422
Pomógł: 0
Dołączył: 14.12.2005
Skąd: Wałbrzych

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


to ja korzystałem z podobnego skryptu ale niestety dostaje komunikat
Kod
Warning: Cannot modify header information - headers already sent by (output started at /home/soonhost/public_html/balon_portfolio/tmp/2/index.php:17) in /home/soonhost/public_html/balon_portfolio/tmp/2/inc/wiecej.php on line 56

chociaz w pliku dalem buforowanie itd...
Nie wiem dlaczego sie tak dzieje bo w panelu admina korzystam z tego samego i działa. Nie chce zadziałać więc zastanawiam się czy jest inne rozwiązanie.


--------------------
Postura wielka i morda wredna, jestem Balon, kozak z osiedla !
bzdury.pl - Królestwo rozrywki
Go to the top of the page
+Quote Post
yavaho
post
Post #4





Grupa: Zarejestrowani
Postów: 449
Pomógł: 0
Dołączył: 26.05.2004
Skąd: Nowy Sącz

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


Ja mam tak
1) po wysłaniu przeladowanie za pomocą header - i juz nikt mi nie wysle drugi raz to samo naciskajac F5
2) ciasteczko lub sesja - nastepną wiadomosc mozna przeslac po 60s
3) wiadomosci zapisywane sa w bazie danych - wiec mozna sprawdzic czy identyczna tresc + imie znajduje sie juz w bazie danych i wyslanie drugiej identycznej kopi tej widomosci mozna blokowac na 24h.

Ten post edytował yavaho 13.01.2006, 18:37:09


--------------------
Książki informatyczneKsiążki biznesowe
Warsztat: notepad hardcore
Go to the top of the page
+Quote Post
mike
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Większość ludzi poleca buforowanie na ominięcie problemu związanego z "headers already sent". Nawet na wiki tak piszą.

A ja twierdzę że to głupota.

Jak chcesz kogoś przekierować po wykonaniu pewnych operacji to po kiego cos wyświetlasz?

Moja podpowiedź.
Po operacjach (i w czasie) zrezygnuj z jakiegokowiek wyświatlania czegokolwiek a potem przekieruj na stroną, na której poinformujsz o powodzeniu lub niepowodzeniu zapisu.
Go to the top of the page
+Quote Post
Radarek
post
Post #6





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 23.05.2005

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


Dokladnie tak samo mysle. I moznaby powiedziec, ze buforowanie jest niepotrzebne, jednak sa sytuacje kiedy sie przydaje. Czasem spotykalem sie ze skryptem w ktorym ciezko bylo sie polapac, gdyz bylo masa blokow if-else (przez co przeplywa sterowania bylo ciezko zalapac:) ), a trzeba bylo uzyc funkcje modyfikujaca naglowek http, co czesto konczylo sie znanym juz komunikatem "headers alredy sent". W takim wypadku, najlatwiejszym wyjsciem (bez analizowania skryptu i babrania sie) bylo dodanie buforowania (ob_start() na poczatku skryptu) i po sprawie.
Go to the top of the page
+Quote Post
yavaho
post
Post #7





Grupa: Zarejestrowani
Postów: 449
Pomógł: 0
Dołączył: 26.05.2004
Skąd: Nowy Sącz

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


A ja uzywam bardzo czesto ob_start("ob_gzhandler") I tylko ze wzgledu na korzysci ktore wynikają na zmiejszeniu transferu strony.

@Balon instrukcja ob_start(); musi byc na samym poczatku nie tak skryptu, a powiedzial bym ze na poczatku pliku. Jezeli plik kodowany jest w UTF-8 to moze Ci wywalac w/w blad. W takich plikach kodowanych w utf-8 na poczatku pliku czesto przylepiany jest tak zwany BOM.
Najlepiej utworz od nowa plik i wklej do niego zawartosc z tego poprzedniego. I nie zapisuj pliku z kodowaniem utf-8.


--------------------
Książki informatyczneKsiążki biznesowe
Warsztat: notepad hardcore
Go to the top of the page
+Quote Post
Balon
post
Post #8





Grupa: Zarejestrowani
Postów: 422
Pomógł: 0
Dołączył: 14.12.2005
Skąd: Wałbrzych

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


Strona niby nie jest w UTF, a obstart jest na poczatku index.php do ktorego sa includowane podstrony.... Ale nadal nie działa.

EDIT : http://www.ppx.pl/balon_portfolio/tmp/2/in...co=wiecej&id=41 tutaj mozecie sprobowac winksmiley.jpg

Ten post edytował Balon 13.01.2006, 20:18:57


--------------------
Postura wielka i morda wredna, jestem Balon, kozak z osiedla !
bzdury.pl - Królestwo rozrywki
Go to the top of the page
+Quote Post
crash
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


Zarzuć kodem, bo nie widać żebyś cokolwiek tam poprawił...


--------------------
Go to the top of the page
+Quote Post
Balon
post
Post #10





Grupa: Zarejestrowani
Postów: 422
Pomógł: 0
Dołączył: 14.12.2005
Skąd: Wałbrzych

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


plik z podgladem newsa (ten w ktorym sa komentarze)
  1. <?
  2. lacz();
  3.  
  4.  
  5. $id = $_GET['id'];
  6.  
  7. if (!$id) {
  8. echo"<table bgcolor=3e3e3e border=0 width=600 align=center cellpadding=0 cellspacin
    g=0>
  9. <tr><td bgcolor=3e3e3e width=100% class=news>Strona wywolana w nieprawidlowy sposob. Poruszaj sie za pomoca linkow.</td></tr>
  10. </table><br>";
  11. }
  12.  
  13. $zapytanie = "SELECT * FROM `newsy` WHERE id = $id";
  14. $wykonaj = mysql_query ($zapytanie);
  15.  
  16. while($row=mysql_fetch_array ($wykonaj)) {
  17.  
  18. echo"<table bgcolor=3e3e3e border=0 width=600 align=center cellpadding=0 cellspacin
    g=0>
  19. <tr><td bgcolor=3e3e3e width=100% class=news><span class=title>$row[title]</span>&nbsp;&nbsp;//&nbsp;&nbsp;$row[data]";
  20. echo" <br>
  21. <font align=justify>".stripslashes($row[tresc])."</font> </td></tr>
  22. <tr><td bgcolor=505050 width=100% height=25 class=news><right><b>Autor:</b> $row[autor]</td></tr>
  23. </table><br>";
  24. }
  25.  
  26. //***********************************/
  27. //  KOMENTARZE /
  28. //***********************************/
  29.  
  30. $ile = 15;
  31. $numrows = mysql_num_rows(mysql_query("SELECT * FROM `komentarze` WHERE id_news = $id"));
  32. if(!is_numeric($p)) $p = 0;
  33. if(!$p) $p = 0;
  34. $zapytanie = "SELECT * FROM `komentarze` WHERE id_news = $id ORDER BY `id` DESC LIMIT $p,
    $ile"
    ;
  35. $wykonaj = mysql_query ($zapytanie);
  36. echo "<table bgcolor=505050 border=0 width=600 align=center cellpadding=0 cellspacin
    g=0>"
    ;
  37. while($row=mysql_fetch_array ($wykonaj)) 
  38. {
  39. echo "<tr><td bgcolor='505050' width='100%' class=news><b>".$row['autor']."</b><br>".stripslashes($row[tresc])."<br></td></tr>";
  40. $i++;
  41. }
  42.  
  43. ?>
  44. <form method="post" action="index.php?co=wiecej&id=<?=$_GET['id']?>">
  45. <table bgcolor=3e3e3e border=0 width=600 align=center cellpadding=0 cellspacin
    g=0 class=news>
  46.  
  47. <?
  48. ####################
  49. # Dodawanie koentów
  50. ####################
  51. if($send=='Skomentuj')
  52. {
  53. if (!isset($id) && !isset($tresc))
  54. {
  55. echo "<tr><td><b>Nie wypełniłeś wszystkich pól.</b></td></tr>";
  56. echo "</table>";
  57. }
  58. if (!ereg('[a-zA-Z0-9-.,]+', $tresc))
  59. {
  60. echo "<tr><td><b>Treść zawiera nieprawidłowe znaki.</b></td></tr>";
  61. echo "</table>";
  62. }
  63. $zapytanie = "INSERT INTO `komentarze` values ('', '$_GET[id]', '$autor', '$tresc')";
  64. $wykonaj = mysql_query ($zapytanie);
  65.  
  66. if (!$wykonaj)
  67. {
  68. echo "<tr><td><b>Komentarz nie mógł zostać dodany</b></td></tr>";
  69. echo "</table>";
  70. }
  71. header ('Location: index.php?co=wiecej');
  72. }
  73.  
  74. ?>
  75. <tr><td>Nick:&nbsp;</td><td><input type="text" class="t1" name="autor"></td></tr>
  76. <tr><td>Tresc:&nbsp;</td><td><TEXTAREA name="tresc" rows="4" cols="30" wrap="virtual" style="font-family:verdana, tahoma, sans-serif; font-size:11px; color:#000066; border: 1px solid #000066"></TEXTAREA></td></tr>
  77. <tr><td>&nbsp;</td><td><input type="submit" value="Skomentuj" name="send" class="t1"></td></tr>
  78. </table>
  79. </form>
  80.  
  81. <?
  82. #### STRONY ####
  83. echo "<table border=0 width=600 align=center cellpadding=0 cellspacing=0 class=news>";
  84. echo "<tr><td align=right class=strona>strona: ";
  85. for($i=0;$i<ceil($numrows/$ile);$i++) {
  86. echo '<a class="a1" href="index.php?co=wiecej&amp;id='.$id.'&amp;p='.($i*$ile).'">'.($i+1).'</a> ';
  87. }
  88. echo "</table>";
  89. ?>


index.php
  1. ?>
  2. <html>
  3. <head>
  4.  
  5. <title>Portal Newsowy - v 1.0.</title>
  6. <link rel="stylesheet" href="style.css" type="text/css" />
  7. <link rel="alternate" type="application/rss+xml" title="Ppx.pl - kanal rss" href="rss.php" />
  8. </head>
  9.  
  10. <body><br>
  11. <table border="0" width="600" height="80" align="center" cellpadding="0" cellspacing="0">
  12. <tr>
  13. <td class="news" bgcolor="#3e3e3e" align="left" valign="middle">
  14. <a href="index.php"><img src="img/top.gif" border="0"></a>
  15. </td>
  16. </tr>
  17. </table>
  18. <table border="0" height="25" width="600" align="center" cellpadding="0" cellspacing="0">
  19. <tr><td width="100%" height="100%"></td></tr>
  20. </table>
  21. <?
  22. if($co=="newsy") { include "inc/newsy.php"; }
  23. elseif($co=="viewprofil") { include "inc/profil.php"; }
  24. elseif($co=="wiecej") { include "inc/wiecej.php"; }
  25. else { include "inc/newsy.php"; }
  26. ?><br>
  27. </body>
  28.  
  29. </html>
  30. <? ob_end_flush(); ?>


Proszę bardzo winksmiley.jpg


--------------------
Postura wielka i morda wredna, jestem Balon, kozak z osiedla !
bzdury.pl - Królestwo rozrywki
Go to the top of the page
+Quote Post
Rafiki
post
Post #11





Grupa: Zarejestrowani
Postów: 90
Pomógł: 0
Dołączył: 29.12.2005
Skąd: Z krzaków

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


<?ob_flush();
?>

moze daj na samym poczatku zamiast tego:
<?php ob_start('ob_gzhandler'); ?>

Rownie dobrze moglbys przebudowac troche skrypt i obylo by sie bez buforowania

Edit:
Mysle ze to nie wersja finalna skryptu bo ja sam ( choc niejestem dobry z php ) zauwazylem dosc powazne bledy w tym dodawaniu komentarzy

Ten post edytował Rafiki 13.01.2006, 21:10:13
Go to the top of the page
+Quote Post
crash
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


1. Nie buforujesz tego co trzeba.
2. Buforowanie zaczynasz od ob_flush()? Ciekawe...


--------------------
Go to the top of the page
+Quote Post
Rafiki
post
Post #13





Grupa: Zarejestrowani
Postów: 90
Pomógł: 0
Dołączył: 29.12.2005
Skąd: Z krzaków

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


Cytat
1. Nie buforujesz tego co trzeba.


Moze sie myle ( a to mozliwe smile.gif ale jezeli da na samym poczatku pliku index.php ob_start(); a w nim bedzie includowany plik x.php ( a tak widze ze jest ) powinno byc chyba wszystko ok, bo chyba ob_start bedzie tez dotyczyc includowanego pliku, choc nie jestem pewien tongue.gif

Ten post edytował Rafiki 13.01.2006, 21:13:30
Go to the top of the page
+Quote Post
Balon
post
Post #14





Grupa: Zarejestrowani
Postów: 422
Pomógł: 0
Dołączył: 14.12.2005
Skąd: Wałbrzych

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


Cytat(crash @ 2006-01-13 20:09:22)
1. Nie buforujesz tego co trzeba.
2. Buforowanie zaczynasz od ob_flush()? Ciekawe...

@Crash - nie wiem jaki błąd popełniłem tutaj. Robiłem tak w panelu admina i działało. Więc czy mógłbym Cię prosić o jakieś wskazówki ?


--------------------
Postura wielka i morda wredna, jestem Balon, kozak z osiedla !
bzdury.pl - Królestwo rozrywki
Go to the top of the page
+Quote Post
crash
post
Post #15





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


Rafiki: racja, ale za bardzo tu namieszane i nie widać co jest co.
Balon: aby rozpocząć buforowanie używa się ob_start();


--------------------
Go to the top of the page
+Quote Post
yavaho
post
Post #16





Grupa: Zarejestrowani
Postów: 449
Pomógł: 0
Dołączył: 26.05.2004
Skąd: Nowy Sącz

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


@Balon tworzyles nowy plik index.php tak jak ci radziłem?
Utworz zupelnie nowy plik i nazwij go index.php i wklej do niego kod z tego poprzedniego. Chodzi o to abys calkowicie pozbył sie aktualnego pliku index.php Tylko nie rób kopii tego pliku!

I na poczatku daj:
ob_start" title="Zobacz w manualu php" target="_manual();
a na koncu:
ob_end_flush" title="Zobacz w manualu php" target="_manual();

Jezeli na stronie znajdują sie skrypty ktore pożerają duzo zasobów serwera to wtedy mozesz dac gdzieś pomiedzy nimi w środu strony ob_flush" title="Zobacz w manualu php" target="_manual() flush" title="Zobacz w manualu php" target="_manual(); co spowoduje wysyłanie strony do klienta na "raty".


Albo ten kawałek kodu, ktory odpowiedzialny jest za zapisane komentarzy do bazy wydziel do osobnego pliku, ktory nie bedzie includowany i wtedy niepotrzebne bedzie ob_start(), a po zapisaniu danych do bazy i tak przekieruje do index.php. Tylko wtedy trzeba opracowac inny sposob obslugi bledów.

Ten post edytował yavaho 13.01.2006, 22:35:23


--------------------
Książki informatyczneKsiążki biznesowe
Warsztat: notepad hardcore
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 Aktualny czas: 19.08.2025 - 17:03