tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
25
ZUGRIFFE
592
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    chris4life chris4life ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    17
    Hallo Leute,

    wie kann ich eine Cookiesperre bis zu jedem Mittwoch realisieren?

    PHP-Code:
    if (isset ($_POST["ergebnis"])) {
        
    // Aktuelle Sperre 1 Minute
        // 30 Tage Sperre time()+60*60*24*30
        
    setcookie("abgestimmt""ja"time() + 60);

    Hier liegt die Cookiesperre bei einer Minute.

    Also die Cookiesperre soll jeden Mittwoch aufgehoben werden, auch wenn erst dienstags gevoted wurde.

    Habe das :
    PHP-Code:
    if(isset ($_POST["ergebnis"])) {
    setcookie("abgestimmt""ja"date('l') == 'Wednesday');

    schon probiert, denke aber, dass das quatsch ist.

    Jmd eine Idee?

    Vielen Dank.
    Gruß
    Chris
     

  2. #2
    Registrierer Registrierer ist offline Mitglied Gold
    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.
    einfach nur crack bedankt sich. 

  3. #3
    chris4life chris4life ist offline Mitglied
    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
     

  4. #4
    Registrierer Registrierer ist offline Mitglied Gold
    Registriert seit
    Mar 2009
    Beiträge
    171
    PHP-Code:
    <? print date("l",time())."<br>\n"?>
    Wenn Du Dich beeilst, kommt noch "Sunday" raus.
     

  5. #5
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    PHP kann manchmal so einfach sein
    PHP-Code:
    strtotime("next Wednesday"
     

  6. #6
    chris4life chris4life ist offline Mitglied
    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
     

  7. #7
    Registrierer Registrierer ist offline Mitglied Gold
    Registriert seit
    Mar 2009
    Beiträge
    171
    fopen() Schalter "w"
     

  8. #8
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    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 )
     

  9. #9
    chris4life chris4life ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    17
    Könnte man das so machen:

    PHP-Code:
    $datei "daten/stimmen.txt";

    if (
    strtotime("Wednesday")){
                
    $handle fopen($datei"w");
            }
            
    fclose($handle); 
    order so

    PHP-Code:
    if (date("l") == "Wednesday") {
                          
    $handle fopen($datei"w");

    ? Vielleicht sind auch beide Varianten falsch.

    Gruß
    Chris
     

  10. #10
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    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.
     

  11. #11
    chris4life chris4life ist offline Mitglied
    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 :

    PHP-Code:
    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
     

  12. #12
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    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.
     

  13. #13
    chris4life chris4life ist offline Mitglied
    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?

    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($fpfilesize($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
    Sven Mintel bedankt sich. 

  14. #14
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    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.
     

  15. #15
    chris4life chris4life ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    17
    Hi Sven,

    meinst du so:

    PHP-Code:
    if (strtotime("last Tuesday") != strtotime("last Tuesday"filemtime($datei))) {
                
    $stimmen array_fill(112$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