Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CLASSE FRANCOPHONE D'EXPLOITATION MYSQL


Information sur la source

Catégorie :Base de données Classé sous : classe, mysql, francophone, framework, auto-complétion Niveau : Débutant Date de création : 23/12/2007 Date de mise à jour : 24/12/2007 18:59:48 Vu : 2 862

Note :
5,5 / 10 - par 2 personnes
5,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

Description

Dans l'objectif de créer un framework PHP francophone, j'ai mis au point une classe d'exploitation MySQL. La voici donc:
 

Source

  • <?php
  • /****************************************************************************************
  • Classe pour la manipulation de bases de données MySQL
  • Auteur : Mathieu ROBIN
  • Créée le : 02/04/2007
  • Dernière modification le : 24/12/2007
  • Commentaires : le constructeur connecte automatiquement l'instance de la classe à la base
  • *****************************************************************************************/
  • class DBMySql
  • {
  • /**
  • * Identifiant de connection
  • *
  • * @var Entier
  • */
  • private $ConnectionID;
  • /**
  • * Variable de stockage de résultat
  • *
  • * @var Multiple
  • */
  • private $result;
  • /**
  • * Ligne de table ou de résultat de requête
  • *
  • * @var Tableau
  • */
  • private $ligne;
  • /**
  • * Serveur hôte de la base de données
  • *
  • * @var Chaîne
  • */
  • private $serveur="";
  • /**
  • * Nom de la base de données
  • *
  • * @var Chaîne
  • */
  • private $base="";
  • /**
  • * Utilisateur de la base de données
  • *
  • * @var Chaîne
  • */
  • private $utilisateur="";
  • /**
  • * Mot de passe de l'utilisateur de la base de données
  • *
  • * @var Chaîne
  • */
  • public $mdp="";
  • /**
  • * Constructeur
  • *
  • * @param Chaîne $serveur
  • * @param Chaîne $utilisateur
  • * @param Chaîne $mdp
  • * @param Chaîne $bdd
  • * @param Entier $ctID Identifiant de connection
  • * @return DBMySql
  • */
  • function DBMySql($serveur, $utilisateur, $mdp, $base, $ctID=0)
  • {
  • $this->serveur=$serveur;
  • $this->utilisateur=$utilisateur;
  • $this->mdp=$mdp;
  • $this->base=$base;
  • $this->ConnectionID=$ctID;
  • $retour=$this->ConnectionID;
  • try
  • {
  • $this->Connection($this->serveur, $this->utilisateur, $this->mdp, $this->base);
  • }
  • catch (Exception $Except)
  • {
  • $retour=false;
  • }
  • return($retour);
  • }
  • /**
  • * Ouvre une connexion à un serveur MySQL
  • *
  • * @param Chaîne $serveur
  • * @param Chaîne $utilisateur
  • * @param Chaîne $mdp
  • * @param Chaîne $bdd
  • * @return Booléen
  • */
  • function Connection($serveur, $utilisateur, $mdp, $base)
  • {
  • try
  • {
  • $this->ConnectionID=mysql_connect($serveur, $utilisateur, $mdp);
  • return($this->SelectBDD($base));
  • }
  • catch (Exception $Except)
  • {
  • return(false);
  • }
  • }
  • /**
  • * Sélectionne une base de données
  • *
  • * @param Chaîne $bdd
  • * @return Booléen
  • */
  • function SelectBDD($bdd)
  • {
  • $this->base=$bdd;
  • try
  • {
  • return(mysql_select_db($bdd, $this->ConnectionID));
  • }
  • catch(Exception $Except)
  • {
  • return(false);
  • }
  • }
  • /**
  • * Envoie une requête de mise à jour et retourne combien de lignes ont été affecté par l'opération
  • *
  • * @param Chaîne $sql
  • * @return Tableau
  • */
  • function ReqUPDATE($sql)
  • {
  • if(preg_match("#^UPDATE (.){1,} SET (.){1,};$#i", $sql))
  • {
  • try
  • {
  • mysql_query($sql);
  • $this->result=mysql_affected_rows();
  • $retour[0]=$this->result;
  • $retour[1]=true;
  • }
  • catch(Exception $Except)
  • {
  • $retour[0]=0;
  • $retour[1]=false;
  • $retour[2]=$Except->getMessage();
  • }
  • }
  • else
  • {
  • $retour[0]=0;
  • $retour[1]=false;
  • $retour[2]="Mauvais format";
  • }
  • return($retour);
  • }
  • /**
  • * Envoie une requête d'insertion et retourne l'identifiant automatique généré par MySQL pour cette insertion
  • *
  • * @param Chaîne $sql
  • * @return Tableau
  • */
  • function ReqINSERT($sql)
  • {
  • if(preg_match("#^INSERT INTO (.){1,} VALUES (.){1,};$#i", $sql))
  • {
  • try
  • {
  • mysql_query($sql);
  • $this->result=mysql_insert_id();
  • $retour[0]=$this->result;
  • $retour[1]=true;
  • }
  • catch (Exception $Except)
  • {
  • $retour[0]=0;
  • $retour[1]=false;
  • $retour[2]=$Except->getMessage();
  • }
  • }
  • else
  • {
  • $retour[0]=0;
  • $retour[1]=false;
  • $retour[2]="Mauvais format";
  • }
  • return($retour);
  • }
  • /**
  • * Envoie une requête de suppression et retourne combien de lignes ont été affecté par l'opération
  • *
  • * @param Chaîne $sql
  • * @return Tableau
  • */
  • function ReqDELETE($sql)
  • {
  • if(preg_match("^DELETE FROM (.){1,};$#i",$sql))
  • {
  • try
  • {
  • mysql_query($sql);
  • $this->result=mysql_affected_rows();
  • $retour[0]=$this->result;
  • $retour[1]=true;
  • }
  • catch (Exception $Except)
  • {
  • $retour[0]=0;
  • $retour[1]=false;
  • $retour[2]=$Except->getMessage();
  • }
  • }
  • else
  • {
  • $retour[0]=0;
  • $retour[1]=false;
  • $retour[2]="Mauvais format";
  • }
  • return($retour);
  • }
  • /**
  • * Envoie une requête de sélection et retourne combien de lignes sont sélectionnées
  • *
  • * @param Chaîne $sql
  • * @return Tableau
  • */
  • function ReqSELECT($sql)
  • {
  • if(preg_match("#^SELECT (.){1,} FROM (.){1,};$#i", $sql))
  • {
  • try
  • {
  • $this->result=mysql_query($sql);
  • $retour[0]=mysql_num_rows($this->result);
  • $retour[1]=true;
  • }
  • catch (Exception $Except)
  • {
  • $retour[0]=0;
  • $retour[1]=false;
  • $retour[2]=$Except->getMessage();
  • }
  • }
  • else
  • {
  • $retour[0]=0;
  • $retour[1]=false;
  • $retour[2]="Mauvais format";
  • }
  • return($retour);
  • }
  • /**
  • * Retourne la valeur maximale d'un champ dans une table
  • *
  • * @param Chaîne $table Table
  • * @param Chaîne $champ
  • * @return Entier
  • */
  • function MaxChamp($table, $champ)
  • {
  • return($this->ReqSELECT("SELECT MAX(".$champ.") FROM ".$table));
  • }
  • /**
  • * Retourne le nombre de lignes d'un résultat MySQL
  • *
  • * @return Tableau
  • */
  • function NbrLignes()
  • {
  • try
  • {
  • $retour[0]=mysql_num_rows($this->result);
  • $retour[1]=true;
  • }
  • catch (Exception $Except)
  • {
  • $retour[0]=0;
  • $retour[1]=false;
  • $retour[2]=$Except->getMessage();
  • }
  • return($retour);
  • }
  • /**
  • * Retourne le nombre de lignes affectées lors de la dernière opération MySQL
  • *
  • * @return Entier
  • */
  • function TuplesAffect()
  • {
  • return(mysql_affected_rows());
  • }
  • /**
  • * Retourne l'identifiant généré par la dernière requête INSERT MySQL
  • *
  • * @return Entier
  • */
  • function IDInsertion()
  • {
  • return(mysql_insert_id($this->ConnexionID));
  • }
  • /**
  • * Retourne le texte associé avec l'erreur générée lors de la dernière requête
  • *
  • * @return Chaîne
  • */
  • function Erreur()
  • {
  • return(mysql_error());
  • }
  • /**
  • * Ferme une connection MySQL
  • *
  • * @return Booléen
  • */
  • function Deconnection()
  • {
  • return(mysql_close());
  • }
  • }
  • ?>
