Contatore di accessi

Marco_88

Utente Attivo
4 Dic 2014
150
0
0
Roma
batwebit.blogspot.it
Ciao ragazzi, avrei bisogno di un consiglio. Come posso contare le visite su molte pagine create dinamicamente?
L'ideale sarebbe contare le query alla pagina e inserirle nel database per poi mostrarle nel sistema di gestione dei contenuti. E' possibile contare le query alla pagina tramite server, pensavo tipo alle variabili $_GET $_POST e $_COOKIE?
 
Io uso shinystat, è molto comodo, ha diverse versioni e diversi modelli di contatore, con la versione gratuita hai un bel po' di dati sotto controllo, in più ti notifica ogni settimana o ogni mese tramite mail
 
No volevo proprio creare il plugin da me per inserirlo nel modulo che costruisce la pagina, che a sua volta si autocompone con il relativo prodotto (sono migliaia).

Ho pensato ad una cosa del genere, e maccheronicamente ho scritto il seguente codice:

PHP:
if (($_GET['id_product']) == ($_SERVER['REQUEST_URI']) && (isset($_SESSION['user'])) {
query= "UPDATE accessi SET contatore=+1 WHERE id_accesso = id_product;
 
Allora questo è il modulo che sto costruendo per realizzare (si spera presto) il contatore di visite.
Ho due problemini e spero che qualcuno mi possa aiutare:

1. Devo unire le due chiavi primarie delle tabelle `products` id_product e `accessi` id_accesso. Ecco il risultato:
Codice:
Array
(
    [0] => Array
        (
            [id_product] => 587
            [0] => 587
        )

    [1] => Array
        (
            [id_product] => 589
            [0] => 589
        )

    [2] => Array
        (
            [id_product] => 590
            [0] => 590
        )


2.Non riesco a stampare gli eventuali errori delle query tramite metodo prepare();



Codice completo:

PHP:
<?php

/**
 * Plugin contatore di visite in php
 * PHP + PDO
 * 
 */

// Debug Tools //

//preize($_SERVER);
//preize($_SESSION);
//preize($_GET);
//preize(PDO::getAvailableDrivers());
//preize($PDO);

// Se la query string è stata eseguita aggiungi un +1 al contatore 

if (!isset($_SERVER['QUERY_STRING'])) {
	
	echo 'La query string non è impostata <br />';
	
}
	else {  
		
		echo 'La query string è: ' . $_SERVER['QUERY_STRING'] . '<br />';
		
		//Connessione col PDO tramite try/catch 
		
		  try {
			
		
		       $PDO = new DB($config['db']['type'], $config['db']['host'], $config['db']['name'], $config['db']['user'], $config['db']['passw']);
		       $PDO->setAttribute(PDO::ATTR_STATEMENT_CLASS, array( 'DBStatement', array($GLOBALS['db']) ) );
		       $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		
		      }
		
		      catch  (PDOException $e) { 
		      	

				echo 'Errore: ' . $e->getMessage();   
                
			                           }
		
		        //lancio la query
		
		        if ($PDO = new DB($config['db']['type'], $config['db']['host'], $config['db']['name'], $config['db']['user'], $config['db']['passw'])) {
		
	          
		        	      
		        	       //avvio della transazione (disattivo auto commit)
		        	       $PDO->beginTransaction();
		        	       
		        	    
		        	       //inizializzo il parametro per la query per la join
		        	       $param = 'id_accesso';
		        	      
		        	       
		        	       //preparo la query
			               if ($join = $PDO->prepare("SELECT id_product FROM products AS A LEFT JOIN accessi AS B ON A.id_product=B. :id_accesso WHERE TRUE;")) {
			               	
			               	   $join->bindParam(':id_accesso', $param, PDO::PARAM_STR,50);
                           

                                  //se la prima query è stata eseguita procedo con la seconda
                           
			                      if ($join->execute())   {
			               	
			                      	 
			                      	 //avvio la seconda query
			               	         $updatecounter = $PDO->prepare("UPDATE accessi SET conta = +1 WHERE id_product = id_accesso;");
			               	         $updatecounter->execute();
			                
			                         //creazione di un array dei risultati
			                         $res = $join->fetchAll();
			               
			                         //visualizzo il risultato
			                         preize($res);
			             
			                         
			                         //riattivo l'auto commit
			                         $PDO->rollBack();
			               
		                           }
			              
			                       else {
			                       	
			                       	     //voglio visualizzare l'errore
			              		         die('Errore Query');
			               	             
			              	       }
			               }
			               
		        }
		        
	}
 

Discussioni simili