begin process at 2012 05 27 22:10:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > CLASS SQL PLUTÔT COMPLÈTE, AVEC UNE GESTION DES ERREURS PAR FICHIER

CLASS SQL PLUTÔT COMPLÈTE, AVEC UNE GESTION DES ERREURS PAR FICHIER


 Information sur la source

Note :
3 / 10 - par 2 personnes
3,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :sql, class, classe, gestion, erreur Niveau :Débutant Date de création :27/07/2005 Date de mise à jour :22/08/2005 23:43:08 Vu :5 473

Auteur : the_angel

Ecrire un message privé
Site perso
Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

 Description

Bonjour, alors voilà en fait c'est une class SQL toute bête, rien de bien aprticulier, à part peut-être la gestion des erreurs SQL par l'intermédiaire des fichiers, ce qu ipermet de garder un historique des problèmes SQL.

Source

  • <?php
  • //Script pour une class php4 avec gestion des erreus par fichier, nombre de requetes
  • class Mysql
  • {
  • var $host = 'localhost'; //Valeur par défault du serveur
  • var $user = 'cerfvice'; //Valeur par défault de l'utilisateur
  • var $pass = 'eh2eeevu'; //Valeur par défault du mot de passe
  • var $db = 'cerfvice_'; //Valeur par défault de la base de donnée
  • var $aff_errors; //Si true on affiche les erreurs, si false on ne les affiches pas
  • var $save_errors; //Si true on enregistre les erreurs, si false on ne les enregistre pas
  • var $path_errors = './logs/errors_sql/'; //Contient le chemin relatif du dossier où sont stoqué les fichié d'érreurs SQL
  • var $error; //On initialise la variable $error qui contiendras les erreurs personnalisées
  • var $nbr_query = 0; //On initialise la variable $nbr_query à 0
  • function Mysql($serveur = false, $client = false, $password = false, $data_abse = false, $list_errors = true, $register_errors = true) //__construct
  • {
  • //On définis les variables servants à la gestion des erreurs:
  • if ($list_errors)
  • $this->aff_errors = true;
  • else
  • $this->aff_errors = false;
  • if ($register_errors)
  • $this->save_errors = true;
  • else
  • $this->save_errors = false;
  • //On vérifie si l'utilisateur demande une configuration précise:
  • if ($serveur)
  • $this->host = $serveur;
  • if ($client)
  • $this->user = $client;
  • if ($password)
  • $this->pass = $password;
  • if ($data_abse)
  • $this->db = $data_abse;
  • $this->Connect($this->host, $this->user, $this->pass);
  • $this->Select_db($this->db);
  • }
  • function Connect($host, $user, $pass)
  • {
  • $infos = array($this->host, $this->user, $this->pass); //Array contenant le nom d'accès au serveur, le nom de l'utilisateur et le mot de passe pour la fonction Error qui gère les erreurs
  • mysql_connect ($host, $user, $pass) or die($this->Error($infos, 'connect') );
  • }
  • function Select_db($db, $id = false)
  • {
  • if ($id)
  • mysql_select_db ($db, $id) or die($this->Error($db, 'select_db') );
  • else
  • mysql_select_db ($db) or die($this->Error($db, 'select_db') );
  • }
  • function Close($id = false) //__destruct /-/-/-/-/-/ Destructeur non mis en place, car c'est une class optimisé pour php4
  • {
  • if ($id)
  • mysql_close ($id);
  • else
  • mysql_close ();
  • }
  • function Query($sql)
  • {
  • $query = mysql_query($sql) or die($this->Error($sql, 'query') );
  • ++$this->nbr_query;
  • return $query;
  • }
  • function Fetch($req, $type = 'assoc')
  • {
  • switch ($type)
  • {
  • case 'row':
  • $fetch = mysql_fetch_row ($req);
  • break;
  • case 'array':
  • $fetch = mysql_fetch_array ($req);
  • break;
  • case 'assoc':
  • $fetch = mysql_fetch_assoc ($req);
  • break;
  • case 'object':
  • $fetch = mysql_fetch_object ($req);
  • break;
  • }
  • return $fetch;
  • }
  • function Query_array($sql, $type = 'assoc')
  • {
  • $query = $this->Query ($sql);
  • $array = $this->Fetch($query, $type);
  • return $array;
  • }
  • function Query_array_plus($sql, $type = 'assoc')
  • {
  • $array = array();
  • $query = $this->Query ($sql);
  • while ($result = $this->Fetch($query, $type) )
  • $array[] = $result;
  • return $array;
  • }
  • function Error($infos, $type)
  • {
  • switch ($type)
  • {
  • case 'connect':
  • $this->error = 'Nous ne pouvons pas vous connecter avec ces données:
  • <br />
  • <span style=\'color: red;\'>Serveur: </span><span style=\'color: blue;\'>'. $infos[0] .'</span>
  • </br />
  • <span style=\'color: red;\'>Identifiant: </span><span style=\'color: blue;\'>'. $infos[1] .'</span>
  • </br />
  • <span style=\'color: red;\'>Mot de passe: </span><span style=\'color: blue;\'>'. $infos[2] .'</span>';
  • break;
  • case 'select_db':
  • $this->error = 'Nous n\'avons pas pus vous connecter à la base de donnée:
  • </br />
  • <span style=\'color: red;\'>Base de donnée: </span><span style=\'color: blue;\'>'. $infos .'</span>';
  • break;
  • case 'query':
  • $this->error = 'Il y à une erreur dans la requete.
  • <br />
  • <span style=\'color: red;\'>Requete: </span><span style=\'color: blue;\'>'. $infos .'</span>
  • <br />
  • <span style=\'color: red;\'>Erreur numéro: </span><span style=\'color: blue;\'>'. mysql_errno() .'</span>
  • <br />
  • <span style=\'color: red;\'>Erreur MySQL: </span><span style=\'color: blue;\'>'. mysql_error() .'</span>';
  • break;
  • }
  • if ($this->save_errors)
  • {
  • //On sauvegarde les erreurs dans un fichier:
  • if (!scandir($this->path_errors . date('d-m-Y') ) ) //Si un dossier du jours actuel éxiste on le définis dans la variable contenant le chemin de destination du fichier d'erreurs
  • mkdir ($this->path_errors . date('d-m-Y') );
  • $this->path_errors .= date('d-m-Y') .'/';
  • $file_error = fopen ($this->path_errors . date('H\h i\m\i\n s\s') .'.txt', 'w');
  • if ($type == 'connect')
  • fputs ($file_error, "-----------------------------------\r
  • ERREUR SQL DANS LE FICHIER:\r\n
  • http://". $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] ."\r
  • -----------------------------------
  • \r\n
  • Erreur lors de la connexion à MySQL:
  • Serveur:\r\n".
  • $infos[0] ."
  • Identifiant:\r\n".
  • $infos[1] ."
  • Mot de passe:\r\n".
  • $infos[2]
  • );
  • elseif ($type == 'select_db')
  • fputs ($file_error, "-----------------------------------\r
  • ERREUR SQL DANS LE FICHIER:\r\n
  • http://". $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] ."\r
  • -----------------------------------
  • \r\n
  • Erreur lors de la connexion à la base de donnée de nom:\r\n".
  • $infos
  • );
  • elseif ($type == 'query')
  • {
  • $infos = preg_replace ('`[[:space:]]+|[[:blank:]]+`', ' ', $infos);
  • fputs ($file_error, "-----------------------------------\r
  • ERREUR SQL DANS LE FICHIER:\r\n
  • http://". $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] ."\r
  • -----------------------------------
  • \r\n
  • Erreur dans la requete:\r\n".
  • trim($infos) ."
  • Erreur numéro:\r\n".
  • mysql_errno() ."
  • Erreur MySQL:\r\n".
  • mysql_error()
  • );
  • }
  • fclose ($file_error);
  • }
  • if ($this->aff_errors)
  • echo $this->error;
  • }
  • }
  • ?>
