Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    150

    Click unici: efficienza e chisura Rs e connessione

    Salve,
    mi sono scritto un file ( scopiazzando ) per contare i click unici uscenti dal mio sito ( nelle 24 ore ) basandomi sull' ip dell' utente che clicca. Il tutto ( id del link su cui l' utente clicca, ip dell' utente, e ora in cui clicca ) viene memorizzato in una tabella "controlloclicks"

    Lo script è il seguente:

    Codice PHP:

    <%
    ' Apro la connessione
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open db_path

    Sql = "SELECT * FROM members WHERE id = '" & Request.QueryString("
    sid") & "'"
    Set Rs = Conn.Execute(Sql)

    url_sito = Rs("url")
    counterclicksout = Rs("clicksout") + 1


    Verifico l' ip dell' utente che sta generando il click
    IpUtente 
    Request.ServerVariables("REMOTE_ADDR")
       
    Sql "SELECT * FROM controlloclicks WHERE ((ip = '" IpUtente "') AND (idsito = '" Request.QueryString("sid") & "'))"
    Set Rs Conn.Execute(Sql)

    ' Se l' ip non esiste conto il click unico e inserisco i dati dell' utente
    If Rs.EOF Then
       
       Sql = "UPDATE members SET clicksout='" & counterclicksout & "' WHERE id = '" & Request.QueryString("
    sid") & "'"
       Set Rs = Conn.Execute(Sql)

       Sql = "INSERT INTO controlloclicks (idsito, ip, dataclick) VALUES ('" & Request.QueryString("
    sid") & "', '" & IpUtente & "', '" & Now() & "')"
       Set Rs = Conn.Execute(Sql)
          
       Response.Redirect (url_sito)

    Se l' ip esiste controllo da quanto      
    Else
       
       DateDB = CDate(Rs("dataclick"))
       DateAttuale = CDate(Now())
        
       If CInt(DateDiff("h", DateDB, DateAttuale)) < 24 Then
          
          Response.Redirect (url_sito)

       Else
          
          Sql = "UPDATE members SET clicksout='" & counterclicksout & "' WHERE id ='" & Request.QueryString("
    sid") & "'"
          Set Rs = Conn.Execute(Sql)

          Sql = "UPDATE controlloclicks SET dataclick = '" & Now() & "' WHERE ip = '" & IpUtente & "'"
          Set Rs = Conn.Execute(Sql)

       
          Response.Redirect (url_sito)    
             
       End If
          
    End If


    Conn.Close
    Set Conn = Nothing

    Rs.Close
    Set Rs = Nothing
    %> 

    Volevo chiedere se qualcuno:

    1) Mi aiuta a mettere tutti i

    Rs.Close
    Set Rs = Nothing

    Conn.Close
    Set Conn = Nothing

    nei punti in cui serve ( non vanno messi dopo ogn if oppure dopo ogni else ?? Io credo di si perchè se la condizione è verificata, si ha l' uscita dallo script e quindi si deve chiudere il tutto... )


    2) Se l' algoritmo in questione è efficiente secondo voi. Lavoro con database mysql ma credo che se i click sono molti, ogni giorno la tabella in questione si riempe di record con nuovi ip e dopo un mese? dopo un anno ? il database scoppia o no ?????

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    1) Devi chiudere gli oggetti aperti prima di effetture il redirect
    2) Sì, si riempie... o li cancelli o ancora meglio li porti in locale dove fai le analisi e in remoto lasci solo l'ultimo mese o cose del genere.

    Roby

  3. #3
    codice:
     
    
    <% 
    executeRedirect = false
    
    ' Apro la connessione 
    Set Conn = Server.CreateObject("ADODB.Connection") 
    Conn.Open db_path 
    
    Sql = "SELECT * FROM members WHERE id = '" & Request.QueryString("sid") & "'" 
    Set Rs = Conn.Execute(Sql) 
    
    url_sito = Rs("url") 
    counterclicksout = Rs("clicksout") + 1 
    
    
    ' Verifico l' ip dell' utente che sta generando il click 
    IpUtente = Request.ServerVariables("REMOTE_ADDR") 
        
    Sql = "SELECT * FROM controlloclicks WHERE ((ip = '" & IpUtente & "') AND (idsito = '" & Request.QueryString("sid") & "'))" 
    Set Rs = Conn.Execute(Sql) 
    
    ' Se l' ip non esiste conto il click unico e inserisco i dati dell' utente 
    If Rs.EOF Then 
        
       Sql = "UPDATE members SET clicksout='" & counterclicksout & "' WHERE id = '" & Request.QueryString("sid") & "'" 
       Set Rs = Conn.Execute(Sql) 
    
       Sql = "INSERT INTO controlloclicks (idsito, ip, dataclick) VALUES ('" & Request.QueryString("sid") & "', '" & IpUtente & "', '" & Now() & "')" 
       Set Rs = Conn.Execute(Sql) 
           
       executeRedirect = true
    
    ' Se l' ip esiste controllo da quanto       
    Else 
        
       DateDB = CDate(Rs("dataclick")) 
       DateAttuale = CDate(Now()) 
         
       If CInt(DateDiff("h", DateDB, DateAttuale)) < 24 Then 
           
          executeRedirect = true
    
       Else 
           
          Sql = "UPDATE members SET clicksout='" & counterclicksout & "' WHERE id ='" & Request.QueryString("sid") & "'" 
          Set Rs = Conn.Execute(Sql) 
    
          Sql = "UPDATE controlloclicks SET dataclick = '" & Now() & "' WHERE ip = '" & IpUtente & "'" 
          Set Rs = Conn.Execute(Sql) 
        
          executeRedirect = true   
              
       End If 
           
    End If 
    
    
    Conn.Close 
    Set Conn = Nothing 
    
    Rs.Close 
    Set Rs = Nothing 
    
    if executeRedirect then Response.Redirect (url_sito)  
    %>

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    150
    Ringrazio Roby_72 per le risposte ( effettivamente i record li posso cancellare anche una volta al giorno, non sono così importanti perchè non è un pay per click ... peò è una palla... )

    Per Mems, grazie per aver messo mano al codice. Con l' introduzione di executeRedirect quindi non ho più bisogno di chiedere e distruggere la connessione e il rs in ogni parte, va bene così ( 1 sola volta )??
    Ottima astuzia :berto:

  5. #5
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Originariamente inviato da greystone
    Ringrazio Roby_72 per le risposte ( effettivamente i record li posso cancellare anche una volta al giorno, non sono così importanti perchè non è un pay per click ... peò è una palla... )

    Per Mems, grazie per aver messo mano al codice. Con l' introduzione di executeRedirect quindi non ho più bisogno di chiedere e distruggere la connessione e il rs in ogni parte, va bene così ( 1 sola volta )??
    Ottima astuzia :berto:
    Come vedi è prima del redirect la chiusura degli oggetti...
    Un solo redirect utilizzando una variabile d'appoggio.

    Roby

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    150
    ok. Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.