<?php
/****************************************************************************************
Classe pour la manipulation de bases de données MySQL
Auteur : Mathieu ROBIN
Créée le : 02/04/2007
Dernière modification le : 24/12/2007
Commentaires : le constructeur connecte automatiquement l'instance de la classe à la base
*****************************************************************************************/

class DBMySql
{
	/**
	 * Identifiant de connection
	 *
	 * @var Entier
	 */
	private $ConnectionID;
	/**
	 * Variable de stockage de résultat
	 *
	 * @var Multiple
	 */
	private $result;
	/**
	 * Ligne de table ou de résultat de requête
	 *
	 * @var Tableau
	 */
	private $ligne;
	/**
	 * Serveur hôte de la base de données
	 *
	 * @var Chaîne
	 */
	private $serveur="";
	/**
	 * Nom de la base de données
	 *
	 * @var Chaîne
	 */
	private $base="";
	/**
	 * Utilisateur de la base de données
	 *
	 * @var Chaîne
	 */
	private $utilisateur="";
	/**
	 * Mot de passe de l'utilisateur de la base de données
	 *
	 * @var Chaîne
	 */
	public $mdp="";


	/**
	 * Constructeur
	 *
	 * @param Chaîne $serveur
	 * @param Chaîne $utilisateur
	 * @param Chaîne $mdp
	 * @param Chaîne $bdd
	 * @param Entier $ctID Identifiant de connection
	 * @return DBMySql
	 */
	function DBMySql($serveur, $utilisateur, $mdp, $base, $ctID=0)
	{
		$this->serveur=$serveur;
		$this->utilisateur=$utilisateur;
		$this->mdp=$mdp;
		$this->base=$base;
		$this->ConnectionID=$ctID;
		$retour=$this->ConnectionID;
		try
		{
			$this->Connection($this->serveur, $this->utilisateur, $this->mdp, $this->base);
		}
		catch (Exception $Except)
		{
			$retour=false;
		}
		return($retour);
	}


