Tom: PHP Session Variable als array

Beitrag lesen

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

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de