Spamschutzt in Poll und Gästebuch

meilon

Erfahrenes Mitglied
Hi,
ich habe mir selber ein Gästebuch und Poll auf meine Homepage gespeichert. Nun möchte ich zum schutz, das der Betreffende User innerhalb 2 Stunden einmal ein Vote und einmal ein Gästebucheintrag machen kann, das aber unabhängig. Ich habe aber keinen Plan wie ich das anstellen soll. Ich weis zwar, dass man dafür die IP braucht und da sman die mit PHP auslesen kann, aber ich weiß nicht wie ich mit der IP umgehen soll.

mfg
Klink
 
Dazu gibt es ein Tutorial von mir in der entsprechenden Abteilung. IP/Cookie Sperren bringen in der Regel nichts, aber auch dazu habe ich was geschrieben. Besser ist eine Bildercodesperre für die man einen etwas größeren Aufwand betreiben muss, um sie zu umgehen.
 
Es ist von Vorteil uns zu verraten auf welcher Art der Datenspeicherung dein Gästebuch bzw. Poll basiert (SQL oder txt?)

Grundlegend gesagt speicherst du mit dem Eintrag die IP sowie das aktuelle Datum als Timestamp
PHP:
$ip = getenv("REMOTE_ADDR");
$zeit = time();

Jetzt musst beim "neu-Eintragen" nur noch überprüfen ob es unter den gespeicherten Einträgen schon einen Datensatz gibt, der die gleiche IP hat und inner halb der letzten zwei Stunden verfasst wurde
PHP:
# Daten holen
$checkzeit = time() - 2*60*60;
$sql = "SELECT * FROM gaestebuch WHERE ip = '$ip' AND zeit >= '$checkzeit'";
if(mysql_num_rows($sql) > 0) echo 'Du dafst nocht nicht wieder posten!';
 
Du machst einmal für die Polls und einmal für das Gästebuch eine Tabelle, in der die IP und das Datum (Timestamp) gespeichert wird. Jedesmal, wenn jemand versucht, etwas in das Gästebuch einzutragen (bzw. Poll) wird abgefragt, ob ein Eintrag in der entsprechenden IP-Tabelle existiert, in der die IP = die IP des jenigen der posten will ist und ob dieser Eintrag nicht älter ist als 2 Stunden. Wenn dem so ist, kommt eine Fehlermeldung.

//EDIT: Mist, zu spät
 
Danke schon mal für die schnelle Antwort, aber vodoo, wenn cih deinen 2. Code ausführen lasse kommt das:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /opt/lampp/htdocs/homepage/poll.php on line 12

zudem hab ich deinen SQL-Query abgeändert:
PHP:
$sql = 'SELECT * FROM `iplog_poll` WHERE `ip` = \''.$ip.'\' AND `timestamp` >= \''.$checkzeit.'\'';

Was ist daran falsch?

//EDIT: Dein SQl-Query ist auch richtig, aber wieso auch immer nimmt das Board die Escape-Zeichen weg
 
Zuletzt bearbeitet:
Vielleicht eher so:
PHP:
$sql = "SELECT * FROM `iplog_poll` WHERE `ip` = '".$ip."' AND `timestamp` >= '".$checkzeit."'";
 
nein, immernoch der selbe Fehler. Ich hab keine Ahnung woran das liegt. Der Server sagt mir, das am mysql_num_rows() was Falsch ist, aber was?
 
Nein! Der Fehler besagt, dass das übergebene Argument für die mysql_num_rows-Funktion kein gültiges Query-Ergebnis ist, also das Query fehlgeschlagen ist!

Am besten lässt du dir mal einen aussagekräftigeren Fehler durch [phpf]mysql_error[/phpf] ausgeben! Z.B. so:
PHP:
[...]
if (mysql_num_rows($sql) > 0) {
    echo 'Du dafst nocht nicht wieder posten!';
}
echo mysql_error();
[...]
 
Kann es sein, das du den Befehl mysql_query() noch nicht ausgeführt hast? mysql_num_rows() erwartet als Parameter das Query-Result und nicht den Query-String!
 
Zurück