	/**
	 * Ouvre une connexion à un serveur MySQL
	 *
	 * @param Chaîne $serveur
	 * @param Chaîne $utilisateur
	 * @param Chaîne $mdp
	 * @param Chaîne $bdd
	 * @return Booléen
	 */
	function Connection($serveur, $utilisateur, $mdp, $base)
	{
		try
		{
			$this->ConnectionID=mysql_connect($serveur, $utilisateur, $mdp);
			return($this->SelectBDD($base));
		}
		catch (Exception  $Except)
		{
			return(false);
		}
	}

	/**
	 * Sélectionne une base de données
	 *
	 * @param Chaîne $bdd
	 * @return Booléen
	 */
	function SelectBDD($bdd)
	{
		$this->base=$bdd;
		try
		{
			return(mysql_select_db($bdd, $this->ConnectionID));
		}
		catch(Exception $Except)
		{
			return(false);
		}
	}

	/**
	 * Envoie une requête de mise à jour et retourne combien de lignes ont été affecté par l'opération
	 *
	 * @param Chaîne $sql
	 * @return Tableau
	 */
	function ReqUPDATE($sql)
	{
		if(preg_match("#^UPDATE (.){1,} SET (.){1,};$#i", $sql))
		{
			try
			{
				mysql_query($sql);
				$this->result=mysql_affected_rows();
				$retour[0]=$this->result;
				$retour[1]=true;
			}
			catch(Exception $Except)
			{
				$retour[0]=0;
				$retour[1]=false;
				$retour[2]=$Except->getMessage();
			}
		}
		else
		{
			$retour[0]=0;
			$retour[1]=false;
			$retour[2]="Mauvais format";
		}
		return($retour);
	}

