<?php

// ------------------------------------------------------------------------- //
// Se connecter, créer des requêtes et les parcourir facilement              //
// ------------------------------------------------------------------------- //
// Deux classes objets qui vous permettront de vous connecter, créer des     //
// requêtes et les parcourir en quelques lignes à la façon ASP. Elles vous   //
// permettent de ne pas mettre la main à la patte et de se triturer l'esprit //
// avec les méthodes mySQL. C'est un temps fou que l'on peut gagner, à ne    //
// pas manquer !                                                             //
// ------------------------------------------------------------------------- //
// Auteur: macololo                                                          //
// Email:  codeinfos@club-internet.fr                                        //
// Web:                                                                      //
// ------------------------------------------------------------------------- //

// Ces classes sont libres de droit. Je vous demande juste de me tenir au
// courant si vous apportez des modifications et de laisser mes coordonnées sur
// le fichier.
// Bon développement

//Vous mettez ici les informations concernant votre serveur de bases de données
//mySQL
$hote = "localhost";//la machine
$user = "nom_user";//l'utilisateur
$passworddb = "mot_de_passe";//le mot de passe
$base = "nom_de_la_base";//la base de données
//Vous pouvez le laisser dans ce fichier ou l'enlever

//Ceci est la classe connection qui permet de se connecter à la base de données
// et de faire une requête
/*on trouve 3 propriétés importantes :
        - $liste_req qui est un tableau contenant les listes d'enregistrements
          de vos différentes requêtes, la clef du
tableau est le nom que l'on donne à la requête
        - $erreur_n qui est le numéro de l'erreur qui s'est passé
        - $erreur qui l'explication de l'erreur elle même
et 3 méthodes
        - le constructeur qui fait la connection
        - execute qui prends paramètres : nom de la requête, type de requête, la
          requête elle même
        - close pour fermer la connection
*/
//---------- CLASS CONNECTION -------
class connection {

var
$liste_req; //tableau des requêtes
var $LienBase; //lien vers la base de données
var $erreur_n = 1; //numéro d'erreur
var $erreur; //erreur généré par mySQL
var $hote; //nom du serveur logeant le serveur MySQL
var $login; //login de connection à MySQL
var $password; //mot de passe de connection à MySQL

//cette fonction permet de se connecter à la base de données
function connection($hote, $login, $password, $base) {
        
$this->hote = $hote;
        
$this->login = $login;
        
$this->password = $password;
        
$this->base = $base;
        
//connection à la base
        
$this->LienBase = mysql_connect($this->hote, $this->login, $this->password);
        if (!
$this->LienBase) {//si erreur
                
$this->erreur_n = 0;
                
$this->erreur = mysql_error();
        }
        
//retoune 1 si ok ou 0 si pas bon. Vous pouvez testez s'il y a erreur et
        //dans de cas
        
return $this->erreur_n;
affichez le message
}

/*la méthode 'execute' comprend un argument type qui est un entier :
        - 1 pour une requête de type sélection
        - 2 pour une requête de type mise à jour

Cette méthode 'execute' la requête $requête et vous lui assignez un nom $nom
Le tableau liste_req est un tableau indexé sur le nom $nom et contient des objets
'navigation' qui permettent de parcourir le résultat de la requête
*/
function execute ($nom, $type, $requete) {
        
//on execute la requête
        
$result = mysql_db_query ($this->base, $requete, $this->LienBase);
        
//on vérifie qu'elle a marché
        
if (!$result) {
                
$this->erreur_n = 0;
                
$this->erreur = mysql_error();
        } else {
                
//on ajoute une case au tableau des requêtes
                
if ($type == 1) {
                        
$this->liste_req = array_merge($this->liste_req,
                            array(
$nom => new navigation($result)));
                }
        }
        return
$this->erreur_n;
}

//pour fermer la connection
function close () {
        
mysql_close($this->LienBase);
        unset(
$liste_req);
        return
$this->erreur_n;
}

//fermeture de la classe
}

