conta pagine lato server

santonio

Nuovo Utente
17 Gen 2023
5
0
1
Buongiorno ,
una cosa che assolutamente non capisco o non conosco : ho inserito un contatore di pagine lato server il cui codice era a disposizione su questo sito. Per altri motivi ho inserito una seconda volta il medesimo codice , gli script scrivono tabelle diverse le quali , giorno per giorno , incrementano un contatore di una riga di tabella. Il problema é che danno risultati , come pagine prodotte dal sito , assolutamente diversi , uno il doppio dell'altro. Entrambi gli script sono in un file di inclusione che e' presente in tutte le pagine.
Il sito e' in classic asp.

CODICE PRIMO SCRIPT CONTA PAGINE :
----------------------------------
<%
ggd = Day(Date())
mmd = Month(Date())
aad = Year(Date())
Set cn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("mdb-database/contapdiretto.mdb")
rs.Open "SELECT * FROM contatore WHERE gg = '" & ggd & "' AND mm = '" & mmd & "' AND aa = '" & aad & "'", cn, 1
if rs.EOF Then
cn.Execute("INSERT INTO contatore (gg, mm, aa, au, pv) VALUES ('" & ggd & "', '" & mmd & "', '" & aad & "', 1, 1)")
Session("contatorediretto") = "OK"
Else
cn.Execute("UPDATE contatore SET pv = pv + 1 WHERE gg = '" & ggd & "' AND mm = '" & mmd & "' AND aa = '" & aad & "'")
If Session("contatorediretto") = "" Then
cn.Execute("UPDATE contatore SET au = au + 1 WHERE gg = '" & ggd & "' AND mm = '" & mmd & "' AND aa = '" & aad & "'")
Session("contatorediretto") = "OK"
End If
End If
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
%>

CODICE DI RICHIAMO DEL SECONDO SCRIPT :
-------------------------------------------

<script type="text/javascript" src="/contap-w.asp"></script>





Come detto prima entrambi gli scritp sono presenti nello stesso file di inclusione uno di seguito all'altro e trovano collocazione all'interno dei tag <HEAD> </HEAD>. Il codice del secondo scritp quello richiamato nel source "contap-w.asp" é identico al primo script. A scanso di equivoci copio e incollo anche il codice di "contap-w.asp" :


CONTAP-W.ASP :
----------------------

<%@Language = VBScript%>
<!--#include file="contap-0.asp"-->
<%

Call CnOpen()
rs.Open "SELECT * FROM contatore WHERE gg = '" & gg & "' AND mm = '" & mm & "' AND aa = '" & aa & "'", cn, 1
If rs.EOF Then
cn.Execute("INSERT INTO contatore (gg, mm, aa, au, pv) VALUES ('" & gg & "', '" & mm & "', '" & aa & "', 1, 1)")
Session("contatore") = "OK"
Else
cn.Execute("UPDATE contatore SET pv = pv + 1 WHERE gg = '" & gg & "' AND mm = '" & mm & "' AND aa = '" & aa & "'")
If Session("contatore") = "" Then
cn.Execute("UPDATE contatore SET au = au + 1 WHERE gg = '" & gg & "' AND mm = '" & mm & "' AND aa = '" & aa & "'")
Session("contatore") = "OK"
End If
End If
rs.Close
Call CnClose()
%>

CONTAP-0.ASP :

-------------------

<%

Const partenza = 2010
Dim cn, rs
Function CnOpen()
Set cn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("mdb-database/contap.mdb")
End Function
Function CnClose()
Set rs = Nothing
cn.Close
Set cn = Nothing
End Function
Dim gg, mm, aa, mese, anno, arr_mese, conta, colore, tot_au, tot_pv
gg = Day(Date())
mm = Month(Date())
aa = Year(Date())
arr_mese = Array("gen", "feb", "mar", "apr", "mag", "giu", "lug", "ago", "set", "ott", "nov", "dic")
%>


Il primo script scrive o incrementa il contatore di una tabella del data base "A" ; il secondo script scrive o incrementa il contatore di un'altra tabella del data base "B" I contatori delle 2 tabelle sono assolutamente diversi , nell'ambito della stessa giornata.