	/**
	* Envoie une requête d'insertion et retourne l'identifiant automatique généré par MySQL pour cette insertion
	*
	* @param Chaîne $sql
	* @return Tableau
	*/
	function ReqINSERT($sql)
	{
		if(preg_match("#^INSERT INTO (.){1,} VALUES (.){1,};$#i", $sql))
		{
			try
			{
				mysql_query($sql);
				$this->result=mysql_insert_id();
				$retour[0]=$this->result;
				$retour[1]=true;
			}
			catch (Exception $Except)
			{
				$retour[0]=0;
				$retour[1]=false;
				$retour[2]=$Except->getMessage();
			}
		}
		else
		{
			$retour[0]=0;
			$retour[1]=false;
			$retour[2]="Mauvais format";
		}
		return($retour);
	}

	/**
	* Envoie une requête de suppression et retourne combien de lignes ont été affecté par l'opération
	*
	* @param Chaîne $sql
	* @return Tableau
	*/
	function ReqDELETE($sql)
	{
		if(preg_match("^DELETE FROM (.){1,};$#i",$sql))
		{
			try
			{
				mysql_query($sql);
				$this->result=mysql_affected_rows();
				$retour[0]=$this->result;
				$retour[1]=true;
			}
			catch (Exception $Except)
			{
				$retour[0]=0;
				$retour[1]=false;
				$retour[2]=$Except->getMessage();
			}
		}
		else
		{
			$retour[0]=0;
			$retour[1]=false;
			$retour[2]="Mauvais format";
		}
		return($retour);
	}

	/**
	* Envoie une requête de sélection et retourne combien de lignes sont sélectionnées
	*
	* @param Chaîne $sql
	* @return Tableau
	*/
	function ReqSELECT($sql)
	{
		if(preg_match("#^SELECT (.){1,} FROM (.){1,};$#i", $sql))
		{
			try
			{
				$this->result=mysql_query($sql);
				$retour[0]=mysql_num_rows($this->result);
				$retour[1]=true;
			}
			catch (Exception $Except)
			{
				$retour[0]=0;
				$retour[1]=false;
				$retour[2]=$Except->getMessage();
			}
		}
		else
		{
			$retour[0]=0;
			$retour[1]=false;
			$retour[2]="Mauvais format";
		}
		return($retour);
	}


	/**
	* Retourne la valeur maximale d'un champ dans une table
	*
	* @param Chaîne $table Table
	* @param Chaîne $champ
	* @return Entier
	*/
	function MaxChamp($table, $champ)
	{
		return($this->ReqSELECT("SELECT MAX(".$champ.") FROM ".$table));
	}

	/**
	* Retourne le nombre de lignes d'un résultat MySQL
	*
	* @return Tableau
	*/
	function NbrLignes()
	{
		try
		{
			$retour[0]=mysql_num_rows($this->result);
			$retour[1]=true;
		}
		catch (Exception $Except)
		{
			$retour[0]=0;
			$retour[1]=false;
			$retour[2]=$Except->getMessage();
		}
		return($retour);
	}

	/**
	* Retourne le nombre de lignes affectées lors de la dernière opération MySQL
	*
	* @return Entier
	*/
	function TuplesAffect()
	{
		return(mysql_affected_rows());
	}

	/**
	* Retourne l'identifiant généré par la dernière requête INSERT MySQL
	*
	* @return Entier
	*/
	function IDInsertion()
	{
		return(mysql_insert_id($this->ConnexionID));
	}

	/**
	* Retourne le texte associé avec l'erreur générée lors de la dernière requête
	*
	* @return Chaîne
	*/
	function Erreur()
	{
		return(mysql_error());
	}

