IP- oder Session - Sperre für 1 Tag ...

Status
Nicht offen für weitere Antworten.
Hallo und vorab ...
... ich hab jetzt hier schon einige Post zu Reloadsperren oder Mysql-vergleichen reingezogen und leider immer noch nüscht kapiert, ich steig da einfach nicht durch - verdammich noch mal ...
Ich finde auch nirgendwo (auch mit Google) irgendein klitzekleines praktisches Beispiel, welches ich einfach nur anpassen könnte und für meinen Zweck verwenden könnte - Zumindest habe ich rausgelesen, dass es besser wäre, per Sessioncookie oder Mysql-IP-Vergleich anstatt mit Javascript-Cookie zu hantieren, um zu verhindern, dass sinnloserweise in die Shoutbox (Script folgt unten...) mehrmals reingepostet wird.
Aber eine Ip-übergabe ist mit dem momentanen Script ja nicht vorgesehen, also bliebe da einfacherweise nur der Sessioncookie, oder? Also am Liebsten möchte ich nur einen Mysql-Eintrag pro Session und/oder pro Tag zulassen:

Kann mir da jemand einen praktischen Codeschnippsel anbieten, ich bring das nicht auf die Reihe?

Hier der komplette momentane Code - habe das als Zitat eingefügt, da die endlose horizontale Scrollerei bei den PHP-Tags echt nervt:
<?
global $DOCUMENT_ROOT;

//Hier den Pfad zur config.php mit Serververzeichniss angeben !
require("$DOCUMENT_ROOT/.......");

//include"config.php";

if(!mysql_table_exist($dbname,$tblshoutbox))
{
die("Please run installer.php to setup table '$tblshoutbox' in your '$dbname' name");
}

if($HTTP_POST_VARS[yousay]&&$HTTP_POST_VARS[name]):

$date = strftime("%m/%d/%Y",$vntime);
$time = strftime("%H:%M:%S",$vntime);

$yousay=trim($yousay);
$yousay=str_replace("\\","",$yousay);
$yousay=addslashes($yousay);

$save_db="INSERT INTO $tblshoutbox VALUES('','$name','$email','$url','$yousay','".time()."')";
$act_save_db=mysql_db_query($dbname,$save_db,$connection);
endif;
?>

<table width="100%" align="right" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>

<form method="post" id="message">
<table width="100%" align="right" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<input type="text" name="name" size="12" class="textfield" onFocus="if(this.value=='IRGENDWER')this.value=''" onBlur="if(this.value=='')this.value='IRGENDWER'" value="IRGENDWER" maxlength="15">
</td>
<td class="navitext"><b>Name</b>
</td>
</tr><tr>
<td><input name="yousay" type="text" class="textfield" onFocus="if(this.value=='hatte nix zu sagen ...')this.value=''" onBlur="if(this.value=='')this.value='hatte nix zu sagen ...'" value="hatte nix zu sagen ..." size="12" maxlength="66">
</td>
<td class="navitext"><b>Message</b>
</td>
</tr><tr>
<td colspan="2"><input type="submit" value="Nur 1 Versuch ..." class="button">
</td></tr>
</table>
</form>
</tr>

<?
$query=mysql_db_query($dbname,"SELECT * FROM $tblshoutbox ORDER BY id DESC",$connection);
$total=mysql_num_rows($query);

$max = "2";
//$total = "198";

if (! $page > 0) {
$page = 1;
}

if (intval($total/$max)+1 < $page) {
$page=1;
}

if ($total >= $page*$max) {
$lastrec = $page*$max;
}
else {
$lastrec = (($page-1)*$max) + ($total % $max);
}

echo "<tr><td><hr align=\"center\"></td></tr>";

for ($j=($page-1)*$max; $j<$lastrec; $j++):
$p_usr=mysql_result($query,$j,"name");
$p_email=mysql_result($query,$j,"email");
$p_url=mysql_result($query,$j,"url");
$p_say=mysql_result($query,$j,"yousay");
$p_date=mysql_result($query,$j,"insecond");

$date = strftime("%d.%m.%y",$p_date);
$time = strftime("%H:%M",$p_date);