<?php
//Script pour une class php4 avec gestion des erreus par fichier, nombre de requetes
class Mysql
{
	var $host = 'localhost';							//Valeur par défault du serveur
	var $user = 'cerfvice';								//Valeur par défault de l'utilisateur
	var $pass = 'eh2eeevu';								//Valeur par défault du mot de passe
	var $db = 'cerfvice_';								//Valeur par défault de la base de donnée
	
	var $aff_errors;									//Si true on affiche les erreurs, si false on ne les affiches pas
	var $save_errors;									//Si true on enregistre les erreurs, si false on ne les enregistre pas
	var $path_errors = './logs/errors_sql/';			//Contient le chemin relatif du dossier où sont stoqué les fichié d'érreurs SQL
	
	var $error;											//On initialise la variable $error qui contiendras les erreurs personnalisées
	var $nbr_query = 0;									//On initialise la variable $nbr_query à 0
	 
	function Mysql($serveur = false, $client = false, $password = false, $data_abse = false, $list_errors = true, $register_errors = true) //__construct
	{
		//On définis les variables servants à la gestion des erreurs:
		if ($list_errors)
			$this->aff_errors = true;
		else
			$this->aff_errors = false;
		if ($register_errors)
			$this->save_errors = true;
		else
			$this->save_errors = false;
		
		//On vérifie si l'utilisateur demande une configuration précise:
		if ($serveur)
			$this->host = $serveur;
		if ($client)
			$this->user = $client;
		if ($password)
			$this->pass = $password;
		if ($data_abse)
			$this->db = $data_abse;
		
		$this->Connect($this->host, $this->user, $this->pass);
		$this->Select_db($this->db);
	}
	
