eigenes Counter Script

  • Da ich mit keinem der ganzen Grafischen Counter zufrieden bin/war und ich außerdem reinen Text wollte habe ich mir mal schnell mein eigenes geschrieben mit 3 Werten die zur Analyse bereit stehen aussehen tut das ganze dann ca. so:

    Zitat

    Seitenaufrufe: 99 | Besucher: 27 | unterschiedliche Besucher: 26


    Zu erwähnen wäre das das ganze auf einem URl-System besteht welches immer index.php?site=Seitenname ist, falls das bei euch nicht so ist müsstet ihr das ganze leicht abwandeln, dazu aber später.

    Als erstes zu den DB-Tabellen:
    counter_pages
    [TABLE='class: grid, align: left']

    [tr][td]

    page

    [/td][td]

    count

    [/td][/tr][tr][td]

    home

    [/td][td]

    5

    [/td][/tr][tr][td]

    varchar(20)

    [/td][td]

    varchar(50)

    [/td][/tr]


    [/TABLE]


    Achja, für "count" ist ein Standard-Wert von 0 zu setzen.

    counter_user

    [TABLE='class: grid, align: left']

    [tr][td]

    ip

    [/td][td]

    timestamp

    [/td][td]

    anzahl

    [/td][/tr][tr][td]

    000.000.00.000

    [/td][td]

    1314370503

    [/td][td]

    1

    [/td][/tr][tr][td]

    varchar(20)

    [/td][td]

    varchar(50)

    [/td][td]

    varchar(50)

    [/td][/tr]


    [/TABLE]

    Und hier bekommt die Spalte "timestamp" einen Wert der mehr als 24h zurückliegt, z.B.: 1314370503 und "anzahl" bekommt einen Standard-Wert von 1 zugewiesen.
    Das fette sind die Spaltenbezeichnungen und das fett-unterstrichene sind die Primärschlüssel, für alles habe ich die Kollation "latin1_german1_ci" verwendet.

    Dann zu dem php-Script welches ihr am besten per include auf der index.php Seite einbindet oder falls ihr nicht mit index.php?site=Seitenname arbeitet dann auf jeder Seite.

    So, dann zu der Ausgabe der Variablen, funktioniert nur auf Seiten wo auch das Script eingebunden ist:

    HTML
    Seitenaufrufe: <?php echo $count_page; ?> | Besucher: <?php echo $count_user; ?></span> | unterschiedliche Besucher: <?php echo $num_rows_num; ?>


    gestalten müsstet ihr es euch noch selber, ich habe es für meinen Footer z.B. so gemacht:

    HTML
    <span class="description">Seitenaufrufe: <span style="color: #000000;"><?php echo $count_page; ?></span> | Besucher: <span style="color: #000000;"><?php echo $count_user; ?></span> | unterschiedliche Besucher: <span style="color: #000000;"><?php echo $num_rows_num; ?></span></span>

    die CSS dazu sieht so aus:

    So, nun zu der Änderung die gemacht werden muss wenn ihr den Dateinamen nicht per GET-Variable auslesen könnt:

    PHP
    // Dateinamen inklusive Endung(.html .php etc.) auslesen
    $site = substr($_SERVER['SCRIPT_NAME'],strrpos($_SERVER['SCRIPT_NAME'],"/")+1);


    Und dann an den zwei Stellen wo $_GET['site'] vorkommt das ganze durch $site ersetzen und schon ist es wieder fertig, in der DB müsst ihr dann nur noch die Dateinamen mit der Endung eintragen.

    Alle die das per GET-Variable lösen können müssen dann alle GET-Variablen-Inhalte wofür sie das haben wollen in die DB eintragen und dann läuft das Script.

    Ich hoffe, dass ich euch damit etwas weiterhelfen konnte und falls es von den Profis noch Kritik daran gibt dann immer her damit, und falls ich das Script irgendwie erweiter schreibe ich es natürlich auch noch. ;)

    MfG

  • Code habe ich mir noch nicht angeschaut, nur grad mal überflogen, und zu deinen Tabellen muss ich sagen: Katastrophe.
    Wie zur Hölle kommst du auf die Idee alle Spalten als VARCHAR zu deklarieren???

    IP-Adressen werden als unsigned INT(10) gespeichert, zum schreiben bzw. auslesen gibt es die SQL-Funktionen INET_ATON und INET_NTOA.
    Timestamps werden als Timestamp (oder zur Not Datetime) gespeichert, aber ganz sicher nicht als VARCHAR, das ist ja noch schlimmer als INT.
    Und wie kommst du bei `count`/`anzahl` darauf als Feldtyp VARCHAR zu nehmen? Was soll denn eindeutiger ein INT-Wert sein als ein Counter?
    Davon abgesehen ist auch die unterschiedliche Benennung mit deutschen und englischen Begriffen nicht schön. Man nimmt entweder englische Bezeichner (zu empfehlen) oder deutsch, aber kein MischMasch.

    Ich würde außerdem nicht nur anhand der IP-Adresse nach einmaligen Besuchern differenzieren. Was ist mit Schulen, Unis, Inet-Cafes undundund?
    http://phpforum.de/forum/showthread.php?t=216531Schau dir da mal die Punkte Browsersignatur/Browsermarker an um einen Besucher etwas sicherer eindeutig zu identifizieren.

    Also grundlegend mag das schon ganz nett sein, ist aber sicherlich noch ausbaufähig.

    Nicht böse gemeint, sondern als konstruktive Anregung.

    "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

  • Da kann ich SinnlosS nur zustimmen - wieso deklarierst du alles als varchar?? Ich hab das Script jetzt auch nur mal überflogen aber inkrementierst du die Seitenbesucher wirklich in PHP und übergibst sie dann wieder der Tabelle ?? :shock:

    PHP
    if(isset($this) || !isset($this)){ // that's the question...