CLASSE QUI EXECUTE LES REQUETES NOOBIES ET EXPERTS SOUHAITANT CLARIFIER LE CODE

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 28 févr. 2007 à 19:27
cs_savon Messages postés 21 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 19 mars 2007 - 19 mars 2007 à 14:04
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/41676-classe-qui-execute-les-requetes-noobies-et-experts-souhaitant-clarifier-le-code

cs_savon Messages postés 21 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 19 mars 2007
19 mars 2007 à 14:04
Un autre exemplaire des sources se trouve a cet url

http://plutonserveur.homelinux.com/sources/
cs_savon Messages postés 21 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 19 mars 2007
16 mars 2007 à 10:32
lol bon bah c toi qui a commencé a en parlé hein.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
14 mars 2007 à 00:00
euh... use... enfin bon, on n'est pas sur un forum qui traite du perl...
cs_savon Messages postés 21 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 19 mars 2007
13 mars 2007 à 19:12
include patate je parle pas des requete
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
13 mars 2007 à 18:17
"Mais quel dommage que on ne puisse faire d inclusions."=> tu sors ca d'ou ? les requettes en perl sont libres avec DBI (je crois)
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
13 mars 2007 à 14:41
Les 2 fonction sont tres differentes
-> pas d'accord avec toi, je te le démontre en dessous. Exemple similaire a ce que tu as fait code absent;

calculSomme(1,2,3,4) donne 10
calculSomme(1,2) donne 3
calculSomme2Chiffres(1,2) donne 3
Tu vois bien ici, que calculSomme peut etre équivalent a calculSomme2Chiffres dans le cas précis ou il y a 2 chiffres a additionner. Je ne coderai pas les 2 fonctions, je pense que je ne coderai que la premiere. Dans ta classe, les 2 fonctions sont identiques dans le cas où il n'y a qu'un champ a mettre a jour, donc pour moi ta fonction updateField est non nécessaire.


L'une (upfield) ne met a jour que 1 seul champ
-> je sais lire

L'autre met a jour plusieurs valeur par l intermediare du $_POST
-> tu peux passer n'importe quel tableau, donc un tableau associatif contenant qu'une seule valeur, ce qui serait equivalent a ta fonction qui update qu'un champ, sinon tu aurais mis $_POST directement au niveau de ta classe, et la tu te ferais incendié pour ça...
Ainsi tu passe juste le $_POST en parametre et ca va executer ta requete (la seule condittion est que les nom des champs formulaire soit les meme que ceux en BDD).
-> ce que tu devrais vérifier avec ta fonction "GetChampsbyTable", cependant comme dit ci-dessus, $_POST n'est pas la seule manière possible d'utiliser cette fonction.

Ce qui t evite de recuperer tes valeurs. et tu passe en 2 eme arugment ton critere.
C'etait marqué pourtant dans l intro
--> Je te montre simplement que ta fonction updateTable peut etre équivalente à updateField, si et seulement si elle est correctement utilisée (donc updateField me semble inutile, mais ca reste que mon avis)

J'espere que tu comprendras mon raisonnement ainsi que mon explication, et la raison pour laquelle je dis que tu as fait une mauvaise analyse.

Après fait ce que tu veux de ce que l'on te dit, mais sache que je ne cherche qu'a te faire par de mon opinion pour faire progresser ta classe.
cs_savon Messages postés 21 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 19 mars 2007
13 mars 2007 à 14:18
Garfield again
/*
Tu aurais au moins pu faire l'effort de la rendre a peut pres praticable pour les différents moteurs de BDD, je t'aurai moins paru agressif.
*/
Il faut patientér deja que cette classe arrive a maturité c'est encore une version 1.0
Mais c'est une bonne idée
cs_savon Messages postés 21 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 19 mars 2007
13 mars 2007 à 14:16
reponse a coucou747
Moi aussi j adore le perl.
Mais quel dommage que on ne puisse faire d inclusions.
Les switch aussi meme si on peu en installer.
Mais c'est un langage tres utile pour linux.
cs_savon Messages postés 21 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 19 mars 2007
13 mars 2007 à 14:13
Reponse a Garfeild
tu fais deux méthodes similaires : UpdateTable et UpdateField
UpdateField($fieldName,$fieldValue,$idToUpdate,$fieldIdName) = UpdateTable(array($fieldName=>$fieldValue),$idToUpdate,$fieldIdName);
=>pour moi, c'est du à une mauvaise analyse

