|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité(e)
Messages : n/a ![]() |
Bonjour à tous,
J'ai besoin de conseils pour une fonction dans laquelle je fais plusieurs requêtes Mysql. Je ne trouve pas ma façon de faire très propre et voudrais avoir vos conseils pour faire quelque chose "dans les règles de l'art". Merci. Code :
|
||
00
|
|
|
#2 | ||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Hello
Déjà commence par aérer un peu, ça facilitera la lecture même pour toi (tu verra quand tu devra reprendre le code que tu as écrit il y a 6 mois par exemple). ça vaut également pour les commentaire. Pense surtout à ne pas dépasser les 140 caractères (affichage intégral sur 19 pouces - les puristes C vont te dire 80 caractère mais je trouve que c'est trop peu pour PHP), cela t'évitera d'avoir l'ascenseur vertical qui rends la lecture du code pénible. Premier point: je ne vois nulle part la sécurisation de tes requêtes SQL. Qu'est ce qu'il se passe dans ta fonction quand une requête échoue ? ça lance des warnings ? ça part en fatal error ? Ou pire: ça fait n'importe quoi ! Second point: tu mets des variables directement dans les requêtes. Ce n'est pas vraiment un problème si tu as le contrôle total de ces données, en revanche si elles arrivent de l'utilisateur, il vaut mieux les sécuriser pour éviter les injections. Cette sécurité contre les injection à été introduite par l'interface mysqli et reprise par PDO (que tout bon programmeur PHP se devrait d'utiliser sous peine d'être fouetté publiquement Troisième point: A aucun moment tu ne vérifie les retours de tes fonction, tu es à ce point sûr que tout marche comme sur des roulettes huilés dans le beurre ? Une légère vérification du retour de tes fonctions / méthodes serait de bon ton. Un exemple tout bête: Code :
Mais bon, ne dramatise pas, dans l'ensemble ton code est bien (surtout en comparaison de toutes les horreurs qu'on peut voir sur ce forum.) Donc pou résumer tout ça je dirais: blinde ton code et protèges-le !
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||
|
10
|
|
|
#3 | ||||||
|
Invité(e)
Messages : n/a ![]() |
Merci.
En fait, la fonction "select()" est est une méthode d'une autre classe. Les requêtes y sont préparées. Code :
Code :
Code :
|
||||||
00
|
|
|
#4 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Vu que je ne connais pas ton code en détail, je ne sais pas non plus ou ça coince; pars à la chasse aux erreurs, fait des traces un peut partout, utilise un débugger (www.xdebug.org).
C'est quel genre de problème pour commencer ? Un problème de logique ? La méthode ne renvoie pas les bons résultats ? Il y a une erreur fatale ? Jannet Jackson sors un nouveau disque ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
10
|
|
|
#5 | |||
|
Membre chevronné
![]() Inscription : juin 2004 Messages : 747 ![]() |
Citation:
De plus, utiliser des requêtes préparées, c'est bien, mais l'intérêt est réel pour des requêtes exécutées en boucle dans un script avec des valeurs changeantes. Dans ton cas elle ne sert à rien et ne te protège même pas des injections SQL. Continue sur PDO, c'est effectivement une bonne pratique, et renseigne toi sur les requêtes préparées, comment et pourquoi les utiliser. Idem pour la protection contre les injections !
__________________
|
|||
|
10
|
|
|
#6 | |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Citation:
Les requêtes préparées sont surtout utile car elles permettent de ne pas avoir à construire manuellement les requêtes, s'en servir comme tu le fais n'est pas correct. En revanche, si les requêtes préparées le protège des attaques par injection, elles ne protègent pas les XSS, prudence donc.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
|
01
|
|
|
#7 | |||
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
Citation:
faire ca me semble plus logique, même si je vois pas pourquoi tu récupères qu'un seul résultat : Code :
__________________
http://blog.stealth35.com/ |
|||
|
|
10
|
|
|
#8 |
|
Membre chevronné
![]() Inscription : juin 2004 Messages : 747 ![]() |
PDO sans requête préparée ne dispense pas d'échapper les données extérieures, si ?
Personnellement je n'utilise pas systématiquement les preparedStatement comme je l'ai expliqué plus haut. L'exemple de phpdeveloppeur montre bien qu'une requête préparée sans séparer les paramètres de la requête ne protège pas non plus des injections...
__________________
|
|
00
|
|
|
#9 | |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
Citation:
__________________
http://blog.stealth35.com/ |
|
|
|
20
|
|
|
#10 |
|
Membre chevronné
![]() Inscription : juin 2004 Messages : 747 ![]() |
ok merci, je vais pouvoir me passer de charger mon extension mysql du coup
__________________
|
|
00
|
|
|
#11 | ||
|
Invité(e)
Messages : n/a ![]() |
Voilà la fonction select() modifiée. Par contre, quote() me pose un tas de problèmes, je l'ai donc mis en commentaire.
Si le tableau contient un 'int', la requête me renvoi un mauvais résultat. Si le tableau contient un 'string', la requête ne fonctionne pas. Code :
J'attaque le problème du quote(). |
||
00
|
|
|
#12 | ||
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
y'a pas besoin de faire de quote, si les paramètres sont dans la requête préparé
Code :
__________________
http://blog.stealth35.com/ |
||
|
|
10
|
|
|
#13 | ||
|
Invité(e)
Messages : n/a ![]() |
Merci beaucoup !
Sinon, dans cette fonction, est-ce que cela pourrait être mieux ? J'aimerais coder mes fonctions proprement dès maintenant plutôt qu'à la fin de mon projet... Code :
|
||
00
|
|
|
#14 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
t'es plus sous PDO ?
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#15 |
|
Invité(e)
Messages : n/a ![]() |
Je suis toujours sous PDO, pourquoi ?
|
00
|
|
|
#16 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
non non c'est moi c'est le "select2" qui ma perturbé
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#17 |
|
Invité(e)
Messages : n/a ![]() |
lol c'est vrai que j'aurais pu choisir un autre nom.
|
00
|
Copyright © 2000-2012 - www.developpez.com