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 :D

    (Link vom Ersteller entfernt)

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

    Der Counter-code

    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 :razz::roll:

    2 Mal editiert, zuletzt von Keksi07 (6. März 2013 um 13:06)

  • [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.

    "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 Mal editiert, zuletzt von SinnlosS (5. März 2013 um 20:08)

  • 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 :D.

    3 Mal editiert, zuletzt von Keksi07 (6. März 2013 um 13:06)

  • 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.

    "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

    Einmal editiert, zuletzt von SinnlosS (5. März 2013 um 21:06)

  • 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 :?

  • 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

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

    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! :D Ich glaube hier werde ich demnächst öfters unterwegs sein^^.