$div_p_say = explode(" ",$p_say);
$count_p_say = count($div_p_say);

for($i=0;$i<=$count_p_say;$i++):

if (ereg("^.+@.+\\..+$", $div_p_say[$i])):
$div_p_say[$i] = "[<a href=\"mailto:$div_p_say[$i]\">e-mail</a>]";
$check = true;
elseif ((eregi("^[http://].+http://www.+\\..",$div_p_say[$i])) || (eregi("www.+\\..",$div_p_say[$i]))):
$div_p_say[$i] = str_replace("http://","",$div_p_say[$i]);
$div_p_say[$i] = "[<a href=\"http://$div_p_say[$i]\" target=\"_blank\">homepage</a>]";
$check = true;
else:
$check = false;
endif;

if((strlen($div_p_say[$i])>20) && ($check==false)):
$div_p_say[$i] = wordwrap($div_p_say[$i],24," ",1);
if(!eregi("^[_\.0-9a-z-]",$div_p_say[$i])):
$newtext .= "{f} ";
else:
$newtext .= $div_p_say[$i].' ';
endif;
else:
$newtext .= $div_p_say[$i].' ';
endif;

endfor;
?>
<tr>
<td class="message"><b><?=$p_usr?></b> am:<br><span style="color:#8B8B7A;font-family:arial;font-size:7pt">[<?=$date?>&nbsp;|&nbsp;<?=$time?>]</span></td>
</tr>
<tr>
<td class="message"><?=$newtext?></td>
</tr>
<tr>
<td><hr align="center"></td>
</tr>
<?
unset($newtext);
endfor;
echo "<tr><td class=\"navitext\">";

echo "<b>goto:</b> ";

////-------- Zurück- und Vorblättern Neu Anfang
$range= 2; // Seitenzahl von der jetzigen Seite - 3 bis + 3 werden angezeigt.

if ($page - $range > 1){ // immer Seite 1 anzeigen, wenn weitergeblättert
echo "<a href=\"$PHP_SELF?page=1\">1</a>";
}

if($page -1 > 0){
echo "<a href=\"$PHP_SELF?page=".($page-1)."\"><<<</a>";
}
//niedrigste Seitenzahl bestimmen und verhindern dass kleiner 1
if ($page - $range <= 0){
$start = 1;
}
else {
$start = $page - $range;
}
// höchste Seitenzahl bestimmen und verhindern dass größer $total und vehindern das leere Seite angezeigt wird
if ($page + $range > $total/$max){
if($total%$max > 0){
$ende = intval($total/$max) +1;
}
else{
$ende = intval($total/$max);
}
}
else {
$ende = $page + $range;
}

for ($i=$start; $i<= $ende; $i++) { // Start und Endwerte einsetzen.
if ($i != $page) {
echo "<a href=\"$PHP_SELF?page=$i\">$i</a>";
}
else {
echo "<span class=\"navizahl\">$i</span>";
}
print " ";
}
if ($page < intval($total/$max)){
echo "<a href=\"$PHP_SELF?page=".($page+1)."\">>>></a>";
}
if ( $page < ($total/$max)-$range){ //Letzte Seitenzahl nur anzeigen wenn sie nicht sowieso schon angezeigt wird ...
if($total%$max > 0){
$ende = intval($total/$max) +1;
echo "<a href=\"$PHP_SELF?page=$ende\">$ende</a>";
}
else{
$ende = intval($total/$max);
echo "<a href=\"$PHP_SELF?page=$ende\">$ende</a>";
}
}
////-------- Zurück- und Vorblättern Neu Ende
echo "</td></tr>";
?>
</table>
Die eingebaute Blätterfunktion stammt übrigens auch aus einer längeren Hilfeaktion dieses Forums ...

Grüße RonMcDon
 
Zuletzt bearbeitet:
warum speicherst du nicht einfach ein cookie auf einem monat, indem drinsteht, das der user schon geschrieben hat!
das überprüfst du einfach, fertig!
 