	function Connect($host, $user, $pass)
	{
		$infos = array($this->host, $this->user, $this->pass); //Array contenant le nom d'accès au serveur, le nom de l'utilisateur et le mot de passe pour la fonction Error qui gère les erreurs
		mysql_connect ($host, $user, $pass) or die($this->Error($infos, 'connect') );
	}
	
	function Select_db($db, $id = false)
	{
		if ($id)
			mysql_select_db ($db, $id) or die($this->Error($db, 'select_db') );
		else
			mysql_select_db ($db) or die($this->Error($db, 'select_db') );
	}
	
	function Close($id = false) //__destruct	/-/-/-/-/-/		Destructeur non mis en place, car c'est une class optimisé pour php4
	{
		if ($id)
			mysql_close ($id);
		else
			mysql_close ();
	}
	
	function Query($sql)
	{
		$query = mysql_query($sql) or die($this->Error($sql, 'query') );
		
		++$this->nbr_query;
		
		return $query;
	}
	
	function Fetch($req, $type = 'assoc')
	{
		switch ($type)
		{
			case 'row':
				$fetch = mysql_fetch_row ($req);
			break;
			
			case 'array':
				$fetch = mysql_fetch_array ($req);
			break;
			
			case 'assoc':
				$fetch = mysql_fetch_assoc ($req);
			break;
			
			case 'object':
				$fetch = mysql_fetch_object ($req);
			break;
		}
		return $fetch;
	}
	
	function Query_array($sql, $type = 'assoc')
	{
		$query = $this->Query ($sql);
		$array = $this->Fetch($query, $type);
		
		return $array;
	}
	
	function Query_array_plus($sql, $type = 'assoc')
	{
		$array = array();
		$query = $this->Query ($sql);
		while ($result = $this->Fetch($query, $type) )
			$array[] = $result;
		
		return $array;
	}
	