Perche' ?

Grazie , saluti
 
Ciao Paolo e grazie per la risposta
il problema molto probabilmente è dovuto al fatto che il primo script viene sempre eseguito al richiamo della pagina (lato server) , mentre il secondo script , quello richiamato da "<script type="text/javascript" src="/contap-w.asp"></script>" è eseguito sul client con codice "lanciato" sul server ma solo al termine del caricamento della pagina. Ora se l'utente per qualche motivo chiude il browser prima che la pagina sia "disponibile" , lo script lato client non è eseguito e questo giustifica la differenza. Io credo che il motivo sia questo
 
prova rimuovendo
Codice:
<script type="text/javascript" src="/contap-w.asp"></script>

e sostituendo quello di testa con questo, in pratica il codice è duplicato ovviamente connettendosi ai due DB diversi e rinominata la sessione:


Codice:
<%

    ggd = Day(Date())
    mmd = Month(Date())
    aad = Year(Date())

' DB CONTAPDIRETTO.MDB    
    Set cn = Server.CreateObject("ADODB.Connection")
    Set rs = Server.CreateObject("ADODB.Recordset")
        cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("mdb-database/contapdiretto.mdb")
        rs.Open "SELECT * FROM contatore WHERE gg = '" & ggd & "' AND mm = '" & mmd & "' AND aa = '" & aad & "'", cn, 1

    ' se non esiste inserisco un record nuovo 
    ' pv 1 (pagine visitate)
    ' au 1 (accessi unici)
    if rs.EOF Then
        cn.Execute("INSERT INTO contatore (gg, mm, aa, au, pv) VALUES ('" & ggd & "', '" & mmd & "', '" & aad & "', 1, 1)")
        Session("sessione1") = "OK"
    Else
    ' aggiungo +1 pv > pagine visitate
        cn.Execute("UPDATE contatore SET pv = pv + 1 WHERE gg = '" & ggd & "' AND mm = '" & mmd & "' AND aa = '" & aad & "'")
    
    ' aggiungo +1 au > accesso unico
        If Session("sessione1") = "" Then
            cn.Execute("UPDATE contatore SET au = au + 1 WHERE gg = '" & ggd & "' AND mm = '" & mmd & "' AND aa = '" & aad & "'")
            Session("sessione1") = "OK"
        End If

    End If
    
        rs.Close
    Set rs = Nothing
        cn.Close
    Set cn = Nothing


' DB CONTAP.MDB


    Set cn = Server.CreateObject("ADODB.Connection")
    Set rs = Server.CreateObject("ADODB.Recordset")
        cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("mdb-database/contap.mdb")
        rs.Open "SELECT * FROM contatore WHERE gg = '" & ggd & "' AND mm = '" & mmd & "' AND aa = '" & aad & "'", cn, 1

    ' se non esiste inserisco un record nuovo 
    ' pv 1 (pagine visitate)
    ' au 1 (accessi unici)
    if rs.EOF Then
        cn.Execute("INSERT INTO contatore (gg, mm, aa, au, pv) VALUES ('" & ggd & "', '" & mmd & "', '" & aad & "', 1, 1)")
        Session("sessione2") = "OK"
    Else
    ' aggiungo +1 pv > pagine visitate
        cn.Execute("UPDATE contatore SET pv = pv + 1 WHERE gg = '" & ggd & "' AND mm = '" & mmd & "' AND aa = '" & aad & "'")
    
    ' aggiungo +1 au > accesso unico
        If Session("sessione2") = "" Then
            cn.Execute("UPDATE contatore SET au = au + 1 WHERE gg = '" & ggd & "' AND mm = '" & mmd & "' AND aa = '" & aad & "'")
            Session("sessione2") = "OK"
        End If

    End If
    
        rs.Close
    Set rs = Nothing
        cn.Close
    Set cn = Nothing
    
%>
 
se sostituisco "<script type="text/javascript" src="/contap-w.asp"></script>" con quello che hai indicato tu i contatori risulteranno perfettamente allineati perché il codice verrà eseguito , in entrambi i casi , lato server.
grazie per la consulenza
 

Discussioni simili