	/**
	* Ferme une connection MySQL
	*
	* @return Booléen
	*/
	function Deconnection()
	{
		return(mysql_close());
	}
}
?>

Conclusion

Si vous pouviez me dire ce que vous en pensez, objectivement. Me dire ce que vous pensez qu'il manque ou qui devrait être tourné différemment afin de l'améliorer, ça serait sympa.

La classe est commentée pour pouvoir être utilisée dans des éditeurs supportant l'auto-complétion, tel que Zend Development Environment.

Lorsque le framework sera "terminé", je le mettrai également sur Codes-Sources dans son intégralité.

Merci de votre aide
 

Historique

23 décembre 2007 12:11:25 :
Je me suis trompé, j'avais mis la source en "initié", alors que c'est du niveau "débutant".
23 décembre 2007 12:42:38 :
Euh des petites infos privées oubliées XD
24 décembre 2007 18:57:51 :
Quelques modifications ont été apporté, notamment concernant la gestion des erreurs. C'est pas fini, mais ça s'améliore. J'ai provisoirement supprimé la fonction "tuplesuivant" parce qu'elle n'est effectivement pas terrible. Je suis en train de la refaire et fera l'objet d'une nouvelle version prochainement ;) Joyeux Noël et bon réveillon à tous!
24 décembre 2007 18:59:48 :
petite erreur dans une des expressions rationelles

Commentaires et avis

signaler à un administrateur
Commentaire de malalam le 23/12/2007 12:35:30 administrateur CS 1/10

hello,

je dois être dans un mauvais jour aujourd'hui...mais je vais encore ne pas être très gentil...(c'est le deuxième code que je descends).
Tu utilises php5, déjà, bien. Je vois encore trop de codes en PHP4, à l'aube de la sortie de PHP6...
Par contre, j'ai un paquet de griefs!
Déjà, pourquoi mets-tu tes paramètres de connexion dans ta classe? Il faut modifier ta classe à chaque fois qu'on veut une connexion à un autre serveur? genre, si mon application web doit se connecter à 2 serveurs db (et c'est svt le cas pour moi...dans mon taf), je dois avoir 2 classes?? Les passer en paramètre serait pourtant si simple...
Tu ne gères aucune erreur. php5 offre les exceptions, et toi, tu n'en fais rien. Si mon serveur est down, il se passe quoi ? Certes, ton constructeur retourne false (???), ce qui est déjà étrange, mais de toute manière il essaye de se connecter; donc si mon serveur db est down, j'aurai une belle erreur. Alors que si tu avais implémenté les exceptions, j'aurais pu "catcher" (intercepter ou attraper, pour les anglophobes) cette erreur.
Tu me donnes des méthodes ReqDELETE, ReqINSERT etc...avec des mysql_affected_rows() en retour, sans te soucier de vérifuer que j'utilise la bonne méthode. Que se passe-t-il si je fais un ReqSELECT en lui passant une requête UPDATE ? Ou l'inverse ?
Des die() dans une classe...bref, ça rejoint mon grief sur la gestion des erreurs.
la méthode TupleSuivant() m'inquiète un peu. Il y a une fonction qui s'appelle mysql_data_seek() qui aurait été nettement plus appropriée.
Il n'y a même pas la gestion des ressources (resources, je ne sais pas trop comment traduire ça...ressource n'est pas franchement à propos, mais là je ne trouve rien de mieux). Ta classe est juste un "wrapping" des fonctions mysql_*, avec tout juste quelques "améliorations" (Req*() ).
Bref, selon moi, ta classe n'apporte rien, voire même enlève à la facilité d'utilisation des fonctions mysql_*().
Tu devrais sérieusement jeter un oeil sur d'autres classes DB, sur l'abstraction, les singletons, les multitons, sur PDO etc...avant de continuer sur cette voie pour ton projet de "framework francophone mysql". Tu pars sur un mauvais trip, là.
Joyeux Noël... ;-) (désolé, je sais que je suis dur là, donc je voulais contrebalancer : ton idée est louable, tu utilises php5, etc...mais tu te fourvoies là. Je ne peux pas te laisser faire sans râler. Mais quand même, je veux que tu passes de bonnes fêtes de fin d'années...donc : réflêchis, relis un peu la doc de PHP, mate d'autres codes dans le même genre, et change ton optique...et pour la nouvelle année, repars sur de nouvelles bases!).