	function Error($infos, $type)
	{
		switch ($type)
		{
			case 'connect':
				$this->error = 'Nous ne pouvons pas vous connecter avec ces données:
							<br />
						  <span style=\'color: red;\'>Serveur: </span><span style=\'color: blue;\'>'. $infos[0] .'</span>
						    </br />
						  <span style=\'color: red;\'>Identifiant: </span><span style=\'color: blue;\'>'. $infos[1] .'</span>
						    </br />
						  <span style=\'color: red;\'>Mot de passe: </span><span style=\'color: blue;\'>'. $infos[2] .'</span>';
			break;
			
			case 'select_db':
				$this->error = 'Nous n\'avons pas pus vous connecter à la base de donnée:
						    </br />
						  <span style=\'color: red;\'>Base de donnée: </span><span style=\'color: blue;\'>'. $infos .'</span>';
			break;
			
			case 'query':
				$this->error = 'Il y à une erreur dans la requete.
						  	<br />
						  <span style=\'color: red;\'>Requete: </span><span style=\'color: blue;\'>'. $infos .'</span>
						  	<br />
						  <span style=\'color: red;\'>Erreur numéro: </span><span style=\'color: blue;\'>'. mysql_errno() .'</span>
						  	<br />
						  <span style=\'color: red;\'>Erreur MySQL: </span><span style=\'color: blue;\'>'. mysql_error() .'</span>';
			break;
				
		}
		
		if ($this->save_errors)
		{
			//On sauvegarde les erreurs dans un fichier:
			if (!scandir($this->path_errors . date('d-m-Y') ) ) //Si un dossier du jours actuel éxiste on le définis dans la variable contenant le chemin de destination du fichier d'erreurs
				mkdir ($this->path_errors . date('d-m-Y') );
			$this->path_errors .= date('d-m-Y') .'/';
			
			$file_error = fopen ($this->path_errors . date('H\h i\m\i\n s\s') .'.txt', 'w');
			if ($type == 'connect')
				fputs ($file_error, "-----------------------------------\r
ERREUR SQL DANS LE FICHIER:\r\n
http://". $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] ."\r
-----------------------------------
\r\n
Erreur lors de la connexion à MySQL:

Serveur:\r\n".
$infos[0] ."

Identifiant:\r\n".
$infos[1] ."

Mot de passe:\r\n".
$infos[2]
					 );
			elseif ($type == 'select_db')
				fputs ($file_error, "-----------------------------------\r
ERREUR SQL DANS LE FICHIER:\r\n
http://". $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] ."\r
-----------------------------------
\r\n
Erreur lors de la connexion à la base de donnée de nom:\r\n".
$infos
					 );
			elseif ($type == 'query')
			{
				$infos = preg_replace ('`[[:space:]]+|[[:blank:]]+`', ' ', $infos);
				fputs ($file_error, "-----------------------------------\r
ERREUR SQL DANS LE FICHIER:\r\n
http://". $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] ."\r
-----------------------------------
\r\n
Erreur dans la requete:\r\n".
trim($infos) ."

Erreur numéro:\r\n".
mysql_errno() ."

Erreur MySQL:\r\n".
mysql_error()
					 );
			}
			fclose ($file_error);
		}
		
		if ($this->aff_errors)
			echo $this->error;
	}
}
?>

 Conclusion

Pour utiliser cette class il  vous faut en premier lieu paramétré les quelques variables pouvant l'être dans la déclaration de la class, ensuite vous pouvez donc en toutes logique vous connecter à MySQL en appelant la class de cette manière:
$mysql = new Mysql();
Les deux derniers arguments du constructeur permettent de choisir si l'on veut afficher les erreurs et les enregistrer, pour le reste il n'y as rien de méchant.

J'attends vos critiques avec impatience.

Au revoir.


 Historique

22 août 2005 23:43:08 :
Mise à jours du code

 Sources du même auteur

Source avec Zip GESTION DES SMILEYS PAR FICHIER
Source avec Zip CLASS DE BBCODE ENTIÈREMENT PARAMÉTRABLE
Source avec Zip PROTECTION PAR LOGIN&PASS SUR BDD

 Sources de la même categorie