Vielleicht sollte ich noch darauf hinweisen, dass dieses Shoutboxscript nicht von mir stammt und ich keinen großen Schimmer von PHP und Co habe ...
Ich möchte dieses Teil auch nicht als eine Art Laberbox einbinden, sondern vielmehr als Möglichkeit eine Userspruch des Tages oder so ähnlich anzubringen, daher auch das gewünschte kontrollierte Schreibrecht ...

Und damit:
warum speicherst du nicht einfach ein cookie auf einem monat, indem drinsteht, das der user schon geschrieben hat!
das überprüfst du einfach, fertig!
kann ich null anfangen ...
 
ok, ich war jetzt zu faul den code durchzulesen:-(
wenn das bis morgen noch keiner gemacht hat, dann schreibe ich dir morgen mal eben den code um:-)

€dit:
nur zum verständnis wie ich es machen würde:
wenn man einen spruch gesetzt hat, wird ein cookie gesetzt!
wenn die seite nun wieder aufgerufen wird, wird überprüft, ob das entsprechende cookie gesetzt wurde, jenachdem ist der button zum schreiben sichtbar oder auch nicht:)
 
Zuletzt bearbeitet:
@Opeartor: Also ich möchte nicht, dass Du mich wegen Nötigung verklagst und Du Deine Familie oder Freundin deswegen vernachlässigst ;-) aber natürlich würde ich mich schon bissl freue, wenn sich jemand meiner fehlenden Coderseele erbarmt ...
Ich bin momentan beim kompletten Neubau der eigentlichen Webseite und möchte da eben ein paar dynamische interaktive Goodies mit einbringen - unter anderem eben auch diese abgespeckte Version einer schnellen "Chat"Box ohne Smilie- und Grafikschnickschnack. Mittlerweile kann ich diese sogenannten Shoutboxen, wo nur sinnlos die Smilies rumzappeln und geistloser Test reingetippt wird nicht mehr ersehen ...

Gruß und schon mal danke ...
RonMcDon
 
d.h. heißt, du willst einfach nur nen fomular in dem man schnell einen text schreiben kann und danache keinen mehr, richtig?
also ist es nicht mehr nötig den alten code umzuschreiben?

ok, wenn du willst schreib ich dir schnell so ne "shoutbox" ohne smilies usw.
das mach ich dann mit templates, dann haste keine probleme das design anzupassen und fertig.

schreib hier einfach nochmal genau hin wie du es haben willst, dann müsste ich es bis morgen mal geschafft haben!
 
Dein Codebeispiel ist eine Zumutung. Glaubst du das liest einer?
Unter den Tutorials auf dieser Seite findest du ein Tutorial zu IP/Zeitsperre, die auf dem Server gelöst ist, wobei eine IP-Sperre die länger als 10 Minuten dauert keinen Sinn macht. Außerdem findest du noch eine Bildercodesperre mit der du das automatische Eintragen ( flooden ) verhindern kannst. Ich weiß das so genau, weil beide von mir sind ;). Die helfen dir bestimmt weiter.
 
@Wolfsbein:
... also erstens ist das kein Codeschnippsel, sondern die komplette includefähige Shoutbox - datei, wobei nur noch die Config zur Anbindung an die DB fehlt ...
zweitens ... habe ich auch nicht erwartet, dass sich das hier jemand komplett durchliest, sonder per paste&copy in seinen Editor kopiert - war ja auch nie als Kurzgeschichte fürs Forum gedacht ...
driittens werde ich das mal anguggen, was Du gemeint hast ... ;-)

@Operator_Jon: nein der Code kann so bleiben, es sei denn, dass für diese Floodsperre oder wie man das nennt , notwendig wäre ...
Es funktioniert ja alles soweit wunderbar, bis auf die unkontrollierte Möglichkeit, dort mehrmals hintereinander seinen senf abzugeben - wird ja auch alles in die DB eingetragen, dass muss ja auch nich sein, oder?

fazit, wenn ich mit den angegebenen Tuts von Wolfsheim ;-) äh Wolfsbein nichts anfangen kann, komme ich wieder auf Dein Angebot zurück, ok?

CU Later RonMcDon
 
Status
Nicht offen für weitere Antworten.
Zurück