Enregistrement des statistiques dans un cookie

Eléphanteau du PHP | 24 Messages

13 janv. 2021, 20:08

includes/inc-stat.php

require('inc-connexion.php');
require('../class/Stat.php');
require('../class/statManager.php');

if(isset($_COOKIE['visite'])) {

	$cookie_value = $_COOKIE['visite'];

    $cookie_value = unserialize($cookie_value); 
    
    $web_user_id = $cookie_value['web_user_id']; 
    $web_user_visit = $cookie_value['web_user_visit'];

    $cookie_value['web_user_visit'] ++;

    $stat_data = serialize($cookie_value);

    $manager = new statManager($db);
    $current_stat = $manager->getVisitesNb();

    $new_content = array('user_id' => (int) $current_stat['user_id'], 'web_user_id' => $current_stat['web_user_id'],
                         'web_user_visit' => (int) $current_stat['web_user_visit']);

    $stat_to_update = new Stat($new_content);
     
    $stat_to_update->setWebUserId('web_user_id');
    $stat_to_update->setWebUserVisit('web_user_visit');
     
    $manager->updateStat($stat_to_update);
}
else {

    $web_user_id = uniqid(); 
    $nombre_visite = 1; 
    
    $user_stat['web_user_id'] = $web_user_id; 
    $user_stat['web_user_visit'] = $web_user_visit;
    
    $stat_data = serialize($user_stat); 

    $data_stat = array(
            
            'user_id' => 1,
            'web_user_id' => $web_user_id,
            'web_user_visit' => $nombre_visite
        );

    $stats_data = new Stat($data_stat);

    $manager = new statManager($db);
    $manager->insertStat($stats_data);
}

setcookie('visite', $stat_data, time()+259200);  

print_r($_COOKIE); 

class/Stat.php

class Stat {
    
    private $_user_id;
    private $_web_user_id;
    private $_web_user_visit;

    private static $error;
 
    const MSG_ERROR_USER_ID = 'USER_ID doit être un entier.';
    const MSG_ERROR_WEB_USER_ID = 'WEB_USER_ID doit être une chaîne de caractères.';
    const MSG_ERROR_WEB_USER_VISIT = 'WEB_USER_VISIT doit être un entier.';
    const MSG_ERROR_END = 'L\'objet ne peut pas être créé.';
			
	public function __construct(array $data) {
        
        $this->setUserId($data['user_id']);
        $this->setWebUserId($data['web_user_id']);
        $this->setWebUserVisit($data['web_user_visit']);

        if(!empty(self::$error)) {

            throw new Exception(self::$error . self::MSG_ERROR_END);
        }
    }

    public function setError($msg) {

        self::$error = $msg;
    }
 
    public function getError() {

        return self::$error;
    }
 
    public function setUserId($user_id) {

        if((is_int($user_id)) AND ($user_id > 0)) {

            $this->_user_id = $user_id;
        }
        else {

            $this->setError(self::MSG_ERROR_USER_ID);
        }
    }

    public function setWebUserId($web_user_id) {

        if(is_string($web_user_id)) {

            $this->_web_user_id = $web_user_id;
        }
        else {

            $this->setError(self::MSG_ERROR_WEB_USER_ID);
        }
    }

    public function setWebUserVisit($web_user_visit) {

        if((is_int($web_user_visit)) AND ($web_user_visit > 0)) {

            $this->_web_user_visit = $web_user_visit;
        }
        else {

            $this->setError(self::MSG_ERROR_WEB_USER_VISIT);
        }
    }

    public function getUserId() {

        return $this->_user_id;
    }
 
    public function getWebUserId() {

        return $this->_web_user_id;
    }
 
    public function getWebUserVisit() {

        return $this->_web_user_visit;
    }
}

class/statManager.php

class statManager {

	private $_db;

	public function __construct($db) {

		$this->setDb($db);
	}

	public function setDb(PDO $dbh) {

		$this->_db = $dbh;
	}

	// FONCTION QUI A POUR BUT D'AFFICHER LE NOMBRE DE VISITES PAR ORDRE DECROISSANT.

	public function getVisitesNb() {

		$sql = 'SELECT user_id, web_user_id, web_user_visit FROM stat ORDER BY web_user_visit DESC';

		$stmnt = $this->_db->prepare($sql);

		$stmnt->execute();

		$count = $stmnt->fetch();

        return $count;
	}