Source avec Zip GÉNÉRATION AUTOMATIQUE DE FICHIER .CLASS.PHP EN FONCTION D'U... par ig3
CLASSE D'OBJET DE CRYPTAGE ET DÉCRYPTAGE DE CHAINES DE CARAC... par 8Tnerolf8
Source avec Zip MY.DEVIANTART API par inwebo
CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter

 Sources en rapport avec celle ci

Source avec Zip CLASS SIMPLE CBASEDONNEE par smag42
Source avec Zip CLASSE SQL par benjycorp
Source avec Zip Source avec une capture GÉNÉRATION DE CLASSES D'ACCÈS AUX DONNÉES À PARTIR DES TABLE... par djroulo
GESTION D'ERREURS par Luzy
Source avec Zip EXEMPLE DE CLASSE DE GESTION DE PAGE DE FORMULAIRE par charliecollard

Commentaires et avis

Commentaire de davwart le 27/07/2005 11:46:02

hello..

pas de fonction pour se deconnecter?

Commentaire de malalam le 27/07/2005 12:50:33 administrateur CS

Effectzivement, dommage, ca ferait un joli destructeur pour la classe (en php5 en tous cas, et simule en php4).

Commentaire de massacr le 28/07/2005 15:56:35

Met la liste des fonctions, et leurs arguments.
C'est interessant.
A+

Commentaire de ImmortalPC le 28/07/2005 21:01:48

Salut,
une question super co* mais je voie pas l'utilité des class.
une class c'est plein de fonctions c'est tout pourquoi ne pas tout bètement mettre les fonctions ?
@+

Commentaire de malalam le 29/07/2005 09:14:40 administrateur CS

Oula, lol...ca va etre difficile de te repondre. Il y a bien trop d'avantages! Mais les classes ne sont a utiliser que dans certains cas.
Bon disons que ce sont 2 approches tres differentes de la programmation. Dans bien des cas, les classes sont plus pratiques a utiliser, et bien plus puissantes qu'un ensemble de fonctions. Parce qu'un objet possede des proprietes a lui, auquelles toutes ses methodes peuvent acceder. Parce qu'un objet peut-etre protege. Parce qu'un objet peut etre defini a partir d'un autre objet plus general...facilitant ainsi sa modification. Parce qu'un objet est reutilisable tres facilement. Parce qu'un objet peut etre tres specialise, et faire en un appel ce qui te prendrait 20 appels de fonctions pour le realiser.
pfff...lol. Il y a enormement d'avantages pratiques. Mais c'est avant tout une facon de penser la programation. Une philosophie de programmation quoi.

je te conseille de lire des articles sur la POO, et tu finiras bien par entrevoir les avantages.

L'avantage d'une classe bdd par exemple serait la reutilisabilite sur n'importe quel type de base (si l'objet est fait pour hein), avec les memes appels. Un controle total des donnees renvoyees, des erreurs, et une plus grande simplicite d'utilisation.

Bah le truc le plus evident pour moi : un objet est un ensemble de proprietes et de methodes. Une fonction reste tres isolee...

je laisse le soin a d'autres de te repondre peut-etre mieux que moi; je suis en manque d'inspiration la.

Commentaire de ImmortalPC le 29/07/2005 13:15:01

Ok j'ai compris !
Merci ;-)
@+

Commentaire de the_angel le 22/08/2005 23:55:13

Je viens de mettre le code à jour spour la fonction de déconnexion, mais si je ne l'avais pas mise c'est que ej trouve que c'est inutil, on ne fait en général que un mysql_close par page, donc l'utilisation d'une fonction se révèle inutil.
Pour la page de déscription des fonction faudras attendre un peut que j'ai le courage, mais je pense pas que ce soit si difficile de comprendre le fonctionnement.
Et continuer les critiques, faites fouaiter le fouet s'il le faut, car je vois 3 comme notes et aucunes critique proprement dit.

