[PHP] contatore con sqlite

luigi777

Utente Attivo
14 Feb 2008
1.085
1
38
39
Massa, Italy
Salve, ho trovato questo codice . servirebbe un contatore come questo. ma non capisco perché non funziona.
PHP:
<?php
// logging page hits
$dbfolder = $_SERVER["DOCUMENT_ROOT"]."/data/";
$dbname = $_SERVER["HTTP_HOST"]."_log.sq3";

// check if database file exists first
if(!file_exists($dbfolder.$dbname))
{
 $logdb = new PDO("sqlite:".$dbfolder.$dbname);
 $logdb->exec("CREATE TABLE hits(page VARCHAR(255) PRIMARY KEY, counter INTEGER)");
}
else
{
 $logdb = new PDO("sqlite:".$dbfolder.$dbname);
}

$page = $_SERVER['REQUEST_URI'];

// check if page is already in the hits table
$statement = $logdb->query("SELECT counter FROM hits WHERE page='$page'");
$record = $statement->fetchAll();

// if a record is found
if(sizeof($record) != 0)
{
 $counter = $record[0]['counter']++;
 $logdb->exec("UPDATE hits SET counter=$counter WHERE page='$page'");
 echo "Counter: ".$counter;
}
else
{
 $logdb->exec("INSERT INTO hits(page, counter) VALUES ('$page', 1)");
 echo "Counter: 1";
}

// close connection
$logdb = null;
?>

avete idea?
Grazie mille.
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
91
48
IT/SW
Prova questa classetta...
PHP:
/**
* Created by PHPS.
* User: MADR
* Date: 01/03/2019
* Time: 08:25
*/

class GSql {
   public $conn;
   public $counter_current_page=0;
   public function __construct($path='data',$name='contatore') {
      if(file_exists($path.'/'.$name.'.sqlite')){
         $this->conn = new SQLite3($path.'/'.$name.'.sqlite');
      }else{
         mkdir($path,0777,TRUE);
         touch($path.'/'.$name.'.sqlite');
         $this->conn = new SQLite3($path.'/'.$name.'.sqlite');
      }
   }

   /**
    * Logica per azione da eseguire su record
    * @param string $page Pagina se non esiste viene creato un nuovo record
    * @param bool $fire_action Se agire sui dati o far tornare il valore della query
    *
    * @return $this
    */
   public function check_actions($page,$fire_action=true){
      $res=$this->conn->query('SELECT counter FROM hits WHERE page ="'.$page.'"')->fetchArray(SQLITE3_ASSOC);
      if($fire_action)(empty($res))?$this->create_record($page):$this->increment_page($page);
      else $this->counter_current_page=$res;
      return $this;
   }
   public function create_record($page){
      $this->conn->query('INSERT INTO hits (`page`,`counter`) VALUES ("'.$page.'",1)');
      return $this->check_actions($page,false);
   }

   public function increment_page($page){
      $this->conn->query('UPDATE  hits SET counter = `counter`+1 WHERE `page`= "'.$page.'"');
      return $this->check_actions($page,false);
   }

   public function migrations(){
      $table='create table hits
            (
               page varchar(255) not null,
               counter bigint default 0
            );';
      $index='create unique index hits_page_uindex on hits (page);';
      $this->conn->query($table);
      $this->conn->query($index);
      return $this;
   }
}

//per richiamarla
include_once 'GSql.php';
$conn=new GSql('data','test');
//prima iterazione creiamo la tabella con la migrations
$conn->migrations();

//bisogna caricare i dati...
//basta cambiare la path su check_actions(nome pagina)
$res=$conn->check_actions('test5/aksdnasd/zcx')->counter_current_page;
print_r($res);
 

luigi777

Utente Attivo
14 Feb 2008
1.085
1
38
39
Massa, Italy
ok, ho fatto io uso xampp perché ora voglio usare xampp.. ora mi da questo:
ì
Warning: SQLite3::query(): table hits already exists in D:\xampp\htdocs\GSql.php on line 52

Warning: SQLite3::query(): index hits_page_uindex already exists in D:\xampp\htdocs\GSql.php on line 53
Array ( [counter] => 2 )
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
91
48
IT/SW
Basato su cookies
PHP:
class GSql {
   public $conn;
   public $counter_current_page=0;

   private $cookie_name='my_GSql';

   public $current_cookies='';

   private $store=TRUE;

