bug: function statsArchive($yearmonth)

Gesperrt
emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

bug: function statsArchive($yearmonth)

Beitrag von emergence » Di 14. Okt 2003, 08:44

ähm tja wieder mal 2 fehler gefunden die mir besonders viel freude bereiten :-) und einer der noch besser ist... (wenn man nicht genug traffic hat)

in der datei contenido/includes/functions.stat.php
1. die variable die für $yearmonth übergeben wird funktioniert bei den monaten 1-9 nicht ! der grund ist einfach der das die eintragung des werts bei september zB so aussieht 2003 9 und nicht 200309
d.h die auflistung der archivierten statistiken funktioniert nicht bei diesen monaten. vielleicht liegts ja an meiner php version 4.0.6
ich habe mich jetzt mal damit beholfen und diese zeile eingefügt

$yearmonth = ereg_replace (" ", "0", $yearmonth);
(für mich funktionierts)

2. nach dem das statement
$sql = "DELETE FROM ".$cfg["tab"]["stat"];
ausgeführt wurde werden bei der statistik keine werte mehr eingetragen, da die tabelle con_stats leer ist.
wie wärs die einträge wieder gänzlich neu zu erzeugen und alle werte dieses monats auf 0 zu setzen.

hier mein code um diese beiden mankos zu beheben:

Code: Alles auswählen

function statsArchive($yearmonth)
{
    global $cfg, $db;

    $yearmonth = ereg_replace (" ", "0", $yearmonth);

    $db2 = new DB_Contenido;

    $sql = "SELECT
                idcatart, idlang, idclient, visited, visitdate
            FROM
                ".$cfg["tab"]["stat"];

    $db->query($sql);

    while ($db->next_record())
    {
        $insertSQL = "INSERT INTO
                          ".$cfg["tab"]["stat_archive"]."
                          ( idstatarch, archived, idcatart, idlang, idclient, visited, visitdate)
                      VALUES
                          (".$db2->nextid($cfg["tab"]["stat_archive"]).",
                           ".$yearmonth.",
                           ".$db->f(0).",
                           ".$db->f(1).",
                           ".$db->f(2).",
                           ".$db->f(3).",
                           ".$db->f(4).")";

        $db2->query($insertSQL);
    }

    $sql = "DELETE FROM ".$cfg["tab"]["stat"];
    $db->query($sql);

    // Recreate empty stats
    $sql = "SELECT
                A.idcatart,
                B.idclient,
                C.idlang
            FROM
                ".$cfg["tab"]["cat_art"]." AS A INNER JOIN
                ".$cfg["tab"]["cat"]." AS B ON A.idcat = B.idcat INNER JOIN
                ".$cfg["tab"]["cat_lang"]." AS C ON A.idcat = C.idcat ";

    $db->query($sql);

    while ($db->next_record())
    {
        $insertSQL = "INSERT INTO
                          ".$cfg["tab"]["stat"]."
                          ( idstat, idcatart, idlang, idclient, visited )
                      VALUES (
                          ".$db2->nextid($cfg["tab"]["stat"]).",
                          ".$db->f(0).",
                          ".$db->f(2).",
                          ".$db->f(1).",
                          0 )";

        $db2->query($insertSQL);
    }
}
tja nächster punkt:
das mit pseudo_cron job bei der statistik erstellung funktioniert nur dann wenn am ersten des monats um 0 uhr die website aufgerufen wird. (ähm geil...) auf gut deutsch nette idee mit cronjobs funkt aber net g'scheit.

eine empfehlung:
das einzige was ich empfehlen würde wäre beim aufruf der statistik das monat zu überprüfen - falls die statistik für das vorige monat erstellt wurde soll die statistik wie bis her aufgerufen werden. falls nicht sollte die obrige funktion ausgeführt werden. ist zwar keine 100% saubere lösung würde aber funktionieren.

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Mo 10. Nov 2003, 11:44

Deine Fixes habe ich übernommen. Wobei die Funktion auch funktionieren sollte, wenn der Cronjob nicht genau um 0 Uhr ausgeführt wird, denn: Wenn niemand auf der Website klickt, wird der Cronjob nicht ausgeführt, aber es werden auch keine Zugriffsstatistiken geschrieben. Oder hab ich irgendwo nen Denkfehler?

Grüße,
Timo

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Mo 10. Nov 2003, 11:45

Achja: Im Cronjob "move_old_stats" hab ich den Bug gefunden:

Code: Alles auswählen

statsArchive(sprintf("%04d%02d",$year,$month));
Ist richtiger.

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mo 10. Nov 2003, 12:26

timo hat geschrieben:Achja: Im Cronjob "move_old_stats" hab ich den Bug gefunden:

Code: Alles auswählen

statsArchive(sprintf("%04d%02d",$year,$month));
Ist richtiger.
alles klar...
$yearmonth = ereg_replace (" ", "0", $yearmonth);
fliegt somit raus...

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Mo 10. Nov 2003, 13:40

ich habs mal dringelassen, da es IMHO nicht schadet.

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mo 10. Nov 2003, 16:24

das mit den cronjobs check ich nochmal... dauert ein wenig

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mi 17. Mär 2004, 10:36

der bug im bugtracker kann eigentlich zu gemacht werden...
http://bugs.contenido.de/bug_view_page. ... id=0000099
da dieses problem nicht mit dem datum zusammenhing sondern mit dem fehlenden $db = new DB_Contenido; in der function statsArchive

Gesperrt