signaler à un administrateur
Commentaire de Gwinyam le 23/12/2007 12:46:51

Je dois avouer que c'est pas faux et c'est le genre de commentaires que j'attendais. Donc effectivement, il y a encore du boulot.

Merci bonhomme et bonnes fêtes de fin d'année à toi aussi.^^

signaler à un administrateur
Commentaire de malalam le 23/12/2007 12:56:05 administrateur CS

Ravi que tu le prennes bien :-)
Bonnes fêtes à toi aussi, et vraimznt, revois ta copie et sors nous un joli code contre lequel je ne pourrai rien dire ;-) Je suis sûr que tu le peux.
Un "hint" : sprs des sentiers battus un peu plus. Des wrappers, il y en a des tas...et ce n'est pas super utile. Des abstractions DB, il y en a bcp aussi, et tu aurais vraiment bcp de boulot si tu voulais te démarquer. trouve autre chose...du genre...tu veux faaire un framework mysql francophone ? Ok, attaque toi à SQL. SQL est un langage simple, mais anglophone...un truc très sympa serait de proposer une alternative francophone. Du genre :
SELECTIONNE user_nom, user_email DANS users OU user_id = 251207
Par exemple hein... :-) En moins reessemblant à du SQL ce serait encore mieux. Avec des méthodes par exemple.  Enfin chais pas...change d'optique.

signaler à un administrateur
Commentaire de Gwinyam le 23/12/2007 14:24:39

ça peut s'imaginer effectivement. Pour le moment je finis ce framework, on verra ensuite ;)

au passage, ce n'est pas un framework mysql francophone que je veux faire, mais un framework php francophone léger^^

J'ai déjà commencé à tout corriger, je ne devrais pas tarder à fournir une seconde version bien moins critiquable ;)

signaler à un administrateur
Commentaire de zzzzzz le 24/12/2007 17:10:32 10/10

La note de 1 est injustifié je vais donc mettre le maximum pour contre-balancer. Je trouve que le code est un bon départ. Certes il y a mieux mais c'est toujours bien :) Bon noël :)

signaler à un administrateur
Commentaire de guill76 le 26/12/2007 19:25:20

Salut,
Pour les exceptions:
#  try
# {
# mysql_query($sql);
# $this->result=mysql_affected_rows();
# $retour[0]=$this->result;
# $retour[1]=true;
# }
# catch(Exception $Except)
# {
# }
Là Tu cherches à attraper des exceptions qui seraient émises par les fonctions mysql natives:
cela te sert absolument à rien car les fonctions de la librairie mysql ne lance pas d'exception cachable.
Tu dois à ce niveau les lancer en fonction de l'erreur rencontrée dans ton code. Cette exception pourra être récupérée au moment de l'appel à tes méthodes de ta classe dans les try.

signaler à un administrateur
Commentaire de Gwinyam le 27/12/2007 11:07:20

Donc en gros, mes try-catch ne servent à rien? Ils doivent être mis dans le code utilisant ma classe là où je ferai appel à mes fonctions?

signaler à un administrateur
Commentaire de malalam le 27/12/2007 13:56:07 administrateur CS

Hello,

tu as 2 façons de procéder.
1 - Tu lances des exceptions qui doivent arrêter l'exécution de ta classe, dans ce cas tu ne fais que les lancer dans ta classe et tu les interceptes en dehors.
2 - tu veux pouvoir gérer tes exceptions dans ta classe (par exemple, j'essaye une requête...mais si je ne suis pas connecté, je veux pouvoir intercepter l'excption et me connecter pour pouvoir conbtinuer), dans ce cas, tu gères tes try catch dans ta classe. Ce n'est pas le cas le plus fréquent, mais ça peut arriver.

