Autor Zpráva
Ronny
Profil *
Zdravím, chtěl bych se zeptat na věc ohledně refreshování. Mám počítadlo přístupů, které mám na index.php. Kdykoliv dám F5, přičte se mi další hlas do návštěvnosti... a proto by mě zajímalo, jaks e dá tohle ošetřit... u formulářů tomuhle zamezuji Headerem, ale tady si myslím že to moc nepomůže... předem děkuji za cenné rady
Mastodont
Profil
Sledovat pomocí cookie, IP adresy ...
Ronny
Profil *
Mastodont
co jsem se tak doectl na googlu, tak by pomohlo uzivatelovu IP adresu nezapisovat do DB( cili nepripocitavat jeho navstevu), kdyz na web pujde vicekrat nez jednou za 30 min.... ale nevim prave moc jak to realizovat... mam v DB sloupec date - cili bych ho asi musel prepsat na DATETIME, pak si do promenne ulozit ten casovy interval (30min treba) a pak podminka WHERE sloupec_datum_cas = NOW()-interval???
DoubleThink
Profil *
u formulářů tomuhle zamezuji Headerem
To je jiný problém - přesměrování (303) se používá aby prohlížeč zahodil uložený POST požadavek.

a pak podminka
V ní bych doporučil pracovat s unix timestampem - je to lineární číslo (počet sekund), takže můžeš bez problémů odečítat intervaly.
Ronny
Profil *
DoubleThink
no vyzkouším to i s timestapeem... ale měl bych otázku... když chci teoreticky zjistovat, zda uzivatel se behem poslednich rekneme 10 minut podruhe necte nase stranky, tak podminka bude jak vypadat?

if(($posledni_navsteva - ($aktualni_datum_cas - $interval)) > $interval) {
    ... nepripocitat jeho hlas k navstevnosti do DB...
}
else {
 . .... pripocitat...
}

$interval = 600; // tech 10min - zadava se to takhle?

a jeste by me zajimalo - je nejaka fce, ktera by z cisla udelal jeho absolutni hodnotu? Protoze tenhle zapisse muze dostat i do zapornych hodnot:
14:30 - (15:15 - 10) > 10

... a co s tim prave potom...
nightfish
Profil
if(($posledni_navsteva - ($aktualni_datum_cas - $interval)) > $interval) {
if ($aktualni_datum_cas - $posledni_navsteva > $interval)


je nejaka fce, ktera by z cisla udelal jeho absolutni hodnotu?
abs()

$interval = 600; // tech 10min - zadava se to takhle?
ano, akorát je vhodné do proměnné přiřadit hodnotu dříve, než ji chceš použít (v podmínce o pár řádků výše)
Ronny
Profil *
tak na to porad koukam a nevim kde delam chybu... v tabulce navstevnici mam sloupec datum typu DATETIME, a kdyz se uzivatel podiva na stranky drive nez po skonceni intervalu, nezmeni se jeho cas posledni navstevy v DB...:(
$ipadresa = $REMOTE_ADDR;
// proměnná obsahující IP adresu návštěvníka
$dnesni_datum_cas = Date("Y-m-d h:m:s");
$dnesnidatum = Date("Y-m-d");
// proměnná obsahující dnešní datum v potřebném formátu
$interval = 60;

$result[0] = MySQL_Query("SELECT * FROM navstevnici WHERE ip='".$ipadresa."'");
$host = MySQL_Fetch_Object($result[0]);
$poslednipristup = $host->Datum;
// zjistíme, zda již IP adresa v tabulce je:
if ($poslednipristup==""):
    $pocitat=true;
    MySQL_Query("INSERT INTO navstevnici VALUES('".$ipadresa."', '".$dnesni_datum_cas."',1)");
    // pokud ne, vložíme ji
else:
    // zjistíme, zdali návštěvník ten samý den nebyl na stránce
    if ($dnesni_datum_cas - $poslednipristup > $interval):
        $pocitat = true;
        MySQL_Query("UPDATE navstevnici SET datum = '".$dnesni_datum_cas."', pocet = pocet+1 WHERE ip = '".$ipadresa."'");
        // pokud ne, připočteme návštěvu IP adrese a uložíme aktuální datum
    else:
        $pocitat=false;
        MySQL_Query("UPDATE navstevnici SET pocet = pocet+1 WHERE ip = '".$ipadresa."'");
        // jinak připočteme návštěvu IP adrese a nepočítáme jiné přístupy
    endif;
endif;


if ($pocitat):
    // zjistíme, zdali máme počítat
    $result[1] = MySQL_Query("SELECT * FROM statistiky_celkove");
    if (MySQL_Num_Rows($result[1])!=0):
        $counter[0] = MySQL_Result($result[1],0)+1;
        MySQL_Query("UPDATE statistiky_celkove SET pocet = pocet+1");
    else:
        $counter[0] = 1;
        MySQL_Query("INSERT INTO statistiky_celkove VALUES(1)");
    endif;
    $result[2] = MySQL_Query("SELECT * FROM statistiky_mesicni WHERE mesic = '$month'");
    $aktmesic = MySQL_Fetch_Object($result[2]);
    $counter[1] = $aktmesic->Pocet+1;
    if ($counter[1]==1):
        MySQL_Query("INSERT INTO statistiky_mesicni VALUES('$month',1)");
    else:
        MySQL_Query("UPDATE statistiky_mesicni SET pocet = pocet+1 WHERE mesic = '$month'");
    endif;
    $result[3] = MYSQL_Query("SELECT * FROM statistiky_denni WHERE datum='$dnesnidatum'");
    $zaznam = MySQL_Fetch_Object($result[3]);
    $counter[2] = $zaznam->Pocet+1;
    if ($counter[2] == 1):
        MySQL_Query("INSERT INTO statistiky_denni VALUES ('$dnesnidatum', 1)");
    else:
        MySQL_Query("UPDATE statistiky_denni SET pocet = pocet+1 WHERE datum = '$dnesnidatum'");
    endif;
    // pokud ano, připočteme všem hodnotám jednu a vrátíme výsledky v poli $counter
else:
    $result[4] = MySQL_Query("SELECT * FROM statistiky_celkove");
    $counter[0] = MySQL_Result($result[4],0);
    $result[5] = MySQL_Query("SELECT * FROM statistiky_mesicni WHERE mesic = '$month'");
    $tentom = MySQL_Fetch_Object($result[5]);
    $counter[1] = $tentom->Pocet;
    $result[6] = MYSQL_Query("SELECT * FROM statistiky_denni WHERE datum='$dnesnidatum'");
    $dnes = MySQL_Fetch_Object($result[6]);
    $counter[2] = $dnes->Pocet;
     // jinak jen načteme všechny hodnoty do pole $counter
endif;


ten skript je z www.pcsvet.cz a chtel jsem si ho poupravit k obrazu sve, ale potrebuju nastavit zamezeni pripisovani hlasu do DB, kdyz se uzivatel prihlasi treba 2x za 10 min.... Omlouvamse za ten dlouhy kod, ale hledim do toho od rana a uz mi z toho hrabe.... dekuji moc z aochotu pomoci

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0