Génération automatique de fichier .class.php en fonction d'une table mysql

Soyez le premier à donner votre avis sur cette source.

Vue 7 155 fois - Téléchargée 1 073 fois

Description

ce script php permet de générer automatiquement un fichier .class.php en function d'une table de la base de données de mysql
  • fonctionnalité de la classe généréé

- constructeur (pour initialiser les champs)
- methode getinfo_$table()
- methode ajouter_$table()
- methode supprimer_$table()
- methode modifier_$table()

le code est composé de 3 fichiers:
- code_class.php (class de génération du fichier $table.class.php
- Connexion.class.php (class de connexion à la base de données)
- exe.bat (lancer cet exe.bat pour exécuter ce script en ligne de commande)

remarque pour utiliser ce code:
1- dans le fichier code_class.php modifier la ligne 17
genere_class("localite"); //remplacer ici localite par le nom de la table à générée

2- dans le fichier Connexion.class.php initialiser le constructeur de cette class par vos informations de connexion à votre base de données

3- dans le fichier exe.bat modifier cette ligne:
C:\wamp\bin\php\php5.3.8\php.exe code_class.php
suivant l'emplacement de votre php.exe dans mon cas j'utilise WAMP SERVER 2.2 avec la version 5.3.8 de PHP et mon php.exe se trouve à l'emplacement C:\wamp\bin\php\php5.3.8\

en bref ce petit code permet d'aller vite dans l'écriture des fichiers .class.php par rapport à une table mysql
les fonctions générées peuvent modifiées suivant vos fonctionalités.

merci

Source / Exemple :


<?php
     /***************************************************************************************************************

  • *
  • génération automatique de fichiers.class *
  • houndegnonm@gmail.com *
  • *
                                                                                                                                                                                                                              • /
include_once("Connexion.class.php"); //remplacer ici localite par le nom de la table à générée //######################################################### //######################################################### genere_class("localite"); //######################################################### //######################################################### function genere_class($table_name){ //connexion à la base de données $adminConnexion= new Connexion(); $i=$adminConnexion->connect_server(); $i1=$adminConnexion->connect_db($i); if($i1){ //initialisation variable qui stock le contenu du fichier à générer $ligne=""; //liste des colonnes des colonnes d'une table $req_champ = "SHOW COLUMNS FROM $table_name"; $result_champ = mysql_query($req_champ) or die ("Erreur lors de la recuperation du nombre d'entrees"); $nbre_champ= mysql_num_rows($result_champ); $c=0; $champ=array(); while($row= mysql_fetch_object($result_champ)){ $champ[$c]=$row->Field; $c++; } //génération du fichier $table.class.php $file_class= fopen($table_name.".class.php","w"); //début de généation $ligne.="<?php \n"; $ligne.="class $table_name{\n\n"; //génération des attributs de la classe for($c=0;$c<count($champ);$c++) $ligne.="\tpublic $".$champ[$c].";\n"; //génération du contructeur de la classe $ligne.="\n\tpublic function $table_name($". implode(",$",$champ) ."){ \n"; for($c=0;$c<count($champ);$c++) $ligne.="\t\t$"."this->".$champ[$c]."=$".$champ[$c].";\n"; $ligne.="\t} \n\n"; /*function pour obternir les informations de $table_name en fonction de l'id*/ //function getinfo $ligne.="\t /*function pour obternir les informations de $table_name en fonction de l'id*/ \n"; $ligne.="\tpublic function getinfo_$table_name($"."id){ \n"; $ligne.="\t\t$"."sql=\"select * from $table_name where ".$champ[0]."='$"."this->".$champ[0]."'\"; \n"; $ligne.="\t\t$"."result=mysql_query($"."sql,$"."id);\n"; $ligne.="\t\treturn $"."result;\n"; $ligne.="\t}\n\n"; $ligne.="\t /*function pour ajouter un enregistrement dans la table $table_name */\n"; /*function pour ajouter un enregistrement dans la table $table_name */ //function add $ligne.="\tpublic function ajouter_$table_name($"."id){ \n"; $ligne.="\t\t$"."sql=\"insert into $table_name (".implode(",",$champ).") VALUES ('$"."this->".implode("','$"."this->",$champ)."');\"; \n"; $ligne.="\t\t$"."result=mysql_query($"."sql,$"."id);\n"; $ligne.="\t\tif($"."result){\n"; $ligne.="\t\t\treturn true;\n"; $ligne.="\t\t}else return false;\n"; $ligne.="\t}\n\n"; $ligne.="\t /*squellette function pour modifier un enregistrement dans la table $table_name */\n"; /*squellette de function pour modifier un enregistrement dans la table $table_name */ //function update $ligne.="\tpublic function modifier_$table_name($"."id){ \n"; $ligne.="\t\t$"."sql=\"\"; \n"; $ligne.="\t\t$"."result=mysql_query($"."sql,$"."id);\n"; $ligne.="\t\tif($"."result){\n"; $ligne.="\t\t\treturn true;\n"; $ligne.="\t\t}else return false;\n"; $ligne.="\t}\n\n"; $ligne.="\t /*function pour supprimer un enregistrement dans la table $table_name */\n"; /*function pour supprimer un enregistrement dans la table $table_name */ //function delete $ligne.="\tpublic function supprimer_$table_name($"."id){ \n"; $ligne.="\t\t$"."sql=\"delete from $table_name where ".$champ[0]."='$"."this->".$champ[0]."'\"; \n"; $ligne.="\t\t$"."result=mysql_query($"."sql,$"."id);\n"; $ligne.="\t\tif($"."result){\n"; $ligne.="\t\t\treturn true;\n"; $ligne.="\t\t}else return false;\n"; $ligne.="\t}\n\n"; //fin $ligne.="}"; fwrite($file_class,$ligne); } } ?>

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

houndegnonm
Messages postés
12
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
16 mai 2012
-
Petite correction dans ma remarque

remarque pour utiliser ce code:
1- dans le fichier code_class.php modifier la ligne 8 au lieu de la ligne 17
cs_emilia123
Messages postés
122
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
5 janvier 2009
-
Bonjour,

Au niveau fonctionnement, j'aurais juste rajouter une portion de texte devant le nom de la classe.
Il n'est pas illogique d'utiliser ce nom même aussi pour la classe d'affichage, il pourrait donc être utile de rajouter une portion de texte avant ou apres le nom de la classe pour la rendre unique :
ex avec la chaine "bdd_" en début de nom de classe :
'class bdd_'.$table_name.'{'

Au niveau optimisation, j'aurais utilisé des ' (simple quote) à la place des " (double quote) ca aurait évité ce genre d'écriture :
"$"."result=mysql_query($"."sql,$"."id)"
avec du simple quote il n'y a pas de question à se poser concernant l'interprétation des variables (pas d'interprétation) :
'$result=mysql_query($sql,$id)'
c'est quand même beaucoup plus lisible.

Au niveau sécurité, je trouve vraiment dommage qu'il n'y en ai aucune dans le code généré. Il devrait à minima y avoir des "mysql_real_escape_string" sur les chaines reçues en parametres ou si $id est forcément un numérique il faut imposer un "intval(..)" dessus.
Cela évitera par exemple à l'utilisateur de ton script le delete de toute sa table en cas en cas de faille dans son applie lors de l'appel à la fonction delete(..)

EM
abdoulax
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012
-
Pour aller un peu plus loins, tu crées une class abstraite que tu hérites pour chacune de tes tables:

class db{
function getTable() {
$table = NULL;
if (strpos(__CLASS__, 'db_') === 0) {
$table = substr(__CLASS__, 3);
} else {
throw exception....
}
return $table;
}

function getData() {
$query = 'SELECT * FROM ' . $this->getTable() ....
....
}
}

Ensuite ton fichier n'aura plus cas générer le fichier contenant la class suivante (que tu pourras ensuite customiser...):

class db_table1() extend db{
/*here you put custom function*/
}

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.