   public function __construct($path='data',$name='contatore') {
      if(file_exists($path.'/'.$name.'.sqlite')){
         $this->conn = new SQLite3($path.'/'.$name.'.sqlite');
      }else{
         mkdir($path,0777,TRUE);
         touch($path.'/'.$name.'.sqlite');
         $this->conn = new SQLite3($path.'/'.$name.'.sqlite');
      }
   }

   /**
    * Logica per azione da eseguire su record
    * @param string $page Pagina se non esiste viene creato un nuovo record
    * @param bool $fire_action Se agire sui dati o far tornare il valore della query
    *
    * @return $this
    */
   public function check_actions($page,$fire_action=true){
      $this->verify_cookies($page);
      $res=$this->conn->query('SELECT counter FROM hits WHERE page ="'.$page.'"')->fetchArray(SQLITE3_ASSOC);
      if($this->store){
         if($fire_action)(empty($res))?$this->create_record($page):$this->increment_page($page);
         else $this->counter_current_page=$res;
      }else $this->counter_current_page=$res;
      return $this;
   }
   public function create_record($page){
      $this->conn->query('INSERT INTO hits (`page`,`counter`) VALUES ("'.$page.'",1)');
      return $this->check_actions($page,false);
   }

   public function increment_page($page){
      $this->conn->query('UPDATE  hits SET counter = `counter`+1 WHERE `page`= "'.$page.'"');
      return $this->check_actions($page,false);
   }

   public function migrations(){
      $table='create table hits
            (
               page varchar(255) not null,
               counter bigint default 0
            );';
      $index='create unique index hits_page_uindex on hits (page);';
      $this->conn->query($table);
      $this->conn->query($index);
      return $this;
   }


   public function verify_cookies($page){
      if(isset($_COOKIE[$this->cookie_name])){
         $this->current_cookies=$_COOKIE[$this->cookie_name];
         $result=explode(',',$this->current_cookies);
         if(in_array($page,$result))$this->store=FALSE;
         else{
            $result[]=$page;
            $this->store=TRUE;
            $this->current_cookies=join(',',$result);
         }
      }else{
         $this->current_cookies=join(',',[$page]);
         $this->store=TRUE;
      }

      if($this->store){
         setcookie($this->cookie_name,$this->current_cookies);
      }

   }


}
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
91
48
IT/SW
Stampa....
PHP:
include_once 'GSql.php';
$conn=new GSql('data','test');

$res=$conn->check_actions('test1')->counter_current_page;

print_r($res);

// Per fare delle prove fai così
$res=$conn->check_actions(join('/',$_GET))->counter_current_page;

print_r($res);
Inteso che la pagina di test sarà del tipo:
host/test.php?page=ciao&c=true&f=gth
 
Discussioni simili
Autore Titolo Forum Risposte Data
bubino8 [PHP] Contatore Scan QR con redirect PHP 10
Alessandro Le Mura Contatore visite per ogni pagina con MYSQL - PHP PHP 40
T [PHP] [Javascript] Download e contatore PHP 3
M [PHP] Contatore Tempo Server-side PHP 8
M [PHP] contatore record PHP 7
Alessandro Le Mura Contatore php - txt PHP 8
F contatore PHP PHP 12
foki {PHP Script} Contatore Utenti Registrati PHP 17
I dominio aruba versione php server linux Domini 1
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10
G Invio form con PHP PHP 3
T fatture con voci fattura in php PHP 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
M Collegamento tra form html e script php PHP 4
M Problemi con la stampa dei valori in php PHP 1
W [Cerco collaborazioni] Sviluppatore Web (PHP) Offerte e Richieste di Lavoro e/o Collaborazione 1
D passare valori da database sql a php PHP 1
L Ricezione dei dati su file php da modulo html PHP 6
E Inviare variabile a PHP da ciclo in JS Javascript 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
F menù select dinamico da db in php PHP 3
L Problemi form Pagina php HTML e CSS 3
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
F Il codice php è giusto? PHP 2
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
A invio massivo dati a file php Javascript 4
Z MySql injection PHP PHP 1
V PHP form intersecate PHP 0
I [Offro][Retribuito] Programmatore Php Offerte e Richieste di Lavoro e/o Collaborazione 0
P Funzione jQuery Ajax invio file a php jQuery 1
C Dopo chiusura del tag php la stringa html va a capo PHP 1
E Transaction php PHP 11
B ciclare file xml con PHP PHP 1
L Estrazione dati php Database 6
A Aiuto per pagina php PHP 0
E Php select option e ajax PHP 23
I Aiuto php Dependent Lookup PHP 0
T arretramento versione PHP... PHP 3
D problema php mysql PHP 1

Discussioni simili