<?php
// +----------------------------------------------------------------------+
// | Class de connexion Base de donn?es MySQL                             |
// +----------------------------------------------------------------------+
// | 5 Septembre 2004                                                     |
// +----------------------------------------------------------------------+
// | Ceci est une classe pour la cr?ation d'objet de connexion ? une      |
// | base de donn?e MySQL, ainsi que des m?thodes pour la gestion         |
// | et les diff?rentes possibilit?s de s?lection.                        |
// +----------------------------------------------------------------------+
// | Auteur: Nottet Thomas                                                |
// +----------------------------------------------------------------------+
// | Remarque: Tous les arguments des m?thodes sont de types STRING       |
// +----------------------------------------------------------------------+
//

class Mysql
  {
  function Mysql($srv,$db,$usr,$pwd) //Constructeur
    {
    /* Ouverture d'une connexion ? un serveur MySQL et
       selection de la table ? utiliser 
       
       $srv = nom du serveur MySQL
       $db  = Base de donn?es ? utiliser
       $usr = nom d'utlisateur du serveur MySQL
       $pwd = mot de passe de cette utilisateur
    */

    $this->db=$db; 
    $this->id_connect=@mysql_connect($srv,$usr,$pwd);
    $dbselect=@mysql_select_db($this->db, $this->id_connect);
    if(!$dbselect)
       {
       $this->Close();
       $this->id_connect=false;
       }
    }
  
  public function Close()
    {
    @mysql_close($this->id_connect);
    }
  
  public function Select($champs,$tables,$conditions,$group,$order,$nbrec,$liminf)
    /* Effectue une requ?te SELECT sur la table choisie
    
       RETOUR: une matrice (nbre de records X nbre de champs)
               false en cas d'?chec ou 0 enregistrement
      
      $champs     = une liste des champs s?par?s par ,
      $tables     = une liste des tables s?par?es par , avec alias si n?cessaire
      $conditions = liste des conditions s?par?s par des op?rateurs logiques
      $group      = champ(s) sur le(s)quel(s) sera effectu? un regroupement
      $order      = champ(s) sur le(s)quel(s) seront tri?s les enregistrements 
                    (+ ASC pour croissant et DESC pour d?croissant)
      $liminf     = index du premier enregistrement de l'intervalle ? retourner
      $nbrec      = nombre d'enregistrements ? retourner
    */
    {
	$this->total_req++;
	
    $query="SELECT ".$champs." FROM ".$tables;
    if(!empty($conditions))
      {
      $query=$query." WHERE ".$conditions;
      }
    if(!empty($group))
      {
      $query=$query." GROUP BY ".$group;
      }
    if(!empty($order))
      {
      $query=$query." ORDER BY ".$order;
      }
    if(!empty($nbrec))
      {
      if(!empty($liminf))
        {
        $query=$query." LIMIT ".$liminf.", ".$nbrec;
        }
      else
        {
        $query=$query." LIMIT ".$nbrec;
        }
      }
    if($this->id_connect != false)
      {
      $res=@mysql_query($query, $this->id_connect);
      if (empty($res))
        {
        return false;
        }
      else
        {
        $nbRows=@mysql_num_rows($res);
        if ($nbRows==0)
          {
          return false;
          }
        else
          {
          for($i=0;$i<$nbRows;$i++)
            {
            $enregs[$i]=@mysql_fetch_array($res, MYSQL_ASSOC);
            }
          return $enregs;
          }
        }
      }
    else
      {
      return false; 
      }
    }
	
  public function Count($champs,$tables,$conditions) {
  		$this->total_req++;
  		$query = "SELECT COUNT(".$champs.") AS count FROM ".$tables;
		if(!empty($conditions)) {
			$query.= " WHERE ".$conditions;
		}
		 $res  = @mysql_query($query, $this->id_connect);
		 
		 if($res) {
		 $res2 = mysql_fetch_array($res);
		 return $res2['count'];
		 }
		 else {
		 return 0;
		 }
    }
  
  public function Insert($champs,$valeurs,$table)
    /* Effectue une requ?te INSERT sur une table de la 
       base s?lectionn?e
       
       RETOUR : True en cas de r?ussite
                False en cas d'?chec
       
      $champs  = une liste des champs s?par?s par ,
      $valeurs = une liste de valeurs pour les champs correspondant s?par?s par ,
      $table   = la table dans laquelle il faut ins?rer les enregistrements
    */  
    {
	$this->total_req++;
	
    $query="INSERT INTO ".$table." (".$champs.")
            VALUES (".$valeurs.")";
    if($this->id_connect != false)
      {
      $res= @mysql_query($query, $this->id_connect);
      if ($res)
        {
        return true;
        }
      else
        {
        return mysql_error();
        }
      }
    else
      {
      return mysql_error();
      }
    } 

  
  public function Delete($table,$conditions)
    /* Effectue une requ?te DELETE sur une table de la 
       base s?lectionn?e
       
       RETOUR : Le nombre d'enregistrements supprim?s
                False en cas d'?chec
   
      $table      = la table dans laquelle il faut ins?rer les enregistrements
      $conditions = liste des conditions s?par?s par des op?rateurs logiques
    */  
    {
	$this->total_req++;
	
    $query="DELETE FROM ".$table;
    if(!empty($conditions))
      {
      $query=$query." WHERE ".$conditions;
      }    

    if($this->id_connect != false)
      {
      $res=@mysql_query($query, $this->id_connect);
      if (empty($res))
        {
        return false;
        }
      else
        {
        return mysql_affected_rows($this->id_connect);
        }
      }
    }
  
  public function Update($tables,$champs,$valeurs,$conditions)
    /* Effectue une requ?te UPDATE sur une table de la 
       base s?lectionn?e
       
       RETOUR : Le nombre d'enregistrements mis ? jour
                False en cas d'?chec
   
      $tables     = listes de tables dans lesquelles il faut mettre ? jour les enregistrements
      $champs     = Champs ? mettre ? jour : soit une valeur
                                             soit un vecteur si il y a plusieurs champs
      $valeurs    = Valeurs pour mettre ? jour : soit une valeur
                                                 soit un vecteur si il y a plusieurs champs
      $conditions = liste des conditions s?par?s par des op?rateurs logiques
    */  
    {
	$this->total_req++;
	
    $query="UPDATE ".$tables." ";
    $nbchamps=count($champs);
    if ($nbchamps!=0)
      {
      if ($nbchamps==1)
        {
        $query=$query."SET ".$champs."='".$valeurs."' ";
        }
      else
        {
        $query=$query."SET ".$champs[0]."='".$valeurs[0]."'";
        for($i=1;$i<$nbchamps;$i++)
          {
          $query=$query.", ".$champs[$i]."=".$valeurs[$i];
          }
        }
      }
    if(!empty($conditions))
      {
      $query=$query." WHERE ".$conditions;
      }
    if($this->id_connect != false)
      {
      $res=@mysql_query($query, $this->id_connect);
      if (empty($res))
        {
        return false;
        }
      else
        {
        return @mysql_affected_rows($this->id_connect);
        }
      }
	  
	 
    }

  private $db;
  public $id_connect;
  public $total_req = 0;
}

?>
