Ergebnis 1 bis 7 von 7

Thema: Script wird zweimal ausgeführt

  1. #1
    Youngster
    Registriert seit
    05.03.2013
    Beiträge
    14
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard Script wird zweimal ausgeführt

    Grüße,

    einige kolegen und ich haben mit mühe und not eine kleine website auf die beine gestellt.
    nun habe ich einen hitcounter entworfen welcher mit
    Code:
    <script language="Javascript" src="../counter.php?page=index"></script>
    ausgelöst wird.
    das ?page=index steht hierfür spezifisch für die index seite. der counter hat für jede seite einen eigenen eintrag

    dieser counter funktioniert auch ohne probleme wenn man die seite aktualisiert (F5 drückt). allerdings sobald man per link auf einen anderen bereich der website wechselt (bzw den "startseite" link ancklickt) zählt der counter leider doppelt... und ich habe nicht die geringste ahnung weshalb

    (Link vom Ersteller entfernt)

    der counter soll die gesammten aufrufe, sowie für jede person alle 24 stunden einen aufruf abspeichern.

    Der Counter-code
    Code:
    <?php
    
    error_reporting(E_ALL ^ E_NOTICE);
    
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    
    $unique_hours = 24;         //setzen des stundenabstandes zwischen den einzelaufrufen
    $page = preg_replace('/[^a-zA-Z0-9\-_\.]/','',$_GET['page']);           //setzen der seite welche gecountet werden soll
    $cname = 'gcount_unique_'.$page;            //setzen des cookie namen
    
    $logfile = ("log.txt");         //pfad des logfiles angeben
    if(file_exists("log.txt")){
        $logdata = file_get_contents($logfile);
    }
    $split = explode(",", $logdata);            //spalten aller daten
    
    $splitlength = count($split);          //spalten der gespalteten daten in die einzelwerte
    for($i = 0;$i < $splitlength;$i++){
        $splitsplit[$i] = explode(";", $split[$i]);
    }
    
    for($i = 0;$i < $splitlength;$i++){         //herrausfinden welche seite gecountet werden soll
        if($splitsplit[$i][0] == $page){
            $findpage = $i;
        }
    }
    
    $countall = $splitsplit[$findpage][1];          //counten der gesammten aufrufe
    $countall++;
    $splitsplit[$findpage][1] = $countall;
    
    if (!isset($_COOKIE[$cname])){          //counten der einzelaufrufe alle 24 stunden
        $countday = $splitsplit[$findpage][2];
        $countday++;
        $splitsplit[$findpage][2] = $countday;
    
        header('P3P: CP="NOI NID"');           //setzen des cookie
        setcookie($cname, 1, time()+60*60*$unique_hours);
    }
    
    for($i = 0;$i < $splitlength;$i++){         //zusammenfügen der einzelnen daten
        $splitback[$i] = implode(";", $splitsplit[$i]);
    }
    
    $splitdone = implode(",", $splitback);        //zusammenfügen aller daten
    
    $handle = fopen($logfile, "w");         //schreiben der logs
    fwrite($handle, $splitdone);
    fclose($handle);
    ?>
    Da ich ein relativer neuling in solchen sachen bin, bitte ich darum mich freundlich auf die kleinsten fehler hinzuweisen und nicht zu streng zu sein
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!
    Geändert von Keksi07 (06.03.2013 um 14:06 Uhr)

  2. #2
    Großmeister(in)
    Registriert seit
    09.12.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    666
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: Script wird zweimal ausgeführt

    [Blödsinn, siehe edit]Da du $_GET['page'] in deinem Code verwendest und die URLs der Seiten auf PHP-Dateien leiten gehe ich wohl Recht in der Annahme, dass ihr Mod_Rewrite verwendet um alles nach http://throneofgames.org/ in $_GET['page'] zu schreiben.
    Und jetzt achte mal auf den Unterschied zwischen http://throneofgames.org/ und http://throneofgames.org/index.php
    Ein Besucher der die Seite aufruft wird das index.php nicht miteingeben, also ist da $_GET['page'] leer. Der Startseite-Link verweist aber auf index.php, da steht dann also "index.php" in $_GET['page']. Also ein neuer Eintrag.

    Einfach vor dem Setzen von $cname prüfen ob $page leer ist, und falls ja index.php reinschreiben.[/Blödsinn]

    Im übrigen würde ich für Besucherstatistiken einfach Google Analytics verwenden. Da erfährst du deutlich mehr über das Besucherverhalten, von wo sie auf deine Seite kommen, über welche Suchbegriffe du gefunden wurdest, etc. Da braucht man sich nicht selber mit rumschlagen.

    Edit: Sorry, hatte mich vertan, dass Counter-Script wird ja über die script-src eingebunden. Das es beim normalen Refresh nicht hochzählt liegt vermutlich am Cache. Das es ansonsten immer wieder zählt liegt daran, dass du über so eine Einbindung keine Cookies setzen kannst. Das muss direkt auf der Seite die der Besucher aufruft selber geschehen. Schau mal in deinem Browser nach, bei mir ist ein einziger Cookie von throneofgames.org gesetzt, und das ist PHPSESSID, also der für die Session. Deine Cookies werden über das eingebundene Skript nicht gesetzt.
    Geändert von SinnlosS (05.03.2013 um 21:08 Uhr)
    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  3. #3
    Youngster
    Themenstarter

    Registriert seit
    05.03.2013
    Beiträge
    14
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Script wird zweimal ausgeführt

    Danke für die schnelle Antwort,

    ich finde auch das Google Analytics eine weitaus angenehmere Methode dafür ist, jedoch wollte ich mal austesten wieweit ich schon sachen eigenständig basteln kann -> Lernprozess .


    Die Coockies werden anscheinend doch gesetzt (nicht auf der Index-seite sondern auf der Counter-seite). Siehe auch: (Link vom Ersteller entfernt)
    Zumindest wird dort nichtmehr gecountet wenn ich die Seite erneut aufrufe.

    Der ... ich nenne ihm mal "24h Counter"... wird wie geplant nur einmal gezählt. Der normale Counter steigt um +1 wenn ich F5 drücke und um +2 wenn ich z.b. die Seite komplett neu aufrufe oder auf "Startseite" klicke (dies gilt für alle dortigen Seiten).

    Das $_GET['page'] ist lediglich dafür da umherrauszufiltern welche Seite gecountet werden soll und wird nur beim Starten des scripts auf der jeweiligen Seite ausgegeben.
    für die Index wäre es
    Code:
    <script language="Javascript" src="../counter.php?page=index"></script>
    für die FAQ wäre es hingegen
    Code:
    <script language="Javascript" src="../counter.php?page=faq"></script>
    Ich bin in höchstem Maße verwirrt .
    Geändert von Keksi07 (06.03.2013 um 14:06 Uhr)

  4. #4
    Großmeister(in)
    Registriert seit
    09.12.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    666
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: Script wird zweimal ausgeführt

    Hast du irgendetwas geändert? Jetzt wird mir für jede aufgerufene Seite ein Cookie gesetzt, vorhin war es wie erwähnt nur einer für die Session.

    Und dass der normale Counter um 1 steigt beim F5 ist ja klar, der wird ja auch ohne Prüfung ob der Cookie existiert schon erhöht. Die Prüfung greift ja nur beim erhöhen des $countday.

    Edit:
    Ergänzung: $countall zählt bei dir aktuell komplett alle Seitenaufrufe, egal von welchem Benutzer und wie oft er F5 drückt, $countday zählt von jedem Besucher der deine Cookies akzeptiert pro Seite einen Aufruf.
    Geändert von SinnlosS (05.03.2013 um 22:06 Uhr)
    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  5. #5
    Youngster
    Themenstarter

    Registriert seit
    05.03.2013
    Beiträge
    14
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Script wird zweimal ausgeführt

    Nein ich habe nix verändert.

    Das ist richtig. $countall zählt alle Aufrufe und $countday zählt einen Aufruf, setzt einen Coockie und zählt erst wieder nach 24 Stunden.
    Mein Problem ist jetzt, das $countall für jeden Seitenaufruf um 2 und bei aktualisierungen um 1 steigt und nicht, wie geplant,immer um 1. Ergo: hätte ich 100 Aufrufe wäre der Counter bei 200(bzw. zwischen 150 und 200... je nachdem ob die Seite nur aktualisiert worden ist oder komplett neu aufgerufen worde).

    Irgendwo muss da etwas doppelt laufen

  6. #6
    Großmeister(in)
    Registriert seit
    09.12.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    666
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: Script wird zweimal ausgeführt

    Wenn der Counter 2x erhöht wird, wird das Skript 2x aufgerufen. Der Code da oben erhöht nur um 1 pro Durchlauf.
    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  7. #7
    Youngster
    Themenstarter

    Registriert seit
    05.03.2013
    Beiträge
    14
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Script wird zweimal ausgeführt

    Der Fehler liegt anscheinend an meinem Opera... Mit Firefox, Chrome und IE zählt er nur um 1 hoch... so wie es sein sollte .

    In diesem sinne sage ich mal: Problem gelöst.

    Ps: Dies ist das erste Forum wo man als Anfänger nicht sofort mit Fackeln und Heugabeln rausgeworfen wird... I Like! Ich glaube hier werde ich demnächst öfters unterwegs sein^^.

Ähnliche Themen

  1. Interval wird nur einmal ausgeführt?
    Von Bleistift im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 4
    Letzter Beitrag: 09.12.2012, 21:22
  2. setTimeout wird nicht ausgeführt
    Von MyXoToD im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 4
    Letzter Beitrag: 12.10.2011, 22:52
  3. Flash wird nicht angezeigt/ausgeführt...
    Von klakie im Forum Flash Forum
    Antworten: 2
    Letzter Beitrag: 24.07.2010, 21:48
  4. Mysql Query wird nicht ausgeführt??
    Von JDF1976 im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 26
    Letzter Beitrag: 18.01.2007, 19:23
  5. php-script wird doppelt ausgeführt
    Von GU4RDI4N im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 8
    Letzter Beitrag: 29.01.2006, 23:01

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •