DBOC 2.0 [AJAX][PHP5]

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 4 juin 2008 à 23:52
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 - 21 avril 2010 à 14:25
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/46882-dboc-2-0-ajax-php5

Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
21 avril 2010 à 14:25
nicosalto Messages postés 5 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 11 novembre 2008
11 nov. 2008 à 14:46
Bonjour,
Je trouve ce code tres interessant et particulierement util.
Toutefois je n'arrive pas a utiliser la class generee par le script...
Voici mon code dans une page de mon site :
---------------------------------------------------------------------------------------------
include 'class/DataBaseManager.php';
include 'myClasses/tutos_posts.php';

$test = new Tutos_posts($_POSTS_ID, $_POSTS_AUTHOR, $_POSTS_TITLE, $_POSTS_TEXT, $_POSTS_CATEGORY, $_POSTS_PASSWORD, $_POSTS_STATUS, $_POSTS_DATE, $_POSTS_MODIFIED);
$test->load('1');

print_r($test);
---------------------------------------------------------------------------------------------
voila c'est tout simple mais le script ne me retourne pas les infos de ma base de donnee. Il me retourne le nom de mes champs inclus dans mes variables $_POSTS_AUTHOR ...
Le print_r m'affiche:

Tutos_posts Object ( [posts_id:private] => posts_id [posts_author:private] => posts_author [posts_title:private] => posts_title [posts_text:private] => posts_text [posts_category:private] => posts_category [posts_pass:private] => posts_pass [posts_status:private] => posts_status [posts_date:private] => posts_date [posts_modified:private] => posts_modified )

Si quelqu'un peux eclairer ma lanterne ?
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
5 sept. 2008 à 12:07
stailer, non on a pas ca en java.
cs_stailer Messages postés 507 Date d'inscription jeudi 28 mars 2002 Statut Membre Dernière intervention 13 mai 2009 1
5 sept. 2008 à 11:57
freepascal, C# ou tout simplement en java ;)
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
5 juin 2008 à 18:56
D?sol? Coucou, je ne connais pas les properties :/
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
5 juin 2008 à 18:53
perso, le __get et __set, je n'en vois l'utilite que pour les agregations et proxys... enfin je trouve ca hyper moche comme methode compare aux poperties qu'on trouve en freepascal ou en C#...
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
5 juin 2008 à 18:44
Toutes les classes générées par la sources sont écrite avec les méthodes magique __get et __set et pour la gestion des exceptions je vais la remanier totalement en même temps que je changerai l'abstraction de la base de donnée c'est promi ;)
Pour le xml j'utilise le parser de php pour valider le xml généré mais c'est vrai que je pourrai aussi l'utiliser pour générer mon xml ^^
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
5 juin 2008 à 18:38
Bon, j'ai jet? un ptit coup d'oeil ? ta source, quelques remarques :
Pour ce qui est de la base de donn'e, je te conseille de passer les param?tres dans un tableau sous la forme array('host'=>'localhost', 'login'=>'root', etc..); et de le placer dans le constructeur en param?tre optionnel et dans une autre fonction en parametre obligatoire (genre setProperties). Mais bon comme tu va tout refaire avec pdo ;)

En Php5 tu as les m?thodes magiques tel que __get et __set qui te permettent de r?cup?rer des valeurs sans forc?ment faire des getters et des setters (tel que get_db_host(), etc).
Pour tes exceptions, tu devrait peut-etre faire une classe interm?diaire, style DBOCException et que tes classes actuelles ?tendent, car l? en l'occurrence, tu fait de la redondance de code.

Pour les ?l?ments de la partie ajax_request, ce qui serait beau, c'est d'utiliser la classe fournie par Php pour les Xml, et de g?n?rer ton Xml ? partir de cela. Mais bon, jdit ca et j'en fait pas autant ;)

