<?php

###############################################################################
#                                                                             #
# fly_mycpt.inc.php : Il s'agit d'une classe pour compter le nombre d'utili-  #
#                     sateurs "sur le site", le nombre de page vue, le nombre #
#                     de visiteurs venus sur le site.                         #
#                                                                             #
#   +---------------------------------------------------------------------+   #
#   | Copyright (c) 2003 Flyounet                                         |   #
#   +---------------------------------------------------------------------+   #
#   | This program is free software; you can redistribute it and/or       |   #
#   | modify it under the terms of the GNU General Public License (GPL)   |   #
#   | as published by the Free Software Foundation; either version 2      |   #
#   | of the License, or (at your option) any later version.              |   #
#   | The GPL can be found at http://www.gnu.org/licenses/gpl.html        |   #
#   +---------------------------------------------------------------------+   #
#   | Author: Flyounet <devs@flyounet.net>                                |   #
#   +---------------------------------------------------------------------+   #
#                                                                             #
###############################################################################
#                                                                             #
# v0.01 [16/07/2003] Flyounet :                                               #
#       Initiale Release                                                      #
#                                                                             #
# v0.02 [21/07/2003] Flyounet :                                               #
#       Vu que je suis comme ça, je me suis demandé quelles étaient les pages #
#       les plus visitées. Et vu que, Webalizer ne sait pas trop me le dire,  #
#       j'ai préféré modifier cette classe. Pour accélérer les requetes, il   #
#       est possible de désactiver ces statistiques (du moins en grande       #
#       partie ;).                                                            #
#       J'ai aussi changé le nom des tables par défaut. Ca m'arrange.         #
#       J'ai ajouté des champs dth_human (non indexés), cela pour ceux qui    #
#       regardent les stats directements dans la table, histoire de savoir à  #
#       quelle heure est arrivée telle action. Ca c'est pour ceux qui sont    #
#       pas capables de convertir de tete un unix timestamp :D                #
#       En plus dans les fonction MyCpt_Add*, il y a vait une erreur qui nous #
#       faisait avoir une année à 1970 :( Donc pour ceux qui utilisaient la   #
#       v0.01 ben vous n'avez plus qu'à vous paluchez les updates à la main:) #
#       C'est plus propre à lire, non ?!                                      #
#                                                                             #
# v0.03 [23/07/2003] Flyounet :                                               #
#       .Pas de modification de la structure des tables entre la v0.02 et la  #
#       v0.03. Sympa non ?                                                    #
#       J'avais oublié les fonctions qui retournent les résultats par script. #
#       + Donc ajout des fonctions : MyCpt_GetVisite_Script (qui retourne le  #
#       nombre de visite pour un script donné) et MyCpt_GetPage_Script (qui   #
#       retourne le nombre de pages vues pour un script). Ces deux fonctions  #
#       peuvent soit ne retourner les valeurs que pour le script soit pour    #
#       l'uri. Le décompte peut se faire soit à une date précise soit sur     #
#       l'ensemble des données.                                               #
#       + Tient et pis voilà MyCpt_GetVisiteur_Script qui fait comme ses      #
#       soeurs juste au dessus. Ca retourne le nombre de visiteurs connectés  #
#       au script avec ou sans l'uri au choix.                                #
#       * Correction partielle des fautes d'orthographe :p                    #
#       * Les fonctions MyCpt_Get(Visite|Page|Image) ont été modifiées parce  #
#       qu'elles le valaient bien. Réduction à 2 lignes au lieu de 5 :)       #
#       * J'ai aussi corrigé la fonction MyCpt_Visite qui suxorisait. Pour    #
#       savoir si une personne était venu moins de 30 minutes auparavent, je  #
#       cherchait la plus ancienne connexion au lieu de la plus récente.      #
#                                                                             #
# v0.04 [29/07/2003] Flyounet :                                               #
#       + Ajout d'une variable indiquant le nom de la classe, uniquement      #
#         utilisé pour l'affichage des erreurs. Parce que là entre cettre     #
#         classe et celle de download, je m'y retrouve plus :(                #
#       + Ajout de la fonction MyCpt_MakeId qui génère un ID de $arg cara-    #
#         ctères.                                                             #
#       + Ajout de la fonction MyCpt_AddBrowser qui comptabilise le nombre de #
#         pages vues pour chaque HTTP_USER_AGENT. J'ai penser qu'il valait    #
#         mieux stocker l'ensemble pour ensuite faire des stats dessus, pour  #
#         pas perdre trop de temps lors de l'execution de script.             #
#                                                                             #
# v0.05 [05/08/2003] Flyounet :                                               #
#       + Ajout de la license GPL au sein du code.                            #
#       + Ajout de la légende des symboles.                                   #
#       > Version non publiée.                                                #
#                                                                             #
# v0.06 [05/08/2003] Flyounet :                                               #
#       * Correction de la fonction MyCpt_MakeId. La chaîne générée était     #
#         testée dans la table T_INFO, or celle-ci ne comporte pas de champs  #
#         id, et de plus il ne s'agit pas forcément toujours de la même table #
#         donc le premier argument est maintenant le nom de la table où faire #
#         la requête pour déterminer l'id existe.                             #
#       + Ajout de la fonction MyCpt_AddBackRef qui stocke les comptes pour   #
#         les liens référents.                                                #
#       * Modification de la fonction MyCpt_Visites pour la prise en compte   #
#         de la fonction MyCpt_AddBackRef.                                    #
#                                                                             #
###############################################################################
#                                                                             #
# Légende :                                                                   #
# + --> Indique une nouveauté, un ajout de fonctionnalité.                    #
# * --> Indique une correction de bogue.                                      #
# - --> Indique la suppression d'une fonctionnalité/variable.                 #
# > --> Indique une information n'ayant pas forcément de rapport avec le code #
#                                                                             #
###############################################################################