-> Pas du tout .
Les 2 fonction sont tres differentes
L'une (upfield) ne met a jour que 1 seul champ
L'autre met a jour plusieurs valeur par l intermediare du $_POST
Ainsi tu passe juste le $_POST en parametre et ca va executer ta requete (la seule condittion est que les nom des champs formulaire soit les meme que ceux en BDD).
Ce qui t evite de recuperer tes valeurs. et tu passe en 2 eme arugment ton critere.
C'etait marqué pourtant dans l intro ....

SECURITE, SECURITE, SECURITE
-> ca va venir prochainement .

Autre chose garfield un peu de bon sens il est rare que les gens laissent des post pour dire que tout va bien.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
13 mars 2007 à 11:41
Coucou => bah, à ce compte-là, cette manière bien plus élégante d'attaquer une base de données existe
en PHP 5. Ca s'appelle PDO. Mais ça n'a pas grand rapport avec ce que voulait faire Savon, au final.
Même si je suis d'accord, c'est bien plus élégant. Et puissant.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
12 mars 2007 à 21:20
perso, j'aime bien la methode d'acces a une BDD en perl...

$connexion->prepare('SELECT champs FROM table WHERE col=?');
$connexion->execute($valeur) or die($connexion->error);

ensuite, le ? est remplace par la valeur... On peut remplacer ? par ?i pour verifier que c'est un integer, ?f pour un float, ?b pour un blob ect...

et pour les requettes de 50 lignes, ca peut se faire...

et la, pour les procedures stoquees, ca marche comment ?
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
12 mars 2007 à 20:45
C'est pas parcequ'elle marche (peut etre, pas testée) qu'elle convient à tous le monde.

Je veux faire une requete du type :
UPDATE Table1 SET champ1='toto' WHERE champ1='titi' ; ou
UPDATE Table1 SET champ1='toto', champ2='tutu' WHERE champ1='titi' ; etc. au niveau des updates.
De plus, tu fais deux méthodes similaires : UpdateTable et UpdateField
UpdateField($fieldName,$fieldValue,$idToUpdate,$fieldIdName) = UpdateTable(array($fieldName=>$fieldValue),$idToUpdate,$fieldIdName);
=>pour moi, c'est du à une mauvaise analyse

On ne peut pas faire une requete de delete avec ta classe, c'est pourtant une des bases lorsque l'on travaille avec des BDD, alors que l'on peut faire un EnumGet

De meme, on peut pas classer l'ordre des résultats de la requete.

Je ne souleverai pas le probleme des jointures, des sous-requetes et toutes requetes complexe qui évitent de faire des accès multiples a la BDD (ah si, je viens de le faire ;))

Avec ta classe, je peux pas ou alors je dois modifier tes méthodes, pour moi elle me simplifie pas les choses.

Aucune vérification n'est faite sur le type des données et/ou le contenu, i.e. tu fais confiance aux données entrée pour tes requetes (1ere chose à ne pas faire, en particulier si ca vient de données provenant de GET et/ou POST, voir meme de données calculées) => SECURITE, SECURITE, SECURITE

Retravaille ta classe en prenant en compte les observations, elles sont en générales pertinente.Car pour toutes ces raisons, ta classe ne peut pas être utilisée dans le monde professionnel et meme amateur, elle a trop de lacune qui ne sont pas négligeable.

Question : Pourquoi les développeur de PHP n'ont pas coder comme toi au niveau du noyau
Réponse : La possibilité de création de requetes est quasi infinie alors que ta classe limite énormement les possiblité de MySQL.

Tu aurais au moins pu faire l'effort de la rendre a peut pres praticable pour les différents moteurs de BDD, je t'aurai moins paru agressif.

Je suis fort aise, que ta classe te convienne mais elle ne convient pas aux autres qui argumentent eux leur réflexion, j'aimerai bien que tu dises pourquoi tu fais comme ca et pas autrement.

Je pense a peu près avoir tout dit, en ce qui me concerne, sur cette classe.

J'attends une argumentation concernant ta classe et des réponses concernant les éléments soulevés.

PS : tu aurais du nommé ta classe :
Classe qui exécute des requetes NOOBIES et Simplistes ...

PPS : concernant mon code, vu que tu dedaignes pas poster sur celui-ci.
Le fichier que tu démontes est celui de test/exemple, il peut etre supprimable, donc ton commentaire est pour moi inutile. La suite http://www.phpcs.com/codes/FONCTION-RECURSIVE-RECHERCHE-FICHIER-SELON-EXTENSION-OU-GROUPE_32786.aspx
cs_savon Messages postés 21 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 19 mars 2007
12 mars 2007 à 19:00
L'a tu selement testé...
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
10 mars 2007 à 01:21
C'est le principe meme ... je vois pas l'interet de classer ce code dans la partie initie en disant que l'on peut construire facilement et rapidement des requetes simples & "experts" sans pouvoir au moins selectionner les colonnes que l'on desire ...

Apres tu fais ce que tu veux mais c'est clair que ta classe, je m'en servirai pas (et je la conseillerais pas non plus)
cs_savon Messages postés 21 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 19 mars 2007
9 mars 2007 à 00:53
bah on va essayer on verra bien si ca sert vraiment ou pas
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
7 mars 2007 à 19:06
Pourquoi ne pas faire une fonction a qui l'on donnerait les noms des colones que l'on veut recuperer ?
Pour simplifier les choses, tu pourrais par exemple utiliser la fonction func_get_args() => http://www.php.net/manual/fr/function.func-get-args.php qui te permettrait d'obtenir un nombre variable d'arguments a ta fonction sans passer par un tableau (le tableau te sera renvoye par cette fonction). Les utilisateurs pourraient donc passer en param les noms des colones qui'ils desirent et tu n'aurais plus qu'a les rajouter a ta requete...
cs_savon Messages postés 21 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 19 mars 2007
7 mars 2007 à 13:10
Reponse a Hello
Je ne vais pas repondre a tout car trop long mais simplement
Ce que tu souleve sur les select * j'y ai pensé avant de coder cette classe .
Selement c'est la seule facon d'eviter a l utilisateur de rentrer tout les champs et je ne pense pas ca serait utilisable en parametre tout les champs (dans ce cas autant faire une requete sql).
C'est pour ca que j ai voulu faire simple.

Utliserai tu une fonction du genre?
$obj->getvalues("champ1","champ2","champn");
en imaginant que il puisse en avoir une trentaine par ex?
Si Tu pense ca je veut bien coder cette fonction mais je ne pense pas que les gens l utiliseron.
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
6 mars 2007 à 09:30
Hello

Je vois qu'il y a une bete d'ambiance ici bas :p Bah allez je m'y jette (pas par plaisir mais y a des trucs qui me font bondir)

"Les select * effectivement c moyen en terme de perfomance mais cela simplifie l'utilisation
car sinon il faudrau passer en parametre le nom de tout les champs et la c relou. Le BUT de cette classe est de SIMPLIFIER L'access au données et non pas de la compliquer"

Le principe d'une classe (entre autre) et de proposer une interface (api ?) de plus haut niveau en encapsulant des fonctions fournies par le language ou d'autres classes (libs) (je passe le cote abstraction). C'est au developpeur de se taper le sale boulot pour qu'a la fin cela ne le soit pas pour le developpeur desireux d'utiliser ta classe (c'est mon point de vue evidement). Si tu proposes une classe de simplification, autant le faire jusqu'au bout... m'enfin je peut comprendre que chacun ai ses limites (ou sa flemme ^^)....
Le titre de ta source me renforce dans cette opinion quand je lis "CLASSE QUI EXECUTE LES REQUETES NOOBIES ET EXPERTS SOUHAITANT CLARIFIER LE CODE". C'est une requete d'expert de faire un select * ? Wahou !! Je suis un dingue du sql alors, je fais meme des unions dans mes requetes :p

---

"reponse a webdeb <?php et <? c'est typiquement la meme chose"