1 exemple illustrant les 2 exemples :

<?php
class a {
public function myFunc() {
if(false === isset($b)) {
throw new Exception('Erreur $b n\'est pas initialisé');
}
echo $b;
}
}

try {
$a = new a;
$a->myFunc();
} catch(Exception $e) {
echo $e;
}

class c {
public function myFunc() {
try {
if(false === isset($b)) {
throw new Exception('Erreur $b n\'est pas initialisé');
}
} catch(Exception $e) {
$b = 1;
}
echo $b;
}
}

$c = new c;
$c->myFunc();
?>

signaler à un administrateur
Commentaire de Gwinyam le 27/12/2007 21:11:06

Ah ouais, pas idiot. Bon, donc c'est reparti pour un tour^^

signaler à un administrateur
Commentaire de acidtoxik le 02/01/2008 14:31:45

MALALAM, avant de poster des critiques qui descendent le travail fait par les internautes qui font vivre le site que tu administres, tu devrais plutôt réviser la POO.

Je ne suis pas un expert mais je sais au moins faire la différence entre une classe et une instance de classe (un objet pour info :p) cf ton premier post :2 classes...

Bon code dans l'ensemble, bonne idée de base consistant a faire une API franco. C nice :)

signaler à un administrateur
Commentaire de Gwinyam le 02/01/2008 14:40:35

L'astuce est que j'ai corrigé mon code depuis en suivant ces critiques. Certes, je ne les ai pas encore toutes suivies et donc corrigé tout mon code. Mais c'est surtout qu'à l'origine, les informations de connexion étaient stockées directement dans ma classe et que ni le constructeur, ni d'autres fonctions ne permettaient de les modifier. Ce qui est parfaitement idiot.

Donc là je prends la défense de malalam.

Merci de l'encouragement quand même^^

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Formulaire avec select et update de bdd mysql [ par arnold002 ] Bonjour &#224; tous,J'ai un formulaire qui contient 2 champs de type select : classe et annee.Je veux associer chaque classe &#224; chaque ann&#233;e passage de variables de form vers bdd mysql [ par arnold002 ] Bonjour,Mon probl&#232;me n'avance pas...Mon form contient 2 champs select for($i<FONT color=#008000 s Problème affichage BD multiples [ par ekipage2 ] Bonjour,j'ai plusieurs BD : eleve / matières / et exercicesLorque l'élèv se connecte, il peut afficher la liste des exercices correspondants à sa clas Recherche mysql [ par simon0000 ] salut tous le monde ,j'ai une table mysql nom&#233;&nbsp;ecole ou il ya Retour des données d'une classe MySQL [ par Jerem_ ] Salut, Depuis ce matin, j'asseye de coter une classe MySQL pour mon site. La classe marche tr&#232;s bien quand je fait une requete INSERT, etc .. M Bug dans une double liste [ par stu76 ] Bonjour, Malalam m'a donné des infos hier sur les doubles liste, et je le remercie car ca ma été super utile. J'ai presque résolu le prob sauf que je Problème de code [ par stu76 ] Bonjour tout le monde ,Voil&#224; je planche sur un programme scolaire et j'ai un gros prob, je travaille sur un programme qui utilise trois base de d Problème d'utilisation d'une classe MySQL du site [ par tataye ] Bonjour,Je suis en train de faire des tests avec la classe SQL  de FhX (source N°33135) et je rencontre actuellement quelques difficultés.J'ai fait un appeller de fonction "interclasses" [ par DDelec24 ] Bonjour.Je suis bloqué depuis hier sur un problème pour appeller une fonction.Pour résumé:Je possède une classe mysql pour gérer tout ce qui est reque inclusion d'une classe provenant d'un autre fichier [ par lilippx ] salut, je me suis mis au php ce matin mais je bute sur un petit truc (dès le premier jour, ce n'est pas motivant...)je n'arrive pas à instancier un ob


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.