	// FONCTION QUI A POUR BUT DE CALCULER ET D'AFFICHER LE NOMBRE TOTAL DE VISITES.

	public function getVisitesTotalNb() {

		$sql = 'SELECT SUM(web_user_visit) AS total_visites FROM stat';

		$stmnt = $this->_db->prepare($sql);

		$stmnt->execute();

		$count = $stmnt->fetch();

		return $count;
	}

	// FONCTION QUI A POUR BUT DE COMPTER ET D'AFFICHER LE NOMBRE TOTAL DE VISITEURS.

	public function getVisiteursTotalNb() {

		$sql = 'SELECT web_user_id AS total_visiteurs FROM stat';

		$stmnt = $this->_db->prepare($sql);

		$stmnt->execute();

		$count = $stmnt->rowCount();

		return $count;
	}

	// FONCTION QUI A POUR BUT DE RECUPERER TOUTES LES ENREGISTREMENTS DE LA TABLE STAT.
	
	public function getStat() {

		$sql = 'SELECT web_user_id, web_user_visit FROM stat ORDER BY web_user_visit DESC';

		$stmnt = $this->_db->prepare($sql);

		$stmnt->execute();

		while($stat_data = $stmnt->fetch(PDO::FETCH_ASSOC)) {

			$stats_data[] = $stat_data;
		}

		return $stats_data;
	}

	// FONCTION QUI A POUR BUT D'INSERER LES STATISTIQUES DANS LA TABLE STAT.

	public function insertStat(Stat $stat) {

		$sql = 'INSERT INTO stat (web_user_id, web_user_visit) VALUES (:web_user_id, :web_user_visit)';

		$web_user_id = $stat->getWebUserId();
		$web_user_visit = $stat->getWebUserVisit();

		$stmnt = $this->_db->prepare($sql);

		$stmnt->bindParam(':web_user_id', $web_user_id);
		$stmnt->bindParam(':web_user_visit', $web_user_visit);

		$stmnt->execute();
	}

	// FONCTION QUI A POUR BUT DE METTRE A JOUR LES STATISTIQUES DANS LA TABLE STAT.

	public function updateStat(Stat $stat) {

		$sql = 'UPDATE stat SET web_user_visit = :web_user_visit WHERE web_user_id = :web_user_id';
        
        $web_user_id = $stat->getWebUserId();
		$web_user_visit = $stat->getWebUserVisit();

		$stmnt = $this->_db->prepare($sql);

		$stmnt->bindParam(':web_user_id', $web_user_id);
		$stmnt->bindParam(':web_user_visit', $web_user_visit);

		$stmnt->execute();
	}
}

Bonsoir, J'ai un petit soucis concernant WEB_USER_VISIT :

Voici le message d'erreur -> Fatal error: Uncaught Exception: WEB_USER_VISIT doit être un entier.L'objet ne peut pas être créé. in C:\wamp64\www\villes-site-en-poo-et-pdo\class\Stat.php on line 24

Exception: WEB_USER_VISIT doit être un entier.L'objet ne peut pas être créé. in C:\wamp64\www\villes-site-en-poo-et-pdo\class\Stat.php on line 24

Merci d'avance et bonne soirée.

Mammouth du PHP | 2215 Messages

13 janv. 2021, 20:49

$stat_to_update->setWebUserVisit('web_user_visit');

public function setWebUserVisit($web_user_visit) {

if((is_int($web_user_visit)) AND ($web_user_visit > 0)) {

$this->_web_user_visit = $web_user_visit;
}
else {

$this->setError(self::MSG_ERROR_WEB_USER_VISIT);
}
}

'web_user_visit' n'étant pas un entier, le message d'erreur est tout à fait normal.

Eléphanteau du PHP | 24 Messages

14 janv. 2021, 16:54

Bonjour, merci bien, j'ai vu l'erreur ->
$web_user_id = uniqid();
$nombre_visite = 1;

$user_stat['web_user_id'] = $web_user_id;
$user_stat['web_user_visit'] = $nombre_visite;

Mais sur la page index.php -> Erreur fatale: require (): Echec de l'ouverture requise '../class / Stat.php' (include_path = '.; C: \ php \ pear'