Bah pourtant l'article de webdeb (tres bien fait au passage) est suffisament court et explicite pour faire comprendre le bien fonde de sa remarque. Si toutes les personnes a qui l'ont a fait la remarque (et y en un paquet, rien que sur l'actu en ce moment) comprennent le pourquoi du comment et aux vues de arguments avances (portabilite entre autre), je ne vois pas en quoi l'on peut se permettre ce genre de remarque, surtout lorsque l'on lit "Elle m'a fait gagné enormement de temps aussi je la soumet et espere que des gens l'utiliseron et l amelorement aussi". Pour que les gens l'utilisent, faudrait deja qu'elle fonctionne chez eux ..... => Malalam : "Ton code ne marche pas du tout sur mon serveur, pour info. Du tout."

---

"Les données sont protegés au niveau d un utilisation classique et pas pour le serveur de la NSA
Je te rapelle que le php est executé du coté serveur."

Quel est le lien ? Elle est ou ta protection contre les sql injections ? En quoi le fait que php soit execute cote serveur apporte une securite au niveau des requetes sql ? Pour la NSA, bah j'ai pas travailler chez eux, sa c'est sur, mais il n'empeche que la securite, c'est l'affaire de tous. Faut pas se croire a l'abri d'un petit malin, c'est pas parce qu'on est + de 6 milliards sur terre que tu vas te fondre dans la masse ^^ Si ton site est frequente, t'auras toujours le risque que sa arrive, d'autant plus si tu tiens ce genre de discours ....
Un proverbe que j'affectionne dit : "La ou un developpeur se dit que personne n'ira chercher, quelqu'un quelque part dans le monde cherchera et trouvera"

---

"[...](Noubliez pas que c'est une premiere version mais elle a l'avantage de fonctionner parfaitement)."

Premiere version ?

"Cette classe permet de faire des requete sans les ecrire .
Je l'ai crée en 4 émé année a l'esgi.
Depuis je l'utilise et l'ameliore de temps a autres."

Y a pas eu de mises a jour depuis ? tiens c'est pas ce que je lis...

"[...]des normes qui ne sont pas l essenciel[...]"

Mouarf ! Entierement d'accord ! D'ailleurs maintenant, toutes les normes qui me gonflent, je vais les prendre pour des "normes pas essentielles", sa va me simplifier la vie je pense....

"Je vous trouve un peu gonflés les gars[...]"
Il est vrai qu'il peut regner une certaine mauvaise foi sur CS de temps en temps mais la, pas de chance c'est pas le cas ...

---

"Pour faire simple et conclure
Il n'y a pas que la securité
il y a aussi les performances et la clareté et la maintenance future du code.
Certaines choses que vous dites sont justes mais ne sont a mon sens pas adaptés a des projets de pme."

C'est un debat, certes. Tout de meme, l'argument qui ne m'aurait pas trop fait reagir et avec lequel j'aurais sans doute ete plus ou moins d'accord, sa aurait ete de dire "Certaines choses que vous dites sont justes mais ne sont a mon sens pas adaptés a des projets personnels". A partir du moment ou tu rentre dans le domaine proffessionnel/entreprise, je pense quil faut faire un effort (et pas seulement) de ce cote la (toujours un point de vue personnel mais je ne pense pas etre le seul de cet avis), surtout sur des failles aussi banalisees que celles la (suffit de voir le nombre de tutos dispo sur google expliquant comment exploiter des requetes sql). Un simple mysql_real_escape_string() comme l'a judicieusement propose Malalam suffirait deja a avoir un bon niveau de protection. Notre cher Kankrelune n'etant pas venu (pour le moment j'imagine) je ne peut que te donner son eternel conseil : http://www.phpsecure.info/v2/zone/pArticle ;-)

---

"Si tu veut vraiment qq chose de securisé n utilise pas mysql pour commencer."
développes donc cette affirmation, ça va en faire rire beaucoup.

:-) :-) :-) :-)

---

"pour moi pour faire simple, si on met un code source ici, c'est pour qu'il soit vu et commenté.
Si on n'accepte pas les commentaires, c'est simple on garde son code bien au chaud sur son ordinateur... [...] Il est peut etre vrai que certains commentaires sont sans détour (ex le coté sécurité) et il faut les accepter. Le coté sécurité est bien la derniere chose à laquelle on pense quand on est débutant (comment penser à sécuriser un truc quand on ne sait meme pas encore ce qu'on fait), et des discutions la dessus sont très interessante. tout rejeter juste en disant en gors "la sécurité je m'en fou, je laisse ca à ceux qui utilise mon code" c'est pas très constructeur comme remarque."

C'est rafraichissant comme remarque et cela viens d'une personne qui fait preuve d'humilite, a prendre en exemple.

"<?xml indique qu'il y a un type de code XML apres.
<?php indique qu'il ya un type de code PHP apres.
(on me reprendra si je me trompe)"

Non non, c'est bien sa ;-)
Encore une fois => http://www.apprendre-php.com/tutoriels/tutoriel-3-pourquoi-il-est-deconseille-d-utiliser-les-balises-courtes-short-tags.html

---

"moi je laisse le or die... si t'as bien debuge alors ils ne se verront pas, et si t'as pas bien programme, supprimer un or die en cas d'erreur provoque souvent une farandole de notices et peut inserrer des lignes foireuses dans la base de donnee"

Je prefere gere les retours de mes fonctions et demarre mes script avec un error_reporting(0) mais je crois que c'est plus une question de gout.

Bah allez, j'arrete la. J'espere juste que cela t'aura permis de comprendre comment fonctionne CS. Il y a beau avoir plus de 800 000 membres (bientot le million hehe), il a des utilisateurs chevrones qui apportent leurs temps et leurs contribution a la communaute, qui permettent que cela ne soit pas un espace trop anonyme (tu remarqueras qu'il y a souvent les memes membres qui repondent sur les sources et le forum) c'est une chance d'avoir autant de talent pour s'aider a progresser (meme si on est en ecole d'inge, tu serais surpris de voir le nombre de membres faisant parties de ces ecoles et venir demander de l'aide), ne le perd jamais de vue, surtout lorsque tu t'appretes a faire une remarque desobligeante a l'un d'entre eux.


J'en ai peut etre trop rajoute ou fait trop de zel, desole et merci a ceux qui auront la patience de lire mon post :-)

@++
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
5 mars 2007 à 18:49
Savon => je comptais commenter encore un peu, mais ça n'en vaut pas la peine. Le message d'Emilia est suffisemment clair je pense.
Quand je critique/commente/encense un code, c'est pour son auteur, et pour les éventuels lecteurs. Pour apporter ma pierre à l'édifice, dire ce que je pense, là où je vois des améliorations, là où je vois de grosses erreurs.
Si l'auteur prend la mouche après ça, très sincèrement, tant pis pour lui. Ce n'est pas en se vexant quand on nous critique, et en pensant, au fond, même si on ne se l'avoue pas : "mais qui c'est ce blaireau qui croit être meilleur que moi", que l'on progresse.
Mais tant pis.
Par contre, relis bien le message d'Emilia, car elle y dit quelque chose d'essentiel à comprendre quand on pense/veut laisser une participation à la communauté PHP. On le fait pour les autres, pas pour se faire mousser...on le fait pour aider, faciliter le travail des autres...donc, on le fait bien.
Ton code ne marche pas du tout sur mon serveur, pour info. Du tout.
Ce n'est pas ce que j'appelle ..."(Noubliez pas que c'est une premiere version mais elle a l'avantage de fonctionner parfaitement)."... fonctionner parfaitement.
Un simple <?php, déjà, pour les autres, pas pour toi, aurait permis à cette partie du code d'être portable sur tous les serveurs. Rappel : <?php fonctionne sur TOUS les serveur. <? non.
C'est con, mais juste faire ça, faire attention à ces détails, cela montre que le codeur est consciencieux et pense réellement aux utilisateurs.
Pareil pour la sécurisation...ou l'optimisation (select * à tout va), etc...
Et si on n'y parvient pas du 1er coup, où qu'on a pas pensé à tout...au moins, on écoute ce que ceux qui ont pris la peine de ragerder ton code, de le lire, le décrypter, le tester...ont à dire.

Bref.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
5 mars 2007 à 11:48
moi je laisse le or die... si t'as bien debuge alors ils ne se verront pas, et si t'as pas bien programme, supprimer un or die en cas d'erreur provoque souvent une farandole de notices et peut inserrer des lignes foireuses dans la base de donnee
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
5 mars 2007 à 11:00
Pour faire simple et conclure
Il n'y a pas que la securité
-> c'est un des truc les plus important voir le plus

il y a aussi les performances et la clareté et la maintenance future du code.
-> tout a fait OK

Certaines choses que vous dites sont justes mais ne sont a mon sens pas adaptés a des projets de pme.
-> je n'utiliserai pas ton code en PME, ni meme personellement, ton code est incomplet pour la gestion de requete complexe
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
5 mars 2007 à 09:45
Pourquoi laisser le or die? evidament on les vire quand on les met en prod mais lors du dev quand ca marche pas j aime bien savoir pourquoi.

-> Pourquoi ne pas le faire directement, ca peut etre vite oublié d'enlever le "or die()"

Pour ta gouverne garfield
qui pense etre le meilleur
--> J'ai jamais dis ca

un enum c'est une enumeration de valeur situé coté SGBDR cela est utile lors de select par exemple.Les recuperer permet d'avoir un liste d'enum genéré directement ainsi tu ne touche pas a ton code (enfin sache que google est ton ami c'est au programme justement de 1ere année de bts)
-> je sais ce qu'est enum, je me demandais juste l'utilité d'une fonction dont tu ne montres pas a quoi elle sert

-> concernent mon code, il y a un fil de discussion, il sert a ca. donc je répondrai au question/attaque sur mon code et non ici
cs_emilia123 Messages postés 122 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 5 janvier 2009
5 mars 2007 à 08:14
bonjour,

pour moi pour faire simple, si on met un code source ici, c'est pour qu'il soit vu et commenté.
Si on n'accepte pas les commentaires, c'est simple on garde son code bien au chaud sur son ordinateur... je suis directe mais je vais commenter.

Beaucoup d'utilisateurs sont, comme moi, débutant(e) et utilise les codes et commentaires pour évoluer.
Si les commentaires sont juste "hé avant de me critiqué tu as vu ce que tu as fait c'est de la ...." ca ne permet pas vraiment d'évoluer.
Il est peut etre vrai que certains commentaires sont sans détour (ex le coté sécurité) et il faut les accepter.
Le coté sécurité est bien la derniere chose à laquelle on pense quand on est débutant (comment penser à sécuriser un truc quand on ne sait meme pas encore ce qu'on fait), et des discutions la dessus sont très interessante. tout rejeter juste en disant en gors "la sécurité je m'en fou, je laisse ca à ceux qui utilise mon code" c'est pas très constructeur comme remarque.
pareil pour l'utilisation des "<?" et "<?php". Ok pour les débutants ca ne fait aucune différence mais si tous ceux qui ont l'expérience du travail disent qu'il faut utiliser "<?php" je pense qu'on peux leur les croire surtout quand c'est argumenté.
Je schématise (débutante inside) mais en gros le sens premier de <? n'est pas de dire que c'est du php, mais de dire qu'il y a un code/language derriere.
<?xml indique qu'il y a un type de code XML apres.
<?php indique qu'il ya un type de code PHP apres.
(on me reprendra si je me trompe)
Laisser la charge aux utilisateurs du script de modifier ce qui ne marche pas est rebutant pour les débutants.
Et enfin sur le "or die", j'aurais une question... qu'est ce qui se passe lors d'une erreur sur l'insertion?
en période de DEV ca s'arrete et en période de Prod ca continu et rien n'est indiqué à la fonction appelante qu'il y a eu une erreur.
l'idéal serait de renvoyer un code d'erreur comme cela la fonction appelante peut vérifier si ton retour ==='false' par exemple et traiter le cas d'erreur d'insertion, mettre son propre message etc, ce qui est impossible avec un "die" mis en commentaire.

Voila j'espere que mes remarques ne t'ont pas froissé, sinon je m'en excuse et je ne recommencerais plus,promis.

A bientot

Em
cs_savon Messages postés 21 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 19 mars 2007
4 mars 2007 à 23:50
Pour faire simple et conclure
Il n'y a pas que la securité
il y a aussi les performances et la clareté et la maintenance future du code.
Certaines choses que vous dites sont justes mais ne sont a mon sens pas adaptés a des projets de pme.
cs_savon Messages postés 21 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 19 mars 2007
4 mars 2007 à 23:36
Je vous trouve un peu gonflés les gars
Venir me critiquer sur des normes qui ne sont pas l essenciel (Noubliez pas que c'est une premiere version mais elle a l'avantage de fonctionner parfaitement).
Maintenant vous voulez la securiser allé y J'ajouterai vos modifs si pertinantes.

Pourquoi laisser le or die? evidament on les vire quand on les met en prod mais lors du dev quand ca marche pas j aime bien savoir pourquoi.


Pour ta gouverne garfield
qui pense etre le meilleur un enum c'est une enumeration de valeur situé coté SGBDR cela est utile lors de select par exemple.Les recuperer permet d'avoir un liste d'enum genéré directement ainsi tu ne touche pas a ton code (enfin sache que google est ton ami c'est au programme justement de 1ere année de bts)

"PS : en php4, le constructeur s'appele comme ta classe sinon en php5 c'est __construct (c'est juste pour info)"

Ici c'est du php4 et cela n'est pas indispensable(Ma je le changerai promi ca t a raison).


