Hallo Mietz!
Hallo ich hätte da mal ne Frage.
Das ist der häufigste Grund warum SELF-Nutzer hier posten ;-)
Zu Deinem Anliegen möchte ich versuchen Dir ein wenig in die Richtung zu verhelfen, in die Du gehen willst, konkrete Code-Beispiele kann ich Dir allerdings nicht geben, da Du nicht mitgeteilt hast, welche Programmiersprache(n)/Serverumgebung Dir zur Verfügung steht/stehen und welche Du nutzen willst.
Und zwar bräuchte ich ein Abstimmungsscript bei dem eine Eingabe der E-Mail Adresse erfordlerich ist. Anschließend soll quasi eine E-Mail an diese Adresse geschickt werden mit einem Links zu der Abstimmung. Nur wenn man die E-Mail bestätigt also den Links klickt soll die Stimme wirklich gewertet werden. Somit möchte ich vermeide das Ein Benutzer mehrmals abstimmt.
Also ich würde das Script in 3 Teile "zerlegen":
1. Einführungsseite ("Was denken Sie über Blubb? A: Toll, B: Blöd. Ihre E-Mailadresse: [Eingabefeld] [Button:Abstimmen]")
2. Verarbeitung und Information: Eingegebene E-Mailadresse auf halbwegs korrektes Format prüfen (dafür gibts fertige code-schnipsel) und ob der Benutzer schon abgestimmt hat, wenn
JA -> Info Anzeigen "Sie haben bereits abgestimmt, nur eine Stimme pro Benutzer"
NEIN -> Speichern der Auswahl, E-Mailadresse, IP, evtl. weitere Daten (später mehr dazu) und Rückmeldung "Ihre Stimme wurde gespeichert. Sie erhalten in Kürze eine E-Mail mit einem Link zum bestätigen Ihrer Stimme", generieren des Links, E-Mailtext aus vordefinierten Konstanten einbinden und versenden der E-Mail.
3. Verarbeitung der Bestätigung, prüfen der übergebenen Parameter (prüfe alles was von Außen kommt), abgleich der eingegebenen Daten mit der DB und wenn alles stimmig ist kann die Stimme dann in das Abstimmungsergebnis einbezogen werden. Dann nochmal eine Bestätigung und das bisherige Ergebnis der Abstimmung anzeigen.
Natürlich soll man anschließend mit dieser E-Mail Adresse nicht mehr abstimmen können. Zusätzlich sollen cokkies und eine Ip Sperre vorhanden sein.
Die E-Mailadresse kannst Du im 2. Schritt prüfen, wenn Sie schon in der DB vorhanden ist geht's bei NEIN weiter ;-)
Cookies funktionieren natürlich nur, wenn der Browser sie akzeptiert und selbst dann nur, wenn Dein Cookie beim erneuten Aufruf der Abstimmung noch vorhanden ist, es könnte aus verschiedenen Gründen gelöscht worden sein also verlass Dich nicht drauf. Die Cookies liegen beim Benutzer und daher solltest Du darauf nicht zu viel Gewicht legen, lieber baust Du Dir einen serverseitigen Prüfmechanismus.
Eine IP-Sperre ist nicht so das Problem, allerdings sage ich gleich vorweg: denk daran, es könnte eine unbekannte Anzahl Clients hinter einer IP stehen, hier bietet sich eine Kombination mit clientspezifischen Daten an, z.B. Browserkennung, aber auch das kann noch dazu führen, dass Du Benutzer ausschliesst obwohl sie noch nicht teilgenommen haben. Weiterhin ist es ja so, dass die meissten Internetnutzer keine feste IP haben und wenn der Benutzer nach dem Abstimmen seine Internetverbindung neu aufbaut hast Du zwei Probleme:
1. Er kann mit einer anderen E-Mailadresse nochmal abstimmen, weil Du ihn anhand seiner IP nicht mehr ausschliessen kannst (er hat jetzt eine andere).
2. (sehr unwahrscheinlich aber möglich) jemand anderes beim gleichen ISP baut seine Internetverbindung auf und bekommt die IP und will zufällig auch auf Deiner Seite abstimmen, wird aber aufgrund der IP-Sperre ausgeschlossen.
Eine IP-Sperre kannst Du über die DB lösen, einfach die IP und den aktuellen Timestamp (vielleicht in Kombination mit der E-Mailadresse) speichern.
Zuvor solltest Du aber in Schritt 2 überprüfen ob die IP schon in der DB existiert und wenn
JA -> ob der Timestamp mindestens (sagen wir) 6 Stunden alt ist, wenn das gegeben ist kann das Script weiterlaufen, wenn nicht brichst Du mit einer Meldung ab "Von Ihrer IP wurde innerhalb der letzten 6 Stunden bereits abgestimmt" oder so ähnlich.
NEIN -> Die IP wird eingetragen und das Script läuft weiter.
Wenn Du so eine IP-Sperre einbaust, sollte das Script in Schritt 2 gleichzeitig "aufräumen", damit meine ich, dass es bei jedem Aufruf auch gleich guckt, welche IPs schon länger als 6 Stunden in der DB stehen, diese können dann gelöscht werden damit die DB nicht irgendwann explodiert. Am besten lässt Du den Schritt gleich am Anfang durchführen, dann brauchst Du bei der Prüfung der IP nur noch gucken ob die IP in der DB vorhanden ist, wenn ja, dann ist gleich klar, dass der Timestamp noch weniger als 6 Stunden alt ist (sonst hätte die Aufräumfunktion den Eintrag ja gelöscht).
KAnn mir da jemand ein Script empfehlen oder hat zufällig eines zur Hand? Bin für jeden Rat dankbar
Ein fertiges Script dafür weiss ich nicht, frag doch einfach mal Tante Google "Votingscript %scriptsprache%" oder guck mal in einschlägigen Coder-Foren oder Scriptsammlungen.
Abschliessend möchte ich noch anmerken, dass mein Vorschlag weder Perfektion noch Vollständigkeit für sich beansprucht, möglich, dass ich beim drauf-los-erzählen das eine oder andere Detail vergessen habe. Vielleicht ergänzt das ein anderer SELF-Forum-Nutzer noch oder kann Dir eine geeignetere Lösung anbieten.
MFG
Die Mietz
Gruß Basti