Euh, voila :)
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
5 juin 2008 à 18:24
En fait quand je parle de performance (dans ce cas l?), je fait r?f?rence au fait que pdo, ?tant cod? en C, est plus performant que d'impl?menter soi-m?me une abstraction sgbd en php. Maintenant c'est vrai qu'on est pas ? de l'abstraction pure et dure.
Apres c'est vrai qu'il vaut mieux ne pas utiliser pdo directement mais faire des classes qui vont utiliser pdo pour les requetes et qui seront sp?cifiques au type de sgbd. (style MysqlRequest avec un constructeur qui prends en param une instance de pdo, et OracleRequest, le tout afin d'effectuer le traitement correct en appelant la m?thode sp?cifique de l'instance en relation avec la sgbd).

Perso, apr?s avoir gout? a PDO, j'aurai du mal ? me tourner sur des application style ADODBPHP sachant que c'est des libraries ? inclures qui ne sont pas forc?ment sur le serveur, alors que PDO est (maintenant) impl?ment? de base. De plus quand on voit ce que pdo permet, au travers du Zend Framework, je pense qu'il faut vraiment pousser la b?te pour ?tre bloqu? avec Pdo :)

Ce qui manque ? mon gout pour Pdo, c'est un ensemble de classe qui portent le m?me nom que les classes li?es ? Pdo et qui permettent d'utiliser pdo dans le cas d'un serveur qui ne l'impl?mente pas (style serveur Php4 ou configuration de php5 exotique)
cs_stailer Messages postés 507 Date d'inscription jeudi 28 mars 2002 Statut Membre Dernière intervention 13 mai 2009 1
5 juin 2008 à 18:11
J'allais oublier... PDO permet de se passer d'une abstraction EN PARTIE. En réalité il faudrait que le driver lui-même soit une abstraction (voir Doctrine je crois ou plus sûrement ADODBPHP). ceci afin de switcher entre MySQL et SQLServer par exemple, mais aussi de switcher entre mysqli/ pdo ou différents drivers SQL Server développés par des entreprises tierces (SQL Server pour rester dans l'exemple, j'aurais pu dire Oracle).
cs_stailer Messages postés 507 Date d'inscription jeudi 28 mars 2002 Statut Membre Dernière intervention 13 mai 2009 1
5 juin 2008 à 18:08
CodeFalse : tu devrais utiliser PDO plutot que les fonctions mysql_*.
C'est plus performant et ca t'?vite d'utiliser une couche d'abstraction
-----------

non, mysqli tout particulièrement est plus performant que pdo. pdo a davantages de fonctionnalités mais il est plus performant dans le cas de requêtes paramétrées.
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
5 juin 2008 à 14:24
Merci CodeFalse ;)
Je trouve l'idée de Coucou747 excellente je suis en train de me documenter sur pdo pour implémenter tout sa dans la prochaine mise à jour.
Mais je sais pas trop par où commencer ni tout ce que je doit gérer dans cette classe d'abstraction ^^
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
5 juin 2008 à 13:37
Tu fait du bon travail je trouve, mais j'aurai quand meme une remarque.
J'ai pas parcourus tout ton code (j'ai pas le temps l?, j'essayerai plus tard), mais en rebondissant sur ce que dit Coucou, tu devrait utiliser PDO plutot que les fonctions mysql_*.
C'est plus performant et ca t'?vite d'utiliser une couche d'abstraction qui ne ferait que ralentir ton code. Comme PDO est inclus de base dans php > 5 (5.1 si je ne me trompe pas), pourquoi s'en priver ? Et vu que ton code est php5, c'est tout bon ! :)

Je regarderai plus en d?tails ce soir.
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
5 juin 2008 à 09:19
Merci Coucou747 ;)

En effet, pour ce qui est des fonctions pré-implémentées elles sont limités à ce singleton, j'ai commencer à regarder un peu ce qui avait été fait en matière d'abstraction mais je pense que le mieu serait ta solution avec pdo je vais commencer à me plonger dans son fonctionnement.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
5 juin 2008 à 04:23
salut

ta propre classe d'asbtraction mysql n'abstrait que les connections et requetes, mais pas les extractions de resultats...
conclusion, tu obtiens l'avantage d'avoir un singleton (ou multiton, vu que tu peux __clone), et tu obtiens l'avantage pour la gestion d'Exceptions, mais tu perds un avantage non negligeable : tu es toujours coince sur mysql...