# Mon conseil est de modifier cette valeur et de ne pas oublier de faire un
# define dans le script appelant :)
if(!defined("wmCoinCoin")) {
  print(
"Tu n'essayerais pas de te taper Joe l'incruste ? <a href=\"http://www.tusors.fr.st\">Dehors !</a>");
  exit();
}

class 
Fly_MyCpt {
  
/*
  +---------------------------------------------------------------------------+
  |                                                                           |
  |                   Les VARIALBES utilisées par la Classe                   |
  |                                                                           |
  +---------------------------------------------------------------------------+
  */
  # Identifiant de la classe
  
var $CLASSENAME "Fly_MyCpt_v0.06";

  
# Variable pour la database
  
var $HOST      "mon";
  var 
$USER      "clavier";
  var 
$PASSWORD  "se";
  var 
$DATABASE  "blo";
  var 
$PRETABLE  "blog_";

  var 
$LINKIDB   false;
  var 
$LASTQUERY "";
  var 
$QRESULT   false;

  
# Liste des tables
  
var $T_INFO "mycpt_info";
  var 
$T_IP   "mycpt_ip";
  var 
$T_STAT "mycpt_stats";
  var 
$T_BROW "mycpt_browser";
  var 
$T_BACK "mycpt_backref";

  
# Faire les stats sur les serveur et script
  
var $STAT_SERV true;
  var 
$STAT_URI  true;
  var 
$STAT_BROW true;
  var 
$STAT_BACK true;

  
# Nombre de secondes nécessaires entre deux visites
  
var $TIME_ALIVE 1800# 30 minutes
  # Nombre de secondes pour déclarer un utilisateur Out
  
var $TIME_OUT   180;  #  3 minutes
  
  # Variable pour la gestion d'erreur
  
var $LASTERROR  "";
  var 
$DATEERROR  false;
  var 
$PRINTERROR false;
  var 
$FILEERROR  true;
  var 
$LOGERROR   false;
  var 
$FULLERROR  false;
  var 
$EXITERROR  false;
  
  
/*
  +---------------------------------------------------------------------------+
  |                                                                           |
  | Les FONCTIONS du COEUR de la Classe (Nouvelle visite, compte de visite..) |
  |                                                                           |
  +---------------------------------------------------------------------------+
  */
  
  # Constructeur de la classe
  
function Fly_MyCpt($must_connect=true) {
    if(
$must_connect) {
      
$this->MyCpt_Connect();
      
$this->MyCpt_Visite();
    }
  }

  
# Fonction enregistre les statistiques par Navigateur
  
function MyCpt_AddBackRef() {
    
$this->MyCpt_Query("SELECT COUNT(*) AS n FROM ".$this->PRETABLE.$this->T_BACK." WHERE referer='".addslashes($_SERVER["HTTP_REFERER"])."'");
    if(
$this->MyCpt_OneResult("n")==1)
      
$this->MyCpt_Query("UPDATE ".$this->PRETABLE.$this->T_BACK." SET cpt=cpt+1 WHERE referer='".addslashes($_SERVER["HTTP_REFERER"])."'");
    else
      
$this->MyCpt_Query("INSERT INTO ".$this->PRETABLE.$this->T_BACK." (id, referer, cpt) VALUES ('".$this->MyCpt_MakeId($this->PRETABLE.$this->T_BACK)."', '".addslashes($_SERVER["HTTP_REFERER"])."', '1')");
  }

  
# Fonction enregistre les statistiques par Navigateur
  
function MyCpt_AddBrowser() {
    
$this->MyCpt_Query("SELECT COUNT(*) AS n FROM ".$this->PRETABLE.$this->T_BROW." WHERE navigateur='".addslashes($_SERVER["HTTP_USER_AGENT"])."'");
    if(
$this->MyCpt_OneResult("n")==1)
      
$this->MyCpt_Query("UPDATE ".$this->PRETABLE.$this->T_BROW." SET cpt=cpt+1 WHERE navigateur='".addslashes($_SERVER["HTTP_USER_AGENT"])."'");
    else
      
$this->MyCpt_Query("INSERT INTO ".$this->PRETABLE.$this->T_BROW." (id, navigateur, cpt) VALUES ('".$this->MyCpt_MakeId($this->PRETABLE.$this->T_BROW)."', '".addslashes($_SERVER["HTTP_USER_AGENT"])."', '1')");
  }

  
# Fonction qui ajoute une Image
  
function MyCpt_AddImage() {
    
$now=time();
    
$now=mktime(000date("m",$now), date("d"$now), date("Y"$now));
    
$this->MyCpt_Query("SELECT COUNT(*) AS n FROM ".$this->PRETABLE.$this->T_INFO." WHERE dth='".$now."'");
    if(
$this->MyCpt_OneResult("n")==1)
      
$this->MyCpt_Query("UPDATE ".$this->PRETABLE.$this->T_INFO." SET img=img+1 WHERE dth='".$now."'");
    else
      
$this->MyCpt_Query("INSERT INTO ".$this->PRETABLE.$this->T_INFO." (dth, dth_human, visite, page, img) VALUES ('".$now."','".date("Y/m/d H:i:s",$now)."', '0', '0', '1')");
  }

  
# Fonction qui ajoute une Page pour un script donné
  
function MyCpt_AddPage() {
    
$now=time();
    
$now=mktime(000date("m",$now), date("d"$now), date("Y"$now));
    
$this->MyCpt_Query("SELECT COUNT(*) AS n FROM ".$this->PRETABLE.$this->T_INFO." WHERE dth='".$now."'");
    if(
$this->MyCpt_OneResult("n")==1)
      
$this->MyCpt_Query("UPDATE ".$this->PRETABLE.$this->T_INFO." SET page=page+1 WHERE dth='".$now."'");
    else
      
$this->MyCpt_Query("INSERT INTO ".$this->PRETABLE.$this->T_INFO." (dth, dth_human, visite, page, img) VALUES ('".$now."','".date("Y/m/d H:i:s",$now)."', '0', '1', '0')");
    
# On additione une page pour le script du site
    
if($this->STAT_SERV) {
      if(
$this->STAT_URI) {
        
$this->MyCpt_Query("SELECT COUNT(*) AS n FROM ".$this->PRETABLE.$this->T_STAT." WHERE dth='".$now."' AND server='".$_SERVER["SERVER_NAME"]."' AND script='".$_SERVER["PHP_SELF"]."' AND uri='".$_SERVER["QUERY_STRING"]."'");
        if(
$this->MyCpt_OneResult("n")==1)
          
$this->MyCpt_Query("UPDATE ".$this->PRETABLE.$this->T_STAT." SET page=page+1 WHERE dth='".$now."' AND server='".$_SERVER["SERVER_NAME"]."' AND script='".$_SERVER["PHP_SELF"]."' AND uri='".$_SERVER["QUERY_STRING"]."'");
        else
          
$this->MyCpt_Query("INSERT INTO ".$this->PRETABLE.$this->T_STAT." (dth, dth_human, visite, page, server, script, request_uri, uri) VALUES ('".$now."','".date("Y/m/d H:i:s",$now)."', '0', '1', '".$_SERVER["SERVER_NAME"]."', '".$_SERVER["PHP_SELF"]."', '".$_SERVER["REQUEST_URI"]."', '".$_SERVER["QUERY_STRING"]."')");
      }
      else {
        
$this->MyCpt_Query("SELECT COUNT(*) AS n FROM ".$this->PRETABLE.$this->T_STAT." WHERE dth='".$now."' AND server='".$_SERVER["SERVER_NAME"]."' AND script='".$_SERVER["PHP_SELF"]."'");
        if(
$this->MyCpt_OneResult("n")==1)
          
$this->MyCpt_Query("UPDATE ".$this->PRETABLE.$this->T_STAT." SET page=page+1 WHERE dth='".$now."' AND server='".$_SERVER["SERVER_NAME"]."' AND script='".$_SERVER["PHP_SELF"]."'");
        else
          
$this->MyCpt_Query("INSERT INTO ".$this->PRETABLE.$this->T_STAT." (dth, dth_human, visite, page, server, script) VALUES ('".$now."','".date("Y/m/d H:i:s",$now)."', '0', '1', '".$_SERVER["SERVER_NAME"]."', '".$_SERVER["PHP_SELF"]."')");
      }
    }
  }

  
# Fonction qui ajoute une Visite
  
function MyCpt_AddVisite() {
    
$now=time();
    
$now=mktime(000date("m",$now), date("d"$now), date("Y"$now));
    
$this->MyCpt_Query("SELECT COUNT(*) AS n FROM ".$this->PRETABLE.$this->T_INFO." WHERE dth='".$now."'");
    if(
$this->MyCpt_OneResult("n")==1)
      
$this->MyCpt_Query("UPDATE ".$this->PRETABLE.$this->T_INFO." SET visite=visite+1 WHERE dth='".$now."'");
    else
      
$this->MyCpt_Query("INSERT INTO ".$this->PRETABLE.$this->T_INFO." (dth, dth_human, visite, page, img) VALUES ('".$now."','".date("Y/m/d H:i:s",$now)."', '1', '0', '0')");
  }

  
# Fonction qui ajoute une Visite pour un script donné
  
function MyCpt_AddVisite_Script() {
    
$now=time();
    
$now=mktime(000date("m",$now), date("d"$now), date("Y"$now));
    if(
$this->STAT_URI) {
      
$this->MyCpt_Query("SELECT COUNT(*) AS n FROM ".$this->PRETABLE.$this->T_STAT." WHERE dth='".$now."' AND server='".$_SERVER["SERVER_NAME"]."' AND script='".$_SERVER["PHP_SELF"]."' AND uri='".$_SERVER["QUERY_STRING"]."'");
      if(
$this->MyCpt_OneResult("n")==1)
        
$this->MyCpt_Query("UPDATE ".$this->PRETABLE.$this->T_STAT." SET visite=visite+1 WHERE dth='".$now."' AND server='".$_SERVER["SERVER_NAME"]."' AND script='".$_SERVER["PHP_SELF"]."' AND uri='".$_SERVER["QUERY_STRING"]."'");
      else
        
$this->MyCpt_Query("INSERT INTO ".$this->PRETABLE.$this->T_STAT." (dth, dth_human, visite, page, server, script, request_uri, uri) VALUES ('".$now."','".date("Y/m/d H:i:s",$now)."', '1', '0', '".$_SERVER["SERVER_NAME"]."', '".$_SERVER["PHP_SELF"]."', '".$_SERVER["REQUEST_URI"]."', '".$_SERVER["QUERY_STRING"]."')");
    }
    else {
      
$this->MyCpt_Query("SELECT COUNT(*) AS n FROM ".$this->PRETABLE.$this->T_STAT." WHERE dth='".$now."' AND server='".$_SERVER["SERVER_NAME"]."' AND script='".$_SERVER["PHP_SELF"]."'");
      if(
$this->MyCpt_OneResult("n")==1)
        
$this->MyCpt_Query("UPDATE ".$this->PRETABLE.$this->T_STAT." SET visite=visite+1 WHERE dth='".$now."' AND server='".$_SERVER["SERVER_NAME"]."' AND script='".$_SERVER["PHP_SELF"]."'");
      else
        
$this->MyCpt_Query("INSERT INTO ".$this->PRETABLE.$this->T_STAT." (dth, dth_human, visite, page, server, script) VALUES ('".$now."','".date("Y/m/d H:i:s",$now)."', '1', '0', '".$_SERVER["SERVER_NAME"]."', '".$_SERVER["PHP_SELF"]."')");
    }
  }

  
# Fonction qui retourne le nombre d'images vues (par défaut toutes)
  # sinon si une date est donnée pour ce jour. $date est unix_timestamp.
  
function MyCpt_GetImage($date=false) {
    
$this->MyCpt_Query("SELECT SUM(img) AS n FROM ".$this->PRETABLE.$this->T_INFO.($date?" WHERE dth='".$date."'":""));
    return(
$this->MyCpt_OneResult("n"));
  }

  
# Fonction qui retourne le nombre de page (par défaut toutes)
  # sinon si une date est donnée pour ce jour. $date est unix_timestamp.
  
function MyCpt_GetPage($date=false) {
    
$this->MyCpt_Query("SELECT SUM(page) AS n FROM ".$this->PRETABLE.$this->T_INFO.($date?" WHERE dth='".$date."'":""));
    return(
$this->MyCpt_OneResult("n"));
  }

  
# Fonction qui retourne le nombre de pages vues par script (par défaut pour l'URI)
  # Si une date est donnée ne calcul que pour ce jour. $date est unix_timestamp.
  
function MyCpt_GetPage_Script($verbose=true$date=false) {
    
$ls_query="SELECT SUM(page) AS n FROM ".$this->PRETABLE.$this->T_STAT." WHERE server='".$_SERVER["SERVER_NAME"]."' AND script='".$_SERVER["PHP_SELF"]."'";
    if(
$verbose)
      
$ls_query.=" AND uri='".$_SERVER["QUERY_STRING"]."'";
    if(
$date)
    
$ls_query.=" AND dth='".$date."'";
    
$this->MyCpt_Query($ls_query);
    return(
$this->MyCpt_OneResult("n"));
  }

  
# Fonction qui retourne le nombre de visite (par défaut toutes)
  # sinon si une date est donnée pour ce jour. $date est unix_timestamp.
  
function MyCpt_GetVisite($date=false) {
    
$this->MyCpt_Query("SELECT SUM(visite) AS n FROM ".$this->PRETABLE.$this->T_INFO.($date?" WHERE dth='".$date."'":""));
    return(
$this->MyCpt_OneResult("n"));
  }

  
# Fonction qui retourne le nombre de visite par script (par défaut pour l'URI)
  # Si une date est donnée ne calcul que pour ce jour. $date est unix_timestamp.
  
function MyCpt_GetVisite_Script($verbose=true$date=false) {
    
$ls_query="SELECT SUM(visite) AS n FROM ".$this->PRETABLE.$this->T_STAT." WHERE server='".$_SERVER["SERVER_NAME"]."' AND script='".$_SERVER["PHP_SELF"]."'";
    if(
$verbose)
      
$ls_query.=" AND uri='".$_SERVER["QUERY_STRING"]."'";
    if(
$date)
    
$ls_query.=" AND dth='".$date."'";
    
$this->MyCpt_Query($ls_query);
    return(
$this->MyCpt_OneResult("n"));
  }

  
# Fonction qui retourne le nombre de visiteurs sur le site
  
function MyCpt_GetVisiteur() {
    
$this->MyCpt_Query("SELECT ip_remote, ip_client, ip_proxy FROM ".$this->PRETABLE.$this->T_IP." WHERE dth>='".(int)(time()-$this->TIME_OUT)."' GROUP BY ip_remote, ip_client, ip_proxy");
    return(
$this->MyCpt_QCount());
  }

  
# Fonction qui retourne le nombre de visiteurs sur le site
  
function MyCpt_GetVisiteur_Script($verbose=true) {
    
$this->MyCpt_Query("SELECT ip_remote, ip_client, ip_proxy FROM ".$this->PRETABLE.$this->T_IP." WHERE dth>='".(int)(time()-$this->TIME_OUT)."' AND  server='".$_SERVER["SERVER_NAME"]."' AND script='".$_SERVER["PHP_SELF"]."' ".($verbose?" AND uri='".$_SERVER["QUERY_STRING"]."' ":"")." GROUP BY ip_remote, ip_client, ip_proxy");
    return(
$this->MyCpt_QCount());
  }

  
# Fonction qui ajoute un visiteur et supprime les plus vieux
  
function MyCpt_Visite() {
    if(!
$addr=getenv("REMOTE_ADDR"))
      
$addr="";
    if(!
$cli=getenv("HTTP_CLIENT_IP"))
      
$cli="";
    if(!
$prox=getenv("HTTP_X_FORWARDED_FOR"))
      
$prox="";
    
# On récupère la plus récente connexion pour cette IP
    
$this->MyCpt_Query("SELECT MAX(dth) AS n FROM ".$this->PRETABLE.$this->T_IP." WHERE ip_remote='".$addr."' AND ip_client='".$cli."' AND ip_proxy='".$prox."'");
    
#    $t=$this->MyCpt_OneResult("n");print $t." ".date("Y/d/m H:i:s",$t)." - ".time()."[".($t+$this->TIME_ALIVE)."] ".date("Y/d/m H:i:s",time());
    # Si plus vieille que le TIME_ALIVE seconndes, On ajoute une visite.
    
if(($this->MyCpt_OneResult("n")+$this->TIME_ALIVE)<time())
      
$this->MyCpt_AddVisite();
    
# On s'occupe de la version per script
    
if($this->STAT_SERV) {
      if(
$this->STAT_URI)
        
$this->MyCpt_Query("SELECT MAX(dth) AS n FROM ".$this->PRETABLE.$this->T_IP." WHERE ip_remote='".$addr."' AND ip_client='".$cli."' AND ip_proxy='".$prox."' AND server='".$_SERVER["SERVER_NAME"]."' AND script='".$_SERVER["PHP_SELF"]."' AND uri='".$_SERVER["QUERY_STRING"]."'");
      else
        
$this->MyCpt_Query("SELECT MAX(dth) AS n FROM ".$this->PRETABLE.$this->T_IP." WHERE ip_remote='".$addr."' AND ip_client='".$cli."' AND ip_proxy='".$prox."' AND server='".$_SERVER["SERVER_NAME"]."' AND script='".$_SERVER["PHP_SELF"]."'");
      if((
$this->MyCpt_OneResult("n")+$this->TIME_ALIVE)<time())
        
$this->MyCpt_AddVisite_Script();
    }
    
# Lance le stockage des stats sur le browser
    
if($this->STAT_BROW)
      
$this->MyCpt_AddBrowser();
    
# Lance le stockage des stats sur le Referer
    
if($this->STAT_BACK)
      
$this->MyCpt_AddBackRef();
    
$this->MyCpt_Query("INSERT INTO ".$this->PRETABLE.$this->T_IP." (dth, dth_human, ip_remote, ip_client, ip_proxy, server, script, request_uri, uri) VALUES ('".time()."','".date("Y/m/d H:i:s",time())."','".$addr."','".$cli."','".$prox."','".$_SERVER["SERVER_NAME"]."','".$_SERVER["PHP_SELF"]."','".$_SERVER["REQUEST_URI"]."','".$_SERVER["QUERY_STRING"]."')");
    
$this->MyCpt_Query("DELETE FROM ".$this->PRETABLE.$this->T_IP." WHERE dth<'".(int)(time()-$this->TIME_ALIVE)."'");
  }

  
/*
  +---------------------------------------------------------------------------+
  |                                                                           |
  | Les FONCTIONS DIVERSES (Connexion Database, Message d'Erreur, etc)        |
  |                                                                           |
  +---------------------------------------------------------------------------+
  */
  
  # Fonction de connexion à la database
  
function MyCpt_Connect() {
    
$this->LINKIDB=@mysql_connect($this->HOST$this->USER$this->PASSWORD);
    if(!
$this->LINKIDB)
      
$this->MyCpt_Error("La connexion à la base a échoué. {".mysql_errno()."}{".mysql_error()."}");
    if(!@
mysql_select_db($this->DATABASE))
      
$this->MyCpt_Error("La sélection de la base a échoué. {".mysql_errno()."}{".mysql_error()."}");
  }

  
# Fonction de modification des paramètres de la base de données
  # $db est en premier car c'est souvent (dans mon cas) la DB que je change
  #function MyCpt_DbParam($db=$this->DATABASE, $host=$this->HOST, $user=$this->USER, $password=$this->PASSWORD) {
  
function MyCpt_DbParam($db$host$user$password) {
    
$this->HOST     $host;
    
$this->USER     $user;
    
$this->PASSWORD $password;
    
$this->DATABASE $db;
  }

  
# Fonction de gestion des erreurs
  
function MyCpt_Error($msg) {
    
$this->LASTERROR $msg;
    
$this->DATEERROR time();
    
$ls_msg "[".$_SERVER["SERVER_NAME"]."][".date("d/m/Y H:i:s",$this->DATEERROR)."][".$this->CLASSENAME."][".$_SERVER["PHP_SELF"]."][";
    if(
$this->FULLERROR)
      
$ls_msg.=$this->USER.":********@".$this->HOST."/".$this->DATABASE;
    else
      
$ls_msg.=$this->DATABASE;
    
$ls_msg.="][".$msg."]\n";
    if(
$this->PRINTERROR)
      print (
"<!-- \n".$ls_msg."--><font color=\"#ff0000\"><strong>".$ls_msg."</strong></font><br/>");
    if(
$this->LOGERROR)
      @
error_log($ls_msg0);
    if(
$this->FILEERROR)
      if(
$this->FULLERROR)
        
error_log($ls_msg3"./Fly_MyCpt_".$this->DATABASE.".log");
      else
        @
error_log($ls_msg3"./Fly_MyCpt_".$this->DATABASE.".log");
    if(
$this->EXITERROR)
      exit();
  }

  
# Fonction qui génère un id
  
function MyCpt_MakeId($as_table$len=5){
    
$max_tentative=100;
    
$ls_lst ="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
$ls_lst.="abcdefghijklmnopqrstuvwxyz";
    
$ls_lst.="0123456789";
    if(
$len<|| $len>20)
      
$len=5;
    
# Plus utile depuis PHP 4.2.0
    
srand(time());
    do{
      
$good=false;
      
$val="";
      for(
$i=0;$i<$len;$i++)
        
$val.=$ls_lst[rand(0,strlen($ls_lst)-1)];
      
$this->MyCpt_Query("SELECT id FROM ".$as_table." WHERE id='".$val."'");
      if(
$this->MyCpt_QCount()<1)
       
$good=true;
      else
        if(--
$max_tentative<0)
          return(-
1);
    }while(!
$good);
    return(
$val);
  }

  
# Fonction qui retourne un résultat de requete, mais uniquement 1 dont
  # le nom est passé en argument.
  
function MyCpt_OneResult($qui) {
    if(
$res=@mysql_fetch_array($this->QRESULT))
      return(
$res[$qui]);
    return(
0);
  }

  
# Fonction de décompte du résultat de la requete
  
function MyCpt_QCount() {
    if(
eregi("^SELECT(.*)$"trim($this->LASTQUERY)))
      return(@
mysql_num_rows($this->QRESULT));
    if(
eregi("^(INSERT|DELETE|UPDATE)(.*)$"trim($this->LASTQUERY)))
      return(@
mysql_affected_rows($this->QRESULT));
    
$this->MyCpt_Error("On ne peut obtenir de décompte pour la requete suivante {".$this->LASTQUERY."}. {".mysql_errno()."}{".mysql_error()."}");
  }

  
# Fonction d'éxecution des requetes
  
function MyCpt_Query($query) {
    
$this->LASTQUERY $query;
    
$this->QRESULT=@mysql_query($query$this->LINKIDB);
    if(!
$this->QRESULT)
      
$this->MyCpt_Error("La requete suivante n'a pas été executée {".$query."}. {".mysql_errno()."}{".mysql_error()."}");
  }

  
  
# end of Class Fly_MyCpt

?>