re: Shoutbox flood védelem.
Idézet:
geeb eredeti hozzászólása
Sziasztok. Olyan gondom lenne,hogy szeretnék flood védelmet berakni.
Azaz? Ha nem írod le, hogy mit akarsz, akkor nehéz segíteni. Mit szeretnél pontosan? Hogy x másodpercenként csak egy üzenetet küldhessen? Vagy mit?
Egyébként az egész "flood védelmed" az if(isset($_GET['del'])) -en belül van, így csak akkor fog futni, hogyha a $_GET['del']-nek van értéke. Pluz igencsak törhető a dolog egy mysql injecttel. Szerintem valami ilyesmit akarsz:
[QUOTE=geeb;315944] PHP kód:
if (isset($_GET['del']))
{
if (is_numeric($_GET['del']))
{
$query = "SELECT * FROM shoutbox WHERE id=".$_GET['del'];
$result = mysql_query($query);
}
else
{
echo "<center>Hibás üzenet</center>";
exit;
}
$row = mysql_fetch_row($result);
$query = "DELETE FROM shoutbox WHERE id=".$_GET['del'];
mysql_query($query);
}
//flood védelem
if($_SESSION['uzifal'] > time() - 5)
{
print("<center><h2><font color='red'>Ne floodolj!!!!! Legalább 5 mp kell, hogy elteljen az üzeneteid között!<br />Pár másodpercen belül automatikusan visszajutsz az üzenőfalra!</font></h2></center> Ide valami javascriptes átirányítás jön, ami x mp után a csevego.php-ra irányít");
die();
}
$_SESSION['uzifal'] = time();
// flood védelem vége
re: Shoutbox flood védelem.
szia.
Igen azt szeretném,hogy ne tudjon egy user tele nyomni az üzenőfalat millió hurkasággal.:
PHP kód:
if ($_GET["sent"]=="yes" && $_SESSION['uzifal'] > (time() - 5))
{
$res = mysql_query("SELECT * FROM xbt_users WHERE uid=$uid") or die(mysql_error());
if($res1 = mysql_fetch_array($res)){
$userid = $res1['uid'];
$username = $res1['name'];
$date=time();
$text=trim($_GET["shbox_text"]);
mysql_query("INSERT INTO shoutbox (userid, username, date, text) VALUES ('$uid', '$username', '$date','$text')") or die(mysql_error());
}
else {
print("<center><h2><font color='red'>Ne floodolj!!!!! Legalább 2 mp kell, hogy elteljen az üzeneteid között!<br />Pár másodpercen belül automatikusan visszajutsz az üzenőfalra!</font></h2></center>");
header("Location: csevego.php");
die();
}
$_SESSION['uzifal'] = TIME();
/// flood védelem vége
}
Valami ilyesmire gondoltam,hogy a sent (amikor küldeni akar) részbe.
Igazából akkor már jó is lenne a chat.
Köszi előre.
re: Shoutbox flood védelem.
Amúgy mikor a del részbe raktam akkor szépen működött tehát meg volt a az üzenet illetve 5 másodperc után vissza is engedte az oldalra csak az volt a baj mineden egyes üzenet törlésnél csinálta ezt és akkor jöttem rá rossz helyre írtam be. De most mikor a küldés részbe menne nem akar működni.
re: Shoutbox flood védelem.
Ez így kicsit káosz.
Először is: sessionje minden usernek van? Mert ha nem, akkor ne is akarj nálunk sessionben bármit is tárolni, mert az úgy tuti ne fog menni.
Másodszor: a header("Location: akármi"); azonnali átirányítás, nem pár másodperc múlva. Ez így másodperceken keresztül folyamatosan átirányítja a uert, és nagyon csúnya. Inkább JS-el irányítsd, mint ahogy ár leírtam korábban is.
Harmadszor: használj inkább POSt-ot, ne GEt-et.
Negyedszer: gondolkodj. Most azt csinálod, hogyha a $_GET["sent"] az == "yes" ÉS $_SESSION['uzifal'] > (time() - 5) (azaz az elmúlt 5 mp-ben letöltötte az adott oldalt kb), akkor beírod az üzenetet, egyéb esetben pedig a floodolást írod ki. Ezt pont fordítva kéne. Mert így csak akkor megy el az üzenet, hogyha az elmúlt 5 mp-ben frissült az oldal, és minden más esetben kimegy a flood üzenet (akkor is, ha a $_GET["sent"] nem "yes", és akkor is, ha nem az elmúlt 5 mp-ben töltött ele az odlalt).
Ez így totális káosz. Én írtam neked egy működő kódot, amibe csak egy javascript átirányítás kell, és már megy is.
Ötödször: olvass utána a mysql_real_escape_string() függvénynek is, mert jelenleg sokszorosan törhető az adatbázis, nagyon egyszerű trükkökkel.
re: Shoutbox flood védelem.
Így gondoltad? GET parancsot nem cseréltem még le. Ez most teszt mert nekem nem megy most sem...
PHP kód:
//flood védelem
if($_SESSION['uzifal'] > time() - 10)
{
print ("<center><h2><font color='red'>Ne floodolj!!!!! Legalább 5 mp kell, hogy elteljen az üzeneteid között!<br />Pár másodpercen belül automatikusan visszajutsz az üzenőfalra!</font></h2></center>");
print ("<script type='text/javascript'>document.location.href='csevego.php'</script>\n");
die();
}
$_SESSION['uzifal'] = time();
// flood védelem vége
re: Shoutbox flood védelem.
A session el is kell inditani mielott irni/olvasni szeretned. Ez a kod annyi sebbol verzik sajnos, hogy nem is tudok ra mit irni.
re: Shoutbox flood védelem.
Idézet:
geeb eredeti hozzászólása
Így gondoltad? GET parancsot nem cseréltem még le. Ez most teszt mert nekem nem megy most sem...
Így, de ugye azt írod ki, hogy 2 mp-t várjon (miért nem 5-öt? így megint spamnek fog menni), akkor várjon is ennyit, ne legyen azonnali átirányítás.
Egyébként meg amit én is írtam az 1. pontban meg Geri is írt az elég fontos. Elég semmit és használhatatlan a jelenegi kód.
re: Shoutbox flood védelem.
Most erre jutottam.:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/valami.hu/public_html/shoutbox.php on line 385
Ne floodolj!!!!! Legalább 10 mp kell, hogy elteljen az üzeneteid között!
Pár másodpercen belül automatikusan visszajutsz az üzenőfalra!
Warning: Cannot modify header information - headers already sent by (output started at /home/domains/valami.hu/public_html/shoutbox.php:374) in /home/domains/valami.hu/public_html/shoutbox.php on line 397
A Hibaüzenetet így orvosoltam:
PHP kód:
ini_set('display_errors', 0);
Most nincs hibaüzenet.
De annyi lenne még a gondom,hogy mikor írok üzenetet mindig beadja a flood szöveget és nem küldi be az üzenetet.
PHP kód:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if ($_GET["sent"]=="yes")
{
$res = mysql_query("SELECT * FROM xbt_users WHERE uid=$uid");
if($res1 = mysql_fetch_array($res) && $_SESSION['uzifal'] > (time() - 10)){
$userid = $res1['uid'];
$username = $res1['name'];
$date=time();
$text=trim($_GET["shbox_text"]);
mysql_query("INSERT INTO shoutbox (userid, username, date, text) VALUES ('$uid', '$username', '$date','$text')") or die(mysql_error());
}
else {
print("<center><h2><font color='red'>Nyugi! Legalább 10 mp kell, hogy elteljen az üzeneteid között!<br />Pár másodpercen belül automatikusan visszajutsz az üzenőfalra!</font><br><img src='136.gif' height='200' width='150'></h2></center> ");
header("Location: csevego.php");
die();
}
re: Shoutbox flood védelem.
Idézet:
geeb eredeti hozzászólása
A Hibaüzenetet így orvosoltam:
PHP kód:
ini_set('display_errors', 0);
Ez nem a legjobb, mert igy csak elnyomod a hibat de a problema gyokeret nem javitod. A hiba ott lesz, hogy ez a lekerdezes:
PHP kód:
$res = mysql_query("SELECT * FROM xbt_users WHERE uid=$uid");
hibat dob. Innentol mindig az else ag hajtodik vegre. Igy tudod megnezni mi a gond a lekerdezessel:
PHP kód:
$res = mysql_query("SELECT * FROM xbt_users WHERE uid=$uid") or die(mysql_error());
Viszont ezt a kodot elnezve jobban jarsz ha ezt nem rakod fel egy szerverre, mert faek egyszeruen fel lehet torni.