Um in einem Umfragetool einigermassen realistische Ergebnisse zu erzielen, wird die IP des Teilnehmers sowie dessen Session-ID, die vom Tool automatisch generiert wird in der Datenbank mit abgespeichert. Das Tool prüft dann, ob in den letzten X Sekunden ( X kann eingestellt werden ) bereits ein Abstimmungsergebnis mit der IP des aktuellen Besuchers oder der SessionID des aktuellen Users vorhanden ist. Wenn ja, wird das aktuelle Ergebnis angezeigt und eine Abstimmung wird nicht zugelassen, wenn nicht, kann der User abstimmen.
Bei mir klappt das auch einwandfrei, nur gibt es einen User, der das irgendwie schafft zu umgehen, da ich heute zwischen 0:25 und 0:30 Uhr 42 Abstimmungsergebnisse des Users in der Datenbank hatte. Alle 42 hatten dieselbe IP und dieselbe Session-ID. Und ich weiss nicht, wie er das System umgeht, weil wie gesagt ich beim Testen selbst mit dauerhaftem Drücken von F5 nicht mehr wie ein Ergebnis in die DB eingetragen bekomme.
Hier der Code-Teil mit der Abfrage, ob der User bereits abgestimmt hat:
Code: Alles auswählen
$sql2 ="SELECT count(id) FROM ".$prefix_table."u_replies WHERE un='$un' AND ( ip='".getenv(REMOTE_ADDR)."' OR session='$dclp' ) AND zeit > NOW()-".$cfg[sperrzeit];
if( ($result = $db->sql_query($sql2)) )
{
$r = $db->sql_fetchrow($result);
if($r[0] > 0)
{ $u_action = "result"; }
}
Danke im Voraus
Frank-Andre
P.S. Pro registriertem user nur eine Abstimmung geht nicht, da die Umfragen unter allen Besuchern laufen soll!