Commentaire de Isoth0p le 07/09/2005 11:52:41

c'est tout sauf inutile ! ça permet de libérer la connexion au serveur et ainsi de l'espace mémoire...

Commentaire de the_angel le 11/12/2005 23:58:49

Ce que j'ai dit ce n'est pas que la fonction mysql_close est inutile pas qu'il est inutile d'en refaire une qui l'appellerais elle même étant donnée que l'on ne l'appel qu'une fois par page et qu'il n'y as en cas général aucun arguments à apporté.

Au revoir.

Commentaire de malalam le 12/12/2005 09:27:44 administrateur CS

Hello,

php ne ferme la connexion qu'à la fin du script.
Or, on peut très bien faire appel à plusieurs requêtes dans un seul script (une seule page, si tu préfères).
Personnellement, j'ouvre ma connexion, je fais mon mysql_query, je ferme la connexion, je vais chercher mes enregistrements (mysql_fetch_assoc par exemple), je les traite...et je peux avoir d'autres requêtes à faire plus tard, après traitement, donc je ré-ouvre, etc...

Commentaire de the_angel le 12/12/2005 17:04:40

D'accord, mais tu conviendras que l'on voit rarement sa,et personnellement j'aurais tendance à penser que fermer pour rouvrir c'est utiliser des resseources pour rien, mais sa ne change rien au fait que c'est plus simple de faire un mysq_close(); qu'un $Mysql->close, perso je trouve que la première solution est plus "pratique", mais chacun ces goûts.

Commentaire de vladyy le 03/08/2007 12:11:18

Sa remonte \o/ Mais j'ai tout de même une question, est-ce qu'une mise-à-jour vers PHP5 est attendue pour ta classe?

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

fatal error sur chargement de class [ par fabrice_pi ] salut à tous,j'utilise une classe PHP pour faire mes taleaux en html. depuis peu j'ai l'erreur suivante :Fatal error: Cannot instantiate non-existent erreur class redeclare !!! [ par g_fuck ] Salut tout le monde! il se fait que dans une de mes page j'ai besoin d'une class CLASSE_1 donc je fait dans ma page include(url/CLASSE_1.php);Et comme [POO] Une classe dans une classe [ par Mrreivax ] Bonsoir.Et bien voila. J'ai créé une classe de gestion des images.J'ai par la suité créé une autre classe de gestion de banières.Mais, cette dernière You have an error in your SQL syntax - Erreur dans ma requete [ par christuckers ] Bonjour a tous ceux qui me liront aujourd'hui. Je fais appel à vos services car je rencontre une erreur qui me prend la tête depuis une semaine... V sql server erreur de conexion [ par lotfi213_b19 ] bonjour,je travaille sur un projet deja (mal) fait en ASP mais n'est pas fini,j'ai decidé de le refaire en php,la base de données est deja developpée erreur de transcription [ par claudero ] [^^confus2]Bonjour, j'ai un forum en php avec 2 tbl sur sql. Je crée une question soit avec un fichier php ou html et si j'introduis un "L'" une apost erreur de SQL syntaxe [ par cire2003 ] Bonjour J'ai beau essayer toutes les combinaisons possibles, rien a faire, je continu de me faire dire qu'il y a une erreur de syntaxe. J'utilise le erreur de ponctuation sur sql [ par anto25 ] J'ai regardé plusieurs site mais je ne comprend pas ou se trouve l'eereur de ponctuation pouvez vous m'aidez. Voici l'erreurIl semble qu'il y ait une Problème de variables en dehors d'une class [ par yukimura27 ] Bonjour à tous, J'ai un problème pour utiliser une variable en dehors de ma class. Voici mon code: class pouet { public function SelectAll () { Procédure ou classe de gestion des options intélligente [ par Heirem ] Bonjour, Je cherche un script qui me permettrait de gérer les options d'un site de façon intelligente et optimisée. Le problème venant de la quantité


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,076 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales