-
06.09.09 21:02 #1
- Registriert seit
- May 2007
- Beiträge
- 17
Hallo Leute,
wie kann ich eine Cookiesperre bis zu jedem Mittwoch realisieren?
Hier liegt die Cookiesperre bei einer Minute.PHP-Code:if (isset ($_POST["ergebnis"])) {
// Aktuelle Sperre 1 Minute
// 30 Tage Sperre time()+60*60*24*30
setcookie("abgestimmt", "ja", time() + 60);
}
Also die Cookiesperre soll jeden Mittwoch aufgehoben werden, auch wenn erst dienstags gevoted wurde.
Habe das :
schon probiert, denke aber, dass das quatsch ist.PHP-Code:if(isset ($_POST["ergebnis"])) {
setcookie("abgestimmt", "ja", date('l') == 'Wednesday');
}
Jmd eine Idee?
Vielen Dank.
Gruß
Chris
-
06.09.09 21:07 #2
- Registriert seit
- Mar 2009
- Beiträge
- 171
1. Ergebnis bei Googlesuche=wochentag ermitteln php
http://forum.de.selfhtml.org/archiv/2003/9/t58235/
In diesem Beitrag steht eigentlich alles, was Du brauchst.
-
06.09.09 23:08 #3
- Registriert seit
- May 2007
- Beiträge
- 17
Hi,
sry, aber so wirklich komm ich noch nicht dahinter.
Ich will für ein Votingsystem eine Zeitsperre von einer Woche realisieren. Dabei soll das Voting jeden Mittwoch Abend zurückgesetzt werden, so, dass neu gevoted werden kann. Das ganze wenn möglich automatisch, für jede Woche neu.
Aber du hast recht, wenn du sagst, dass ich erstmal den Wochentag Mittwoch ermitteln muss, nur wie funktioniert das genau? Jeder Mittwoch soll automatisch erkannt werden.
Währe für weitere Infos dankbar.
Gruß
Chris
-
06.09.09 23:15 #4
- Registriert seit
- Mar 2009
- Beiträge
- 171
Wenn Du Dich beeilst, kommt noch "Sunday" raus.PHP-Code:<? print date("l",time())."<br>\n"; ?>
-
-
07.09.09 12:08 #6
- Registriert seit
- May 2007
- Beiträge
- 17
Hallo Sven,
du hast recht! PHP kann manchmal so einfach sein
Vielen Dank!
Vielleicht wisst Ihr auch eine Lösung für mein nächstes Problem.
Die Auswertung wird grafisch dargestellt. Die votings werden in einer Textdatei gezählt. Wie kann ich diese Textdatei jede Woche zurücksetzen? Muss man die überschreiben lassen oder wie geht man da logisch ran?
Gruß
Christoph
-
07.09.09 12:14 #7
- Registriert seit
- Mar 2009
- Beiträge
- 171
fopen() Schalter "w"
-
Ob überschrieben werden muss, kannst du prüfen, indem du nachschaust, ob
strtotime("last Wednesday"))
und
strtotime("last Wednesday",filemtime('pfad/zur/datei.txt'))
unterschiedliche Werte aufweisen.
(Ich hoffe, ich hab da jetzt keinen Denkfehler
)
-
07.09.09 13:20 #9
- Registriert seit
- May 2007
- Beiträge
- 17
Könnte man das so machen:
order soPHP-Code:$datei = "daten/stimmen.txt";
if (strtotime("Wednesday")){
$handle = fopen($datei, "w");
}
fclose($handle);
? Vielleicht sind auch beide Varianten falsch.PHP-Code:if (date("l") == "Wednesday") {
$handle = fopen($datei, "w");
}
Gruß
Chris
-
Mit deinen Varianten würdest du den ganzen Mittwoch lang die Daten überschreiben.
Und wenn niemand am Mittwoch abstimmt, werden die Daten nicht gelöscht.
-
07.09.09 15:43 #11
- Registriert seit
- May 2007
- Beiträge
- 17
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 :
Codesegment mit einfügen?PHP-Code:if(isset ($_POST["ergebnis"])) {
setcookie("abgestimmt", "ja", strtotime("next Wednesday"));
}
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 :1 2 3 4 5 6 7 8 9 10 11
<?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.
-
08.09.09 00:10 #13
- Registriert seit
- May 2007
- Beiträge
- 17
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?
Sry für die Frage, aber ich habe noch viel Nachhohlbedarf. Viele Sachen erscheinen mir aufgrund der Unwissenheit noch sehr kurios.PHP-Code: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);
}
}
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 :1 2 3 4 5
if (strtotime("last Tuesday") != strtotime("last Tuesday", filemtime($datei))) { [COLOR="Red"] $stimmen = fopen($datei, "w");[/COLOR] } else { $stimmen[$_POST["ergebnis"]]++; }
Du brauchst da ja einen Array, hast aber ein Dateihandle.
Diesen Array kannst du dir per array_fill() 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.
-
08.09.09 11:17 #15
- Registriert seit
- May 2007
- Beiträge
- 17
Hi Sven,
meinst du so:
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?PHP-Code:if (strtotime("last Tuesday") != strtotime("last Tuesday", filemtime($datei))) {
$stimmen = array_fill(1, 12, $datei);
} else {
$stimmen[$_POST["ergebnis"]]++;
}
Vielen Dank vorab!
Gruß
Chris



2Danke

Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren