Cookiesperre bis Mittwochs

Hi Sven,

ich würde deine Variante gern ausprobieren, nur weiß ich nicht, was du mit "Werte vergleichen" meinst?

Kann ich die zurücksetzung der txt in diesem :

PHP:
if(isset ($_POST["ergebnis"])) {
setcookie("abgestimmt", "ja", strtotime("next Wednesday"));
}

Codesegment mit einfügen?

Ich weiß nicht so recht, wo genau ich diese Passage im Code einfügen soll. Wie gesagt, bin noch am lernen :) Sry :/

Viele Grüße
Chris
 
OK, war doch nen Denkfehler dabei :-)

So ist es gemeint mit dem Vergleich:
Code:
<?php

if(strtotime("last Tuesday")!=strtotime("last Tuesday",filemtime('datei.txt')))
{
  //Ergebnisse Resetten
}
else
{
  //Ergebnisse Updaten
}
?>

Du musst also beim Zeitstring einen Tag vor dem Tag angeben, an dem du Resetten willst.

Angenommen, heute ist Mittwoch.
Dann liefert strtotime("last Tuesday") die Zeit von Gestern.
wurde heute bereits die Datei geändert, dann liefert strtotime("last Tuesday",filemtime('datei.txt')) ebenfalls das Datum von gestern.

Wurde die Datei jedoch heute noch nicht geändert, dann liefert strtotime("last Tuesday",filemtime('datei.txt')) einen anderen Dienstag als den gestrigen, der Vergleich schlägt fehl und du kannst Resetten.

Beim nächsten Aufruf wird dann nicht mehr resettet, weil durch die vorrangegangene Aktion das Änderungsdatum der Datei(welches ja per filemtime ausgelesen wird) geändert wurde.
 
Aha ok, das ergibt Sinn.

Jetzt mal ganz blöd gefragt.
Ist an dein Code an dieser Stelle des Scriptes richtig gesetzt und wie weiß ich, wo was richtig ist?

PHP:
if (empty ($_COOKIE["abgestimmt"]) && isset ($_POST["ergebnis"])) {
		// Dateiname in Variable speichern
		$datei = "daten/stimmen.txt";		
		// Datei vorhanden?
		if (file_exists($datei)) {
			$fp = fopen($datei, "r+");
		} else {
			$fp = fopen($datei, "w");
		}
		// Datei einlesen
		$stimmen = fread($fp, filesize($datei));

		// String aus Datei in Array zerlegen
		$stimmen = explode(",", $stimmen);
		
		if (strtotime("last Tuesday") != strtotime("last Tuesday", filemtime($datei))) {
			$stimmen = fopen($datei, "w");
		} else {
			$stimmen[$_POST["ergebnis"]]++;
		}
		// Der gewählte Punkt wird um 1 erhöht!
		//$stimmen[$_POST["ergebnis"]]++;

		// Stimmen in einem String zusammensetzen
		for ($i = 0; $i < $anzahl; $i++) {
			$total .= $stimmen[$i] . ",";
		}

		// Neuen String in Datei schreiben
		rewind($fp);
		fputs($fp, $total);
		fclose($fp);
	}
}

Sry für die Frage, aber ich habe noch viel Nachhohlbedarf. Viele Sachen erscheinen mir aufgrund der Unwissenheit noch sehr kurios.

Aber nochmals danke für deine Mühe.

Gruß
Chris
 
Die Stelle sieht sehr gut aus, es wird aber noch nicht ganz funktionieren.

Dies hier(das rot markierte)
Code:
if (strtotime("last Tuesday") != strtotime("last Tuesday", filemtime($datei))) {
            $stimmen = fopen($datei, "w");
        } else {
            $stimmen[$_POST["ergebnis"]]++;
        }

Du brauchst da ja einen Array, hast aber ein Dateihandle.

Diesen Array kannst du dir per [phpf]array_fill[/phpf] erstellen lassen.
Und nicht vergessen, auch in diesem Array den Index $_POST["ergebnis"] hochzuzählen, sonst wird die erste Stimme nach dem reset nicht gezählt.

BTW: finde ich gut, dass du das alleine probierst.
Es gibt bestimmt 1Million Skripte dafür im Netz...aber wenn man etwas Fertiges benutzt, lernt man schliesslich nichts. :)
 
Hi Sven,

meinst du so:

PHP:
if (strtotime("last Tuesday") != strtotime("last Tuesday", filemtime($datei))) {
			$stimmen = array_fill(1, 12, $datei);
		} else {
			$stimmen[$_POST["ergebnis"]]++;
		}

Kannst du mir bitte das array_fill an dieser Stelle genauer erklären? Ich weiß, was es macht, aber wozu an dieser Stelle und mit welchen Werten?

Vielen Dank vorab!

Gruß
Chris
 
Also zu array_fill()

Das erstellt halt einen neuen Array und füllt ihn.
Das 1. Argument gibt den index an, ab dem gefüllt werden soll
Das 2. Argument die Anzahl der zu erstellenden Elemente
Das 3. den Inhalt, mit dem die Elemente gefüllt werden sollen.


Demnach sollte dies bei dir Sinn machen:
Code:
$stimmen = array_fill(0, $anzahl, '0');
...ist bspw. $anzahl 3, hast du danach einen Array:
Code:
array('0','0','0')

Du brauchst das hochzählen auch garnicht in den else-Abzweig zu Tun, denn folgendes:
Code:
if (strtotime("last Tuesday") 
    != strtotime("last Tuesday", filemtime($datei))) 
    {
      $stimmen = array_fill(0, $anzahl, '0');
    }

$stimmen[$_POST["ergebnis"]]++;
macht genau, was du benötigst.
Wenn resettet wurde, existiert der neue Array $stimmen mit den Nullen, andernfalls der alte.
Es kann also in beiden Fällen hochgezählt werden.
 
Hi Sven,

das klingt logisch.

Wie kann ich das jetzt genau testen?
Dass das Voting jeden Mittwoch neu startet funktioniert, aber ich hab das Gefühl, dass die txt nicht von vorne gezählt oder überschrieben wird?

Die alten Voting bleiben anscheinend erhalten.

Ich danke dir auf jeden schon mal für alles. Hoffe ich gehe dir nicht auf den Sa.....!:)

Gruß
Chris
 
Das Testen ist recht kompliziert, würde ich sagen, zumindest wenn der Webserver nicht dein eigener ist.

Hast du daheim einen Webserver zum Testen installiert?
 
Du könntest die Uhrzeit umstellen :-)

Also erstmal die Uhrzeit auf Dienstag umstellen, und dann abstimmen(Datei sollte jetzt das Änderungsdatum von gestern haben).
Dann die Uhr vorstellen auf Mittwoch...und wieder abstimmen.
Das Skript sollte jetzt erstmal Resetten.

Du könntest auch versuchen, das Änderungsdatum der Datei auch per Hand zu setzen->[phpf]touch[/phpf], muss aber nicht unbedingt sein, dass das funktioniert.
 
Zurück