Hi, ich überprüfe mit folgender Funktion, ob ein User schon etwas gepostet hat, und verhindere so Spamming:
public function CompareIP() {
$IP = $_SERVER['REMOTE_ADDR'];
$IP = ip2long($IP);
$Date = time();
$DB_IP = mysql_query("SELECT IP,Date FROM test WHERE IP = '$IP'");
if(mysql_affected_rows() == 1) {
while($Row = mysql_fetch_assoc($DB_IP)) {
$CompareDate = $Row['Date'] + 300; // 5min
}
if($Date >= $CompareDate) {
return TRUE;
}
else {
return FALSE;
}
}
else {
// NOCH NICHT ENDGÜLTIG
return TRUE;
}
}
Zur Erklärung: Wenn die IP bereits in der DB gespeichert ist, wird verglichen, ob 300 Sekunden (5min) rum sind, so dass er wieder posten kann. Wenn nein (Bei // NOCH NICHT ENDGÜLTIG) soll er TRUE zurückgeben, da die IP nicht vorhanden ist, da der User noch nicht gepostet hat. Jetzt frage ich mich aber, ob ich das anders als mit "WENN NICHT GENAU EIN DATENSATZ ANGESPROCHEN WURDE" lösen kann. Denn dies ist ja auch der Fall, sollte ein Fehler wider Erwarten auftreten. Stellen wir uns mal vor, durch fehlerhafte Einträge findet er nichts und gibt nun nichts zurück, obwohl der user nicht posten dürfte. Was dann? Dann würde er genau 0 datensätze angesprochen haben, und gibt trotzdem Return TRUE zurück. Habt ihr da eine bessere Idee, wie man testen kann, ob der denn garnicht eingetragen ist?