/*Ceci est la classe navigation. Le tableau liste_req référence des objets de
cette classe 2 propriétés principales :
        - EOF (end of file) qui est un booléen (entier 1 ou 0) qui indique si
          vous êtes en fin du jeu d'enregistrements
        - BOF (begin of file) qui est un booléen (entier 1 ou 0) qui indique si
          vous êtes en début du jeu
d'enregistrements
5 méthodes utiles :
        - MoveNext qui vous permet de passer à l'enregistrement suivant
        - MoveBack qui vous permet de revenir à l'enregistrement précédent
        - MoveLast qui vous permet de passer au dernier enregistrement
        - MoveFirst qui vous permet de revenir au premier enregistrement
        - field("nom_du_champ") qui renvoie le contenue du champ où pointe
          l'enregistrement
*/
class navigation {

var
$tbl_ligne;
var
$rang = 0;
var
$result;
var
$EOF = 1;
var
$BOF = 1;

function
navigation ($lien_req) {
        
$this->result = $lien_req;
        
//on va placer un pointeur sur le premier enregistrement
        
if (@mysql_num_rows($this->result) != 0) {
                
$this->rang = 1;
                
$this->EOF = 0;
                
$this->BOF = 1;
        } else {
                
$this->rang = 0;
                
$this->EOF = 1;
                
$this->BOF = 1;
        }
}

function
vide() {
        if (
0 == mysql_num_rows($this->result)) {
                return
1;
        } else {
                return
0;
        }
}       

function
MoveNext() {
        if (
$this->rang < mysql_num_rows($this->result)) {
                        
$this->rang = $this->rang + 1;
        } else {
                
$this->rang = mysql_num_rows($this->result);
                
$this->erreur_n = 0;
                
$this->erreur = "Fin de jeu d'enregistrements atteintes.";
                
$this->EOF = 1;
        }
        return
$this->erreur_n;         
}

function
MoveBack() {
        if (
$this->rang > 1 ) {
                
$this->rang = $this->rang - 1;
        } else {
                
$this->erreur_n = 0;
                
$this->erreur = "Début de jeu d'enregistrement atteintes.";
                
$this->BOF = 1;
                
$this->rang = 1;
        }
        return
$this->erreur_n;         
}

function
MoveFirst() {
  if (!
$this->vide()) {
        if (!
mysql_data_seek($this->result, 0)) {
                
$this->erreur_n = 0;
        } else {
                
$this->rang = 1;
                
$this->BOF = 1;
                
$this->EOF = 0;
        }
  }
}

function
MoveLast() {
  if (!
$this->vide()) {
        if (!
mysql_data_seek($this->result, mysql_num_rows($this->result) - 1)) {
                
$this->erreur_n = 0;
        } else {
                
$this->rang = mysql_num_rows($this->result);
                
$this->BOF = 0;
                
$this->EOF = 1;
        }
  }
}

function
field ($champ) {
        if (!
mysql_data_seek($this->result, $this->rang - 1)) {
                
$this->erreur_n = 0;
        }
        
$this->tbl_ligne = mysql_fetch_array($this->result);
        if (
$this->tbl_ligne[$champ]) {
                return
$this->tbl_ligne[$champ];
        } else {
                
$this->erreur_n = 0;
                
$this->erreur = mysql_error();
        }
}
//fermeture de la classe
}

//------------------------ EXEMPLE D'UTILISATION ----------------------------------------
//Je vous conseille de mettre ce fichier dans chaque répertoire de votre site
//et d'y faire appel avec la commande :
//    -----> require("base.php");

//Tout d'abord on cret la connection (n'oubliez pas de renseigner les variables
//de début de fichier base.php)
$connection = new connection ($hote, $user, $passworddb, $base);
if (
$connection->erreur_n == 0) {
        echo
"Une erreur est survenu à la connection : <br>";
        echo
$connection->erreur;
        exit;
}

//on cret la requête :
$req = "SELECT * FROM personne"; //table personne avec deux champs : nom et prénom
//on éxécute la requête de séléction (notez l'argument du milieu qui est 1), si
//la requête est un
//UPDATE ou INSERT qui ne renvoit pas de jeu d'enregistrements, mettez 2
//le nom de la requête est selectman
if ($connection->execute("selectman",1,$req) == 0) {
        echo
"Erreur d'exécution : <br>";
        echo
$erreur;
    exit;
}
//on affecte à $records le jeu d'enregistrement résultant de la requête
$records = $connection->liste_req["selectman"]

//on parcours le jeu d'enregistrements
while (!$records->EOF) {
        echo
$records->fields("nom");
        echo
$records->fields("prenom");
        
$records->MoveNext(); //vous pouvez faire MoveBack, MoveFirst, MoveLast
                              //et test sur BOF (begin of file)
}

?>