"je te trouve inbu de toi (peut etre est ce du au fait que tu fasses une école d'ingé)"
Et franchement quand on vois ce que tu developpe moi chui pas jaloux
Pour ta gouvenerne dans ton code "FONCTION RECURSIVE DE RECHERCHE "
/*
case -4 :
$message = 'répertoire inexistant';
break;
case -3 :
$message = '2nd paramètre incorrect';
break;
case -2 :
$message = '1er parametre incorrect';
break;
case -1 :
$message = 'aucune image dans les répertoires parcourus';
break;
default :
*/
Les variables statiques ca existe et ca c Imaintenancable en plus ca te permettrai de rendre ton code plus comprensible et eviter les commentaire superflux.
Et puis si tu veut jouer a ta oublié un truc je profite de la faille pour faire genre chui plus inteligent
Ton code :
// permet de vérifier si les résultats sont ceux attendus a décommenter pour vérifier
// print_r( $tabFile );
Donc je vois pas ce que tu reproche a mes or die tu les vire pareil ou est le probleme?

<? <?php personne n'est parfait et l exemple n utilise pas le xml MAIS il ne tien qu a vous de le changer

Non ca marche c'est pas le tout. mais c'est un premiere etape apres tu vois les optimisations oserai tu dire le contraire?

"concernant mysql, tu préfères quoi :
sqlserver, oracle, postgreSQL, SQLite chacun a ces avantages et inconvenients, étaye un peu ton discours."

