MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 2009
-
29 juin 2007 à 20:10
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 2013
-
27 avril 2010 à 09:30
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 26 mai 2008 à 16:52
Merci ;)
Je suis en train de travailler sur la version 2, elle sera totalement en ajax et gérera je l'espère plus de chose que l'actuelle :)
marcant77
Messages postés8Date d'inscriptionmercredi 18 janvier 2006StatutMembreDernière intervention26 mai 2008 26 mai 2008 à 16:07
bon l'erreur provient deif(count($params) 1) $params[0] $params;
je l'ai mis en com en attendant :)et
pour l'instant ?a fonctionne
voila en tout cas merci :) je vais pouvoir regarder de plus pr?s maintenant
en tout cas ton g?n?rateur est tr?s bien et une bonne id'e et il permet d'aller plus vite;)
marcant77
Messages postés8Date d'inscriptionmercredi 18 janvier 2006StatutMembreDernière intervention26 mai 2008 26 mai 2008 à 15:58
je viens de voir que si j enl?ve cette partie dans le constructeur ->function __construct($params) dbm.php
if(!is_array($params) && !is_string($params)) throw new myException("ClassWriter wait an array() or a string in param");
if(count($params) != 1 && count($params) != 4) throw new myException("ClassWriter params must be 1 string ($sql) or array() size 4($db_host,$db_name,$db_user,$bd_pass) size");
if(count($params) == 1 && !is_string($params)) throw new myException("ClassWriter :: calling static constructor error : element 0 in the array() is not a string");
if(count($params) == 4){
$count = 0;
foreach($params as $param){
if(!is_string($param[$count])) throw new myException("ClassWriter :: calling dynamic constructor error : index $count, element ".($count + 1)." in the array() is not a string");
}
}if(count($params) 1) $params[0] $params;
j'ai plus cette erreur de "S"
marcant77
Messages postés8Date d'inscriptionmercredi 18 janvier 2006StatutMembreDernière intervention26 mai 2008 26 mai 2008 à 15:39
ce qui est ?trange c'est que j avais pas de probl?mes avec la version PHP 5.2.5
la fonction g?n?re bien la requete sql dans ma classe Page_principale:
public static function get($IDPage_principale){
$sql="SELECT * FROM Page_principale WHERE IDPage_principale='$IDPage_principale'";
echo("test1->".$sql); --> le r?sultat est bon test1->SELECT * FROM Page_principale WHERE IDPage_principale='1'
$dbm = new DBM($sql);
par contre dans la classe DBM
public function executeSql0(){
$this->connect();
if($this->connected == true){
echo(test2->$this->sql); -->resultat faux test2-> ELECT * FROM Page_principale WHERE IDPage_principale='1'
je vois pas pourquoi... je continu ? chercher :)
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 26 mai 2008 à 14:55
Effectivement il te manque le S de select et du coup ta requête est mauvaise, l'exception est jetée par la classe Page_principale.php qui est dans ton dossier C:\wamp\www\test\Administrateur\classes, lors de l'appel de le fonction get() avec le paramètre '1', effectivement cette fonction génère la requête sql qui va chercher l'objet qui à pour clef primaire le paramètre et fait appel au DBM, vérifie que la fonction get construit ta requête correctement :)
marcant77
Messages postés8Date d'inscriptionmercredi 18 janvier 2006StatutMembreDernière intervention26 mai 2008 26 mai 2008 à 14:15
merci de ta r?ponse rapide, oui c'est des le d?but dans l'index...
Je viens de remarquer quand j'affiche dans DMB.php
dans la function executeSql0()
je fais un echo($this->sql); voila le r?sultat
ELECT * FROM Page_principale WHERE IDPage_principale='1'
Fatal error: Uncaught exception 'myException' with message 'Warning ! attention !!!! SQL error : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1' in C:\wamp\www\test\Administrateur\classes\DBM.php:114 Stack trace: #0 [internal function]: DBM->executeSql0() #1 C:\wamp\www\test\Administrateur\classes\DBM.php(22): call_user_func_array(Array, Array) #2 [internal function]: DBM->__call('executeSql', Array) #3 C:\wamp\www\test\Administrateur\classes\Page_principale.php(29): DBM->executeSql() #4 C:\wamp\www\test\index.php(67): Page_principale::get(1) #5 {main} thrown in C:\wamp\www\test\Administrateur\classes\DBM.php on line 114
j'ai l'impression qu'il y a un probl?me a ce niveau la car il manque Le "S"
voila en tout merci
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 26 mai 2008 à 13:24
Il me faudrait un peu plus de précisions, quand est ce que tu as ce message ? Directement quand tu affiche la page index ou plus tard?
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 26 mai 2008 à 13:17
Très simple, le DBM marche, en fait il à "jeté" une exception que j'ai oublié de rattraper :)
Pour corriger sa il faudrai rajouter un bloc
try{}catch(myException $e){ echo $e->__error(); } mais je vois pas où il manque une parti du message d'erreur, celui ou l'on peu voir où le code à fait appel au DBM et où il manque le fameux bloc ci dessus.
Sinon cette exception est envoyée en cas d'erreur dans une requête sql je vais regarder de mon côté et je vais essayer de corriger sa
marcant77
Messages postés8Date d'inscriptionmercredi 18 janvier 2006StatutMembreDernière intervention26 mai 2008 26 mai 2008 à 13:02
Tr?s bon script , mais maintenant j'ai un probl?me du ? la mise ? jour de php 5.2.5 -> 5.2.6
J'ai la classe DBM qui ne fonctionne plus
Uncaught exception 'myException' with message 'Warning ! SQL error : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1' in C:\wamp\www\test\Administrateur\classes\DBM.php:109 Stack trace: #0 [internal function]: DBM->executeSql0() #1 C:\wamp\www\test\Administrateur\classes\DBM.php(22): call_user_func_array(Array, Array) #2 [internal function]: DBM->__call('executeSql', Array) #3
voila, merci
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 8 déc. 2007 à 17:18
Oui le code n'est pas formaté il est juste généré avec ses retours à la ligne mais un coup de refactoring avec un ptit logiciel et c'est bon ;)
simabo
Messages postés1Date d'inscriptionjeudi 15 février 2007StatutMembreDernière intervention 6 décembre 2007 6 déc. 2007 à 14:23
Absolument génial ! Je ne suis pas fan de ton formatage et il y a pas mal de pétouilles (le fgets pour insérer le nom de table merdoie dans certains cas, le fait d'avoir un mdp sur sa base ne lui plait pas, etc.) mais rien qu'on ne puisse corriger à la main après génération.
Enorme taf qui rend d'énormes services. Bravo, bravo, bravo !
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 16 août 2007 à 17:15
Méa-culpa c'est vrai ^^ je corrigerai sa c'est promi quand je ferais la prochaine version qui gèrera les héritages enfin quand j'aurais moins de boulot :(
nu_tango
Messages postés4Date d'inscriptiondimanche 15 juillet 2007StatutMembreDernière intervention 6 avril 2010 14 août 2007 à 00:06
On va dire que je chipote ^^
Mais dans testgeneratedclasses.php tu utilises 2 inputs de type checkbox qui portent le meme attribut name, il faut utiliser plutot type="radio", pour éviter de pouvoir cocher les 2...
Sinon très bonne source, çà mérite bien 9,5/10.
Bonne continuation.
fs074995
Messages postés8Date d'inscriptionjeudi 3 août 2006StatutMembreDernière intervention18 février 2009 15 juil. 2007 à 08:30
Ne serait-il pas pratique de surcharger également le constructeur dans classWriter.php et ainsi pouvoir instancier un class metier sans paramètre tout en gardant la possibilité pour l'occurance de s'instancier avec parametres pour les return
A votre avis
Sinon quelle bonne idée ce script
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 11 juil. 2007 à 16:13
Malheuresement oui, j'ai utilisé les syntaxe objet php5 , si tu veus l'utiliser je te conseille WAMP
wouarf
Messages postés3Date d'inscriptionvendredi 3 décembre 2004StatutMembreDernière intervention10 juillet 2007 10 juil. 2007 à 14:09
Bonjour,
J'aimerais bien tester mais, où que j'aille, je suis en PHP4.4.4, 4.3.4 ou 4.3.10. Est-ce que je peux tenter d'installer ou le script est-il vraimment spécifique à PHP5 ?
Merci
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 3 juil. 2007 à 19:46
Vi un zoli emballage roze ;)
Gwinyam
Messages postés47Date d'inscriptionvendredi 7 octobre 2005StatutMembreDernière intervention 2 janvier 2008 3 juil. 2007 à 18:53
Bon bah je prends la mise à jour avec hein, vous me faites l'emballage cadeau avec? ;)
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 3 juil. 2007 à 18:12
Grosse mise à jour de la source !
La seule chose que je voulais rajouter et que j'ai oublié dans la description c'est que meme si le constructeur et la méthode execSql de la classe DBM sont surchargé j'ai rajouté la version statique de la classe au cas ou ;)
voilou !
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 3 juil. 2007 à 10:15
Exact adurand69 ^^ je fait appel à execSQL() au lieu de executeSQL() pour la raison si dessus (j'utilise un DBM statique et légèrement différent) je vais corriger tout sa c'est promi ;)
Tes warnig sont normaux :
Uncaught exception 'myException' with message 'Warning ! Connexion to annu_tpa failed
tu ne peus pas te connecter à ta base pour les raisons ci dessus et quand tu as fait l'appel
tu n'as pas du faire de bloc try{}catch(){} du coup sa à bien levé l'exception comme quoi il y avais une erreur de connexion à la base mais elle n'était pas rattrapée d'ou le "Uncaught exception" et le warning "'Warning ! Connexion to annu_tpa failed"
Je m'excuse encore pour cet oubli ! Mise à jour de la source dès que possible !
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 3 juil. 2007 à 10:06
C'est re moi ! Un inexcusable oubli de ma par concernant la class DBM,
vous pouvez voir que dans les classes généré, dans les méthodes comme get(),getall() etc. la classe est appellé de cette manière :
$dbm = new DBM($sql);
alors que dans ma classe DBM le constructeur contient 4 paramètres :
public function __construct($db_host,$db_name,$db_user,$bd_pass)
pourquoi?
Explications : à la base le BDOG ne m'est utile que pou la génération des classes, je génère mes classes que je copie ensuite dans le répertoire de mon projet qui contient mes classes métier (en général c'est un dossier "class" ou "classes")
Et c'est la d'ou viens mon oubli, la classe DBM que j'utilise dans mes projet contient les informations de connexion private $DB_HOST,$DB_USER,$DB_PASS,$DB_NAME en statique !
Ce qui n'était pas pratique pour le BDOG puique l'idée est de ce connecter à une base quelquonque, ces information ne peuvent donc pas être statique.
Pour pouvoir l'utiliser vous avez 2 solutions, la première c'est de modifier la classe DBM de la manière suivante :
<?php
require('myException.php');
class DBM{
//Vars
private $DB_HOST = "nom de l'HOST";
private $DB_USER = "nom de l'USER";
private $DB_PASS = "le mot de passe s'il y en a un";
private $DB_NAME = "nom de la base de donnée ou se connecter";
private $connected;
//Constructeur
public function __construct($sql){
if(!is_string($db_host)) throw new myException("Warning ! HostName is not a string");
if(!is_string($db_name)) throw new myException("Warning ! DBName is not a string");
if(!is_string($db_user)) throw new myException("Warning ! DBUser is not a string");
if(!is_string($bd_pass)) throw new myException("Warning ! DBPassword is not a string");
if($db_host == "") throw new myException("Warning ! Empty HostName");
if($db_name == "") throw new myException("Warning ! Empty DBName");
if($db_user == "") throw new myException("Warning ! Empty DBUser");
la deuxième solution est plus compliqué, je compte mettre à jour la source afin de palier à ce problème, c'est de créer un constructeur surchargé, bien que cette propriété n'est pas directement intégrée au PHP5 elle est néanmoin simmulable grace à la fonction _call() que je vous invite à regarder.
Je rapelle donc que pour ne pas avoir d'erreur il faut copier les class générées dans myClasses dans le dossier classe et modifier la classe DBM pour que vous puissiez utiliser vos classes dans un projet.
Voila je vais m'occuper de faire une mise à jour dès que possible.
Modifications prévues :
-> Création automatique du dossier myClasses si inexistant
-> Surcharge du constructeur de la classe DBM
Merci pour tout vos commentaire et si un problème subsiste n'hésitez pas à me contacter !
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 3 juil. 2007 à 09:02
Me revoila après une tite abscence veuillez m'en excsuer ;)
Je vais commencer par répondre à la question de Chapata (je manque de temps pour répondre a tout mais sa va venir)
En fait si le chemin est correct parce que toutes mes classes utiles ne sont pas appellées dans myClasses mais dans le dossier class tout simplement l'idée en fait était de copier coller les classes générées en plus des classes utiles (myExecption, DBM et la dite interface) dans le dossier class ;)
Ah en fait l'interface sert plus à une formalisation de code qu'a autre chose et n'estp as obligatioire vous pouvez très bien l'enlever ;)
adurand69
Messages postés4Date d'inscriptionlundi 10 novembre 2003StatutMembreDernière intervention 2 juillet 2007 2 juil. 2007 à 14:08
Bonjour ;
Super idée et supre source !!!
J'ai essayer avec WAMP et j'ai quelque petits soucis. Au niveau de la classwrite pour les méthodes construct et getall, tu costruis la conn à la bdd avec le $sql au lieu de $host, $user et $pass.
De plus, tu fais appel dans ces fonctions à execSql au lieu de executeSql. Rien de bien grave quoi.
Par contre, moi j'ai des gros soucis de connexion à la BDD en utilisation des classes générer car j'ai utilisé tes classes et il ne veut pas du tout se sonnecter. Je continue à chercher et je te fais remonter au cas où :
Fatal error: Uncaught exception 'myException' with message 'Warning ! Connexion to annu_tpa failed' in C:\wamp\www\annu_tpa\classes\DBM.php:40 Stack trace: #0 C:\wamp\www\annu_tpa\classes\DBM.php(56): DBM->connect() #1 C:\wamp\www\annu_tpa\classes\amo.php(157): DBM->executeSql('SELECT * FROM a...') #2 C:\wamp\www\annu_tpa\classes\amo.php(245): amo::get('AGF') #3 C:\wamp\www\annu_tpa\index.php(9): amo::getall() #4 {main} thrown in C:\wamp\www\annu_tpa\classes\DBM.php on line 40
Encore brave ;
Aymeric
Gwinyam
Messages postés47Date d'inscriptionvendredi 7 octobre 2005StatutMembreDernière intervention 2 janvier 2008 2 juil. 2007 à 07:55
Rien que d'en avoir eu l'idée, ça vaut une bonne note.
Je récupère ce script, ça va simplifier pas mal de choses.
Bravo encore, pas débile de revenir sur un principe plus ou moins similaire à Hibernate de Java. ça manquait à l'appel par ici
cs_chapata
Messages postés214Date d'inscriptionmercredi 2 février 2005StatutMembreDernière intervention 9 avril 20105 1 juil. 2007 à 13:53
sauf erreur de ma part, il me semble que le fichier "iDataBaseClass.php" est appelé dans les class générée, mais le chemin n'est pas correct...
... je suis un débutant au niveau des Class : comment je dois faire pour appeler un fonction de ma class générée ?
dans un fichier controle.php, je me connecte à ma BDD bien évidemment
je fais :
require('DataBaseObjectCreator/myClasses/ma_table.php');
$ma_table=new ma_table();
$ma_table->get('mon_champ');
$ma_table->getall();
etc...
mais là j'ai des erreurs :
tout d'abord, il me dis que le fichier "iDataBaseClass.php" n'est pas présent (chose que je t'ai remonté plus haut) j'ai donc fait un copier coller du fichier dans le répertoire myClasses
apres j'ai les messages :
Warning: Missing argument 1 for ma_table::__construct(), called in C:\Program Files\EasyPHP 2.0\www\test_class\controle.php on line 15 and defined in C:\Program Files\EasyPHP 2.0\www\test_class\DataBaseObjectCreator\myClasses\ma_table.php on line 13
Warning: Missing argument 2 for ma_table::__construct(), called in C:\Program Files\EasyPHP 2.0\www\test_class\controle.php on line 15 and defined in C:\Program Files\EasyPHP 2.0\www\test_class\DataBaseObjectCreator\myClasses\ma_table.php on line 13
etc ...
peux tu m'expliquer ?
Merci
cs_chapata
Messages postés214Date d'inscriptionmercredi 2 février 2005StatutMembreDernière intervention 9 avril 20105 1 juil. 2007 à 13:11
ta source est monstrueuse géniale ! Bravo !
Indiana68
Messages postés1Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention 1 juillet 2007 1 juil. 2007 à 12:14
Ne pas oublier de créer le dossier "myClasses", l'erreur n'est pas gérée
cs_morpheus57
Messages postés121Date d'inscriptionvendredi 31 mars 2006StatutMembreDernière intervention30 décembre 2010 30 juin 2007 à 18:24
Trop fort, ça faisait longtemps que je cherchais un générateur de ce style, du coup j'avais même commencé à le faire moi même...
Je vais tester ça... ça va me faire gagner beaucoup de temps et éviter des bugs.
Merci ! ! !
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 29 juin 2007 à 20:15
Merci ;)
J'avoue j'aurais du faire sa beaucoup plus tôt sniiif ^^
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 29 juin 2007 à 20:10
Argh argh argh !!!!!
Mais pourquoi ? pourquoi ne pas l'avoir fait quelques mois plus tot lol. Non je te charie, c'est juste que je viens de me rendre compte que c'est une excellente idée qui m'aurais économisé tant de temps il y'a quelques mois.
27 avril 2010 à 09:30
http://www.phpcs.com/codes/DBOC-V3-AJAX-PHP5_51656.aspx
La version 1.6 est obsolète :)
25 juin 2008 à 14:40
http://www.phpcs.com/codes/DBOC-AJAX-PHP5_46882.aspx ^^
26 mai 2008 à 16:52
Je suis en train de travailler sur la version 2, elle sera totalement en ajax et gérera je l'espère plus de chose que l'actuelle :)
26 mai 2008 à 16:07
je l'ai mis en com en attendant :)et
pour l'instant ?a fonctionne
voila en tout cas merci :) je vais pouvoir regarder de plus pr?s maintenant
en tout cas ton g?n?rateur est tr?s bien et une bonne id'e et il permet d'aller plus vite;)
26 mai 2008 à 15:58
if(!is_array($params) && !is_string($params)) throw new myException("ClassWriter wait an array() or a string in param");
if(count($params) != 1 && count($params) != 4) throw new myException("ClassWriter params must be 1 string ($sql) or array() size 4($db_host,$db_name,$db_user,$bd_pass) size");
if(count($params) == 1 && !is_string($params)) throw new myException("ClassWriter :: calling static constructor error : element 0 in the array() is not a string");
if(count($params) == 4){
$count = 0;
foreach($params as $param){
if(!is_string($param[$count])) throw new myException("ClassWriter :: calling dynamic constructor error : index $count, element ".($count + 1)." in the array() is not a string");
}
}if(count($params) 1) $params[0] $params;
j'ai plus cette erreur de "S"
26 mai 2008 à 15:39
la fonction g?n?re bien la requete sql dans ma classe Page_principale:
public static function get($IDPage_principale){
$sql="SELECT * FROM Page_principale WHERE IDPage_principale='$IDPage_principale'";
echo("test1->".$sql); --> le r?sultat est bon test1->SELECT * FROM Page_principale WHERE IDPage_principale='1'
$dbm = new DBM($sql);
par contre dans la classe DBM
public function executeSql0(){
$this->connect();
if($this->connected == true){
echo(test2->$this->sql); -->resultat faux test2-> ELECT * FROM Page_principale WHERE IDPage_principale='1'
je vois pas pourquoi... je continu ? chercher :)
26 mai 2008 à 14:55
26 mai 2008 à 14:15
Je viens de remarquer quand j'affiche dans DMB.php
dans la function executeSql0()
je fais un echo($this->sql); voila le r?sultat
ELECT * FROM Page_principale WHERE IDPage_principale='1'
Fatal error: Uncaught exception 'myException' with message 'Warning ! attention !!!! SQL error : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1' in C:\wamp\www\test\Administrateur\classes\DBM.php:114 Stack trace: #0 [internal function]: DBM->executeSql0() #1 C:\wamp\www\test\Administrateur\classes\DBM.php(22): call_user_func_array(Array, Array) #2 [internal function]: DBM->__call('executeSql', Array) #3 C:\wamp\www\test\Administrateur\classes\Page_principale.php(29): DBM->executeSql() #4 C:\wamp\www\test\index.php(67): Page_principale::get(1) #5 {main} thrown in C:\wamp\www\test\Administrateur\classes\DBM.php on line 114
j'ai l'impression qu'il y a un probl?me a ce niveau la car il manque Le "S"
voila en tout merci
26 mai 2008 à 13:24
26 mai 2008 à 13:17
Pour corriger sa il faudrai rajouter un bloc
try{}catch(myException $e){ echo $e->__error(); } mais je vois pas où il manque une parti du message d'erreur, celui ou l'on peu voir où le code à fait appel au DBM et où il manque le fameux bloc ci dessus.
Sinon cette exception est envoyée en cas d'erreur dans une requête sql je vais regarder de mon côté et je vais essayer de corriger sa
26 mai 2008 à 13:02
J'ai la classe DBM qui ne fonctionne plus
Uncaught exception 'myException' with message 'Warning ! SQL error : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1' in C:\wamp\www\test\Administrateur\classes\DBM.php:109 Stack trace: #0 [internal function]: DBM->executeSql0() #1 C:\wamp\www\test\Administrateur\classes\DBM.php(22): call_user_func_array(Array, Array) #2 [internal function]: DBM->__call('executeSql', Array) #3
voila, merci
8 déc. 2007 à 17:18
6 déc. 2007 à 14:23
Enorme taf qui rend d'énormes services. Bravo, bravo, bravo !
16 août 2007 à 17:15
14 août 2007 à 00:06
Mais dans testgeneratedclasses.php tu utilises 2 inputs de type checkbox qui portent le meme attribut name, il faut utiliser plutot type="radio", pour éviter de pouvoir cocher les 2...
Sinon très bonne source, çà mérite bien 9,5/10.
Bonne continuation.
15 juil. 2007 à 08:30
A votre avis
Sinon quelle bonne idée ce script
11 juil. 2007 à 16:13
10 juil. 2007 à 14:09
J'aimerais bien tester mais, où que j'aille, je suis en PHP4.4.4, 4.3.4 ou 4.3.10. Est-ce que je peux tenter d'installer ou le script est-il vraimment spécifique à PHP5 ?
Merci
3 juil. 2007 à 19:46
3 juil. 2007 à 18:53
3 juil. 2007 à 18:12
La seule chose que je voulais rajouter et que j'ai oublié dans la description c'est que meme si le constructeur et la méthode execSql de la classe DBM sont surchargé j'ai rajouté la version statique de la classe au cas ou ;)
voilou !
3 juil. 2007 à 10:15
Tes warnig sont normaux :
Uncaught exception 'myException' with message 'Warning ! Connexion to annu_tpa failed
tu ne peus pas te connecter à ta base pour les raisons ci dessus et quand tu as fait l'appel
tu n'as pas du faire de bloc try{}catch(){} du coup sa à bien levé l'exception comme quoi il y avais une erreur de connexion à la base mais elle n'était pas rattrapée d'ou le "Uncaught exception" et le warning "'Warning ! Connexion to annu_tpa failed"
Je m'excuse encore pour cet oubli ! Mise à jour de la source dès que possible !
3 juil. 2007 à 10:06
vous pouvez voir que dans les classes généré, dans les méthodes comme get(),getall() etc. la classe est appellé de cette manière :
$dbm = new DBM($sql);
alors que dans ma classe DBM le constructeur contient 4 paramètres :
public function __construct($db_host,$db_name,$db_user,$bd_pass)
pourquoi?
Explications : à la base le BDOG ne m'est utile que pou la génération des classes, je génère mes classes que je copie ensuite dans le répertoire de mon projet qui contient mes classes métier (en général c'est un dossier "class" ou "classes")
Et c'est la d'ou viens mon oubli, la classe DBM que j'utilise dans mes projet contient les informations de connexion private $DB_HOST,$DB_USER,$DB_PASS,$DB_NAME en statique !
Ce qui n'était pas pratique pour le BDOG puique l'idée est de ce connecter à une base quelquonque, ces information ne peuvent donc pas être statique.
Pour pouvoir l'utiliser vous avez 2 solutions, la première c'est de modifier la classe DBM de la manière suivante :
<?php
require('myException.php');
class DBM{
//Vars
private $DB_HOST = "nom de l'HOST";
private $DB_USER = "nom de l'USER";
private $DB_PASS = "le mot de passe s'il y en a un";
private $DB_NAME = "nom de la base de donnée ou se connecter";
private $sql;
private $nbrows;
private $db_conn;
private $db_res;
private $connected;
//Constructeur
public function __construct($sql){
if(!is_string($db_host)) throw new myException("Warning ! HostName is not a string");
if(!is_string($db_name)) throw new myException("Warning ! DBName is not a string");
if(!is_string($db_user)) throw new myException("Warning ! DBUser is not a string");
if(!is_string($bd_pass)) throw new myException("Warning ! DBPassword is not a string");
if($db_host == "") throw new myException("Warning ! Empty HostName");
if($db_name == "") throw new myException("Warning ! Empty DBName");
if($db_user == "") throw new myException("Warning ! Empty DBUser");
$this->sql = $sql;
$this->connected = false;
}
...
?>
la deuxième solution est plus compliqué, je compte mettre à jour la source afin de palier à ce problème, c'est de créer un constructeur surchargé, bien que cette propriété n'est pas directement intégrée au PHP5 elle est néanmoin simmulable grace à la fonction _call() que je vous invite à regarder.
Je rapelle donc que pour ne pas avoir d'erreur il faut copier les class générées dans myClasses dans le dossier classe et modifier la classe DBM pour que vous puissiez utiliser vos classes dans un projet.
Voila je vais m'occuper de faire une mise à jour dès que possible.
Modifications prévues :
-> Création automatique du dossier myClasses si inexistant
-> Surcharge du constructeur de la classe DBM
Merci pour tout vos commentaire et si un problème subsiste n'hésitez pas à me contacter !
3 juil. 2007 à 09:02
Je vais commencer par répondre à la question de Chapata (je manque de temps pour répondre a tout mais sa va venir)
En fait si le chemin est correct parce que toutes mes classes utiles ne sont pas appellées dans myClasses mais dans le dossier class tout simplement l'idée en fait était de copier coller les classes générées en plus des classes utiles (myExecption, DBM et la dite interface) dans le dossier class ;)
Ah en fait l'interface sert plus à une formalisation de code qu'a autre chose et n'estp as obligatioire vous pouvez très bien l'enlever ;)
2 juil. 2007 à 14:08
Super idée et supre source !!!
J'ai essayer avec WAMP et j'ai quelque petits soucis. Au niveau de la classwrite pour les méthodes construct et getall, tu costruis la conn à la bdd avec le $sql au lieu de $host, $user et $pass.
De plus, tu fais appel dans ces fonctions à execSql au lieu de executeSql. Rien de bien grave quoi.
Par contre, moi j'ai des gros soucis de connexion à la BDD en utilisation des classes générer car j'ai utilisé tes classes et il ne veut pas du tout se sonnecter. Je continue à chercher et je te fais remonter au cas où :
Fatal error: Uncaught exception 'myException' with message 'Warning ! Connexion to annu_tpa failed' in C:\wamp\www\annu_tpa\classes\DBM.php:40 Stack trace: #0 C:\wamp\www\annu_tpa\classes\DBM.php(56): DBM->connect() #1 C:\wamp\www\annu_tpa\classes\amo.php(157): DBM->executeSql('SELECT * FROM a...') #2 C:\wamp\www\annu_tpa\classes\amo.php(245): amo::get('AGF') #3 C:\wamp\www\annu_tpa\index.php(9): amo::getall() #4 {main} thrown in C:\wamp\www\annu_tpa\classes\DBM.php on line 40
Encore brave ;
Aymeric
2 juil. 2007 à 07:55
Je récupère ce script, ça va simplifier pas mal de choses.
Bravo encore, pas débile de revenir sur un principe plus ou moins similaire à Hibernate de Java. ça manquait à l'appel par ici
1 juil. 2007 à 13:53
... je suis un débutant au niveau des Class : comment je dois faire pour appeler un fonction de ma class générée ?
dans un fichier controle.php, je me connecte à ma BDD bien évidemment
je fais :
require('DataBaseObjectCreator/myClasses/ma_table.php');
$ma_table=new ma_table();
$ma_table->get('mon_champ');
$ma_table->getall();
etc...
mais là j'ai des erreurs :
tout d'abord, il me dis que le fichier "iDataBaseClass.php" n'est pas présent (chose que je t'ai remonté plus haut) j'ai donc fait un copier coller du fichier dans le répertoire myClasses
apres j'ai les messages :
Warning: Missing argument 1 for ma_table::__construct(), called in C:\Program Files\EasyPHP 2.0\www\test_class\controle.php on line 15 and defined in C:\Program Files\EasyPHP 2.0\www\test_class\DataBaseObjectCreator\myClasses\ma_table.php on line 13
Warning: Missing argument 2 for ma_table::__construct(), called in C:\Program Files\EasyPHP 2.0\www\test_class\controle.php on line 15 and defined in C:\Program Files\EasyPHP 2.0\www\test_class\DataBaseObjectCreator\myClasses\ma_table.php on line 13
etc ...
peux tu m'expliquer ?
Merci
1 juil. 2007 à 13:11
1 juil. 2007 à 12:14
30 juin 2007 à 18:24
Je vais tester ça... ça va me faire gagner beaucoup de temps et éviter des bugs.
Merci ! ! !
29 juin 2007 à 20:15
J'avoue j'aurais du faire sa beaucoup plus tôt sniiif ^^
29 juin 2007 à 20:10
Mais pourquoi ? pourquoi ne pas l'avoir fait quelques mois plus tot lol. Non je te charie, c'est juste que je viens de me rendre compte que c'est une excellente idée qui m'aurais économisé tant de temps il y'a quelques mois.
Bravo en tout cas pour l'idée