DBOC 1.6 [PHP5]

MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 - 29 juin 2007 à 20:10
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Derniè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.

https://codes-sources.commentcamarche.net/source/43290-dboc-1-6-php5

Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
27 avril 2010 à 09:30
Version 3.0 up ici :
http://www.phpcs.com/codes/DBOC-V3-AJAX-PHP5_51656.aspx

La version 1.6 est obsolète :)
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
25 juin 2008 à 14:40
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
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és 8 Date d'inscription mercredi 18 janvier 2006 Statut Membre Dernière intervention 26 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és 8 Date d'inscription mercredi 18 janvier 2006 Statut Membre Dernière intervention 26 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és 8 Date d'inscription mercredi 18 janvier 2006 Statut Membre Dernière intervention 26 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és 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
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és 8 Date d'inscription mercredi 18 janvier 2006 Statut Membre Dernière intervention 26 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és 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
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és 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
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és 8 Date d'inscription mercredi 18 janvier 2006 Statut Membre Dernière intervention 26 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és 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
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és 1 Date d'inscription jeudi 15 février 2007 Statut Membre Derniè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és 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
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és 4 Date d'inscription dimanche 15 juillet 2007 Statut Membre Derniè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és 8 Date d'inscription jeudi 3 août 2006 Statut Membre Dernière intervention 18 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és 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
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és 3 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 10 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és 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
3 juil. 2007 à 19:46
Vi un zoli emballage roze ;)
Gwinyam Messages postés 47 Date d'inscription vendredi 7 octobre 2005 Statut Membre Derniè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és 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
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és 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
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és 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
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 $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 !
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
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és 4 Date d'inscription lundi 10 novembre 2003 Statut Membre Derniè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és 47 Date d'inscription vendredi 7 octobre 2005 Statut Membre Derniè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és 214 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 9 avril 2010 5
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és 214 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 9 avril 2010 5
1 juil. 2007 à 13:11
ta source est monstrueuse géniale ! Bravo !
Indiana68 Messages postés 1 Date d'inscription mercredi 16 juin 2004 Statut Membre Derniè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és 121 Date d'inscription vendredi 31 mars 2006 Statut Membre Dernière intervention 30 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és 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
29 juin 2007 à 20:15
Merci ;)
J'avoue j'aurais du faire sa beaucoup plus tôt sniiif ^^
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
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.

Bravo en tout cas pour l'idée
Rejoignez-nous