Chaque SGBDR doit etre adapté a son utilisation c'est tout ils sont tous bien dans leur contexte.
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
1 mars 2007 à 18:52
je te trouve inbu de toi (peut etre est ce du au fait que tu fasses une école d'ingé)

# function UpdateTable($values,$idToUpdate,$fieldIdName) {
# $query = " UPDATE $this->table SET ";

$values n'est pas forcement un tableau de type key=>$value (a vérifier bien sur)

# foreach ($values as $fieldName => $fieldValue){
# $query .= $fieldName.'='."'".$fieldValue."'".',' ;
# }
la je ferai, après vérif
$subQuery = array();
foreach ($values as $fieldName => $fieldValue){
if ( is_numeric($fieldvalue) ){
$subQuery[] = $fieldName.'='.$fieldValue ;
}else{
// faire attention au magic_quote et que la connexion a MySQL est bien faite
$subQuery[] = $fieldName.'=\''.mysql_real_escape_string($fieldValue).'\'' ;
}

}

# $query = substr("$query", 0, -1); //J'enleve la derniere virgule
inutiles si tu utilises les tableaux, la on ferai :
$query .= implode(',', $subQuery);

# $query ." WHERE ". $fieldIdName . " " . $idToUpdate;

tu limites tes updates au cas ou champ = numeric ( tu prends pas en compte les cas de figures ou le champs est une chaine de caracteres) et ni les cas ou tu veux utiliser un autres opérateur


# $retour =mysql_query($query) or die("L'update a echoué.");

évites les or die() => mauvaises gestions des erreurs
donne un code erreur et/ou la signification de l'erreur (ca permet de débugguer plus facilement, et de ne pas arreter le code pour une raison non valable).

# return $retour;
inutile car dans ton code soit ca te retourne true, soit ca n'arrive jamais jusque là, un return true aurais été equivalent

# }

A quoi sert la propriété base ?

au niveau des noms du codage a proprement parlé.
utilisation du francais et de l'anglais dans le meme source, perso ca me choque , pas propre

Peux tu me dire a quoi sert enumGet, pour moi pas a grand chose.
Peux tu me dire a quoi sert GetChampsbyTable, tu pourrais t'en servir pour vérifier que les champs que tu utilises lors de la génération d'une requete existes dans la table.

Tu as plein de méthode qui te retourne une requete, pourquoi ne pas retourne les resultats ?

Pour moi, c'est un travail de 1ere année de BTS/IUT ou un boulot de newbie en dev.

Ferais tu parti des gens qui disent que t'en que ca marche, c'est bon.
pour que ta classe fonctionne sur mon serveur, je dois modifier la config via htaccess ou via la le VHOST, chose que je m'interdis (porte ouverte a pas mal de connerie).

un simple <?php en place de <? m'éviterai de faire cela.
=> ne me dis pas que c'est a moi de le faire, tu fournis un source a la population, fait qu'il soit utilisable en l'état pour la majorité des utilisateurs (newbie et/ou confirmé)

concernant mysql, tu préfères quoi :
sqlserver, oracle, postgreSQL, SQLite chacun a ces avantages et inconvenients, étaye un peu ton discours.

PS : en php4, le constructeur s'appele comme ta classe sinon en php5 c'est __construct (c'est juste pour info)
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
1 mars 2007 à 18:12
Savon =>
"Le BUT de cette classe est de SIMPLIFIER L'access au données et non pas de la compliquer."
Et ? Ca complique quoi d'ajouter des paramètres optionnels à ta méthode ? Quitte à utiliser un select * si tu n'as pas de noms de colonnes demandés ?

"Les données sont protegés au niveau d un utilisation classique et pas pour le serveur de la NSA"
Non. Que ce soit pour un serveur de la NSA ou pour un serveur perso. Tu ne protèges pas du tout les données insérées dans les tables.
"Je te rapelle que le php est executé du coté serveur."
Et ? Quel rapport ?
"Si tu veut vraiment qq chose de securisé n utilise pas mysql pour commencer."
développes donc cette affirmation, ça va en faire rire beaucoup.

"C'est une methode simple pour remplcer les requetes classique."
J'essaye juste de mettre le doigt sur les faiblesses de ton code afin que tu aies des idées pour l'améliorer. Si tu le prends mal, c'est ton problème. Je dis quand même que, en tant que responsable de dév dans une boîte, je ne laisserai jamais mes développeurs utiliser ton code pour les raisons que j'ai citées (entre autres). Libre aux autres utilisateurs de lire mes arguments, les tiens, et de faire leur choix.

Au passage :
"reponse a webdeb <?php et <? c'est typiquement la meme chose"
Encore non. Pas tout à fait.
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
1 mars 2007 à 16:02
Rudy3212 Messages postés 154 Date d'inscription vendredi 20 août 2004 Statut Membre Dernière intervention 31 décembre 2007
1 mars 2007 à 13:27
<? & <?php veut dire la même chose

mais sur certain serveur suivant la configuration de php le <? ne marche pas. Donc il vaut mieux mettre toujours <?php
cs_nuns Messages postés 87 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 23 juillet 2009
1 mars 2007 à 13:06
une question toute bete c'est quoi la différence entre <? et <?php
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 mars 2007 à 12:28
savon, ton script n'est pas compatible php6 avec <? et pas portable sur tout les serveurs, de plus, on peut le confondre avec un xml....
cs_savon Messages postés 21 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 19 mars 2007
1 mars 2007 à 11:49
reponse a webdeb <?php et <? c'est typiquement la meme chose
cs_savon Messages postés 21 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 19 mars 2007
1 mars 2007 à 11:47
Reponse a Malalam
Effectivement j ai laissé ces 2 variables car ma prochaine version gerera la connexion.
Les select * effectivement c moyen en terme de perfomance mais cela simplifie l'utilisation
car sinon il faudrau passer en parametre le nom de tout les champs et la c relou.
Le BUT de cette classe est de SIMPLIFIER L'access au données et non pas de la compliquer.

Quand a les données ne sont pas protegés ?!??
Les données sont protegés au niveau d un utilisation classique et pas pour le serveur de la NSA
Je te rapelle que le php est executé du coté serveur.
Si tu veut vraiment qq chose de securisé n utilise pas mysql pour commencer.

C'est une methode simple pour remplcer les requetes classique.
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
1 mars 2007 à 11:08
J'ajouterai que les bonnes balises PHP c'est <?php et non <?
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
1 mars 2007 à 09:44
Etant donné que tu ne te bases que sur mysql, il faut faire un mysql_real_escape_string () pour protéger les données.
cs_nuns Messages postés 87 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 23 juillet 2009
1 mars 2007 à 08:21
Hello malalam,

J'aime bien tes commentaires. j'aurais juste une toute petite question, quand tu parle que les données ne sont pas protégées du tout,! tu pourrais juste me dire ce qu'il faut faire pour que les donnée le soit ? les petit contrôle qui pourront garder un code protégé ?

Merci.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 févr. 2007 à 19:27
Hello,

je la trouve bizarre ta classe.
Déjà, on a un set_param qui oblige à réinitialiser la connexion avec la table.
Ensuite, la table...en propriété membre ? Pourquoi ? La réponse est dans ton code : parce uq'il ne permet pas de recherche un minimum complexe, avec plusieurs tables, avec des jointures etc.
Tu passes par des SELECT *, ce qui, non seulement est un problème d'optimisation, mais en plus oblige ton utilisateur à récupérer tous les champs même s'il ne le veut pas.
Un autre truc qui me gène, c'est l'absence de structuration et par là, de vérifications. Si on n'initialise pas la connexion...ta classe essaye quand même d'utiliser sa propriété membre avec une valeur nulle.
Et le plus dangereux : tes écritures dans la base. Les données ne sont pas protégées du tout.

Une classe plus intéressante selon moi aurait été de proposer un langage naturel, plutôt que ça, par exemple.
Rejoignez-nous