cf while(mysql_fetch_row($result_sql)){
fichier : http://files.codes-sources.com/fichier.aspx?id=46882&f=class%2fClassWriter.php ligne 131

sinon, j'ai pas regarde en detail ton code, mais j'ai lu quelque part que ton code "limitait" les classes generees a TON abstraction sql... pour changer ca, j'imagine qu'il faut modifier le fichier :
http://files.codes-sources.com/fichier.aspx?id=46882&f=class%2fClassWriter.php

t'as une solution propre pour remedier a ca : un MVC : tu fais une interface : "vuesClassSql" et tu fais une interface pour PDO, une pour ta classe d'abstraction, etc... et dans le menu de generation des classes, tu mets un combobox (<select>) qui permette de choisir la vue.

en tout cas, cette source m'a l'air TRES interessante. tu peux peut-etre pousser en faisant deux classes par table : une pour les elements de la table, et une pour une collection de ces elements.

Bref, bonne continuation.
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
5 juin 2008 à 00:18
Hello Malalam ;)

Si je n'ai pas beaucoup d?taill? ma description c'est que j'avais d?j? post? une source dans le m?me sens (DBOC 1.6), sauf que la y'a eu une nette ?volution du script vers quelque chose de bien mieu structur? tant au niveau interface que la structure m?me du code.
J'ai ?galement rajout? des ?volution comme la gestion de l'h?ritage et la gestion des clef primaires dans la fonction load() qui charge une ligne de table dans un objet ? partir de ces derni?res et d'autre petites chose du m?me style.

Alors en pratique que fait mon code ? ^^

En fait ce que je viens de poster est l'?volution d'une de ma pr?c?dente source dont le lien dans le descriptif.
En gros l'id'e de d?part c'?tait de recr?er ce que l'on ? en java quand on cr?er une nouvelle classe : le squellette mais en un peu plus ?volu?.

Ici le squelette des classes se base sur des tables d'une base mysql.
Concr?tement, on se connecte ? une base mysql et l'on va g?n?rer le code d'une classe permettant de manipuler des enregistrements que ces tables contiennent, se sont des classes "images" des tables, chaque champ devient un attribut.
Et avec cel? on peu rajouter quelques petites fonctions pr?-impl?ment?es qui vont nous aider ? ajouter/mettre ? jour/supprimer/charger/charger tout,avoir notre enregistrement en xml etc. via notre objet.

Bien entendu cette source ? ses limites, par exemple je n'ai pas utilis? pdo dans mes fonctions pr?-impl?ment? mais ma propre classe d'abstraction qui est tr?s basique et on pourrai discuter de certain de mes choix de programation, mais on peu quand m?me se servir de cette source sans choisir d'impl?menter les fonctions que j'ai ajout?, l'avantage ?tant le gain de temps et le formalisme du code :)

Voila j'esp?re avoir bien r?sum?, mais tu as raison pour quelqu'un qui ne connait pas la source pr?c?dante c'est assez dur de comprednre que par le titre le but de la source ^^
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
4 juin 2008 à 23:52
Hello,
j'ai pas suivié tes liens : mon 1er réglexe a été de lire ton descriptif...trop succint et surtout pas du tout descriptif...puis de regarder l'archive...trop de fichiers. Alors ma question avant d'aller plus loin : il fait quoi, ton code???
(Ok, je suis admin CS...donc ma question n'est pas innocente : rien n'indique à quoi sert ta source, pas même ton titre si e n'est qu'il suggère, si on n'est pas un débutant, vaguement de la DB sans en être vraiment sûr...bref, t'es pas très prolyxe! Et là, il est minuit, j'irai pas fouiller ton code, le titre a juste l'air sympa, l'orthographe du descriptif aussi, ça fait sérieux...mais j'ai foutrement aucune idée de ce que fait ton code. Moi, j'irai voire demain...mais tu pourrais quand même faire un effort!)
Rejoignez-nous