Hello,
das mit den verschiedenen Browsern ist mir schon klar. Das ganze soll aber so unkompliziert wie möglich bleiben. D.h. kein Benutzerregistrierung o.ä. Das ganze ist nicht auf meinem Mist gewachsen. Es ist ein Kumpel von mir, der das so will.
Ist das ganze mit der Session und dem Array überhaupt möglich?
Eine Session ist immer auf eine Sitzung bezogen. Das wäre nämlich so ungefähr die deutsche Übersetzung für das Wort. 'Sitzung' bedeutet in diesem Falle, dass nach dem Spülen nichts mehr da sein sollte *äh*, nach dem Schließen des Browsers die Benutzerbezogenen Daten verschwunden sind.
Du kannst jetzt eine Krücke bauen, die dir für diese niedirgen Anforderungen erstmal ein Stückchen weiter hilft. Das ist kein zuverlässiges und kein ordentliches Verfahren, warum, das magst Du hier bitte im Archiv nachlesen. Aber für die Praxis reicht es hier vermutlich aus:
Baue Dir eine "IP-Sperre".
Das bedeutet, dass Du in einer Datei, die durch alle User erreichbar ist, ein Array für die Abstimmungen aufbaust in der Form:
$_abstimmungen = array();
$_abstimmungen['name_der_abstimmung'] = array();
$_abstimmungen['name_der_abstimmung']['IP_des_clients'] = time();
anstelle von time() könntest Du natürlich auch hinschreiben, wie der Typ gestimmt hat
Das ist aber günstiger, das Array dann noch zu erweitern
$_abstimmungen['name_der_abstimmung']['moeglichkeit_1']['IP_des_clients'] = time();
$_abstimmungen['name_der_abstimmung']['moeglichkeit_2']['IP_des_clients'] = time();
$_abstimmungen['name_der_abstimmung']['moeglichkeit_3']['IP_des_clients'] = time();
Der Vorteil dieser Aufteilung lkieget darin, dass man später für die Auswertung nur die Eintragungen in der "Spalte" $_abstimmungen['name_der_abstimmung']['moeglichkeit_3']
zählen muss mit dem Befehl count()
http://de3.php.net/manual/en/function.count.php
Dieses Array kannst Du dann serialisieren mit
http://de3.php.net/manual/en/function.serialize.php
und mit
$fh = fopen( 'pfad_und_name_der_abstimmungsdatei', 'rb+' );
if ($fh)
{
if ( flock( $fh, LOCK_EX )
{
$dateiinhalt = auslesen($fh); ## Funktion auslesen() musst Du selber schreiben
$_abstimmungen = unserialize($dateiinhalt);
## wenn Du willst, hier noch prüfen, wenn schon abgestimmt war,
## oder einfach letzte Meinung überschreiben oder hinzufügen:
$_abstimmungen['name_der_abstimmung']['IP_des_clients'] = time();
## Array wieder serialisieren
$dateiinhalt = serialize($_abstimmungen);
## Dateizeiger an den Anfang der Datei zurück setzen
fseek($fh, 0, SEEK_SET);
## Dateiinhalt zurückschreiben
fwrite($fh, $dateiinhalt);
## und Länge der Datei auf neue Arraylänge kürzen, was entfallen kann
## wenn das array immer nur größer werden kann
# ftruncate($fh, strlen($dateiinhalt));
}
## und Datei schließen, damit die Inhalte tatsächlich geschrieben werden
## und die Datei für den nächsten Wähler freigegeben wird
flocse($fh);
}
http://de3.php.net/manual/en/function.fopen.php
http://de3.php.net/manual/en/function.flock.php
http://de3.php.net/manual/en/function.fseek.php
http://de3.php.net/manual/en/function.fclose.php
Mit diesen Informationen solltest Du nun zum Ziel kommen. Spenden nehme ich gerne entgegen ;-)
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg