Dans l'esprit de mes autres questions concernant "les erreurs de programmation communes ... pour éviter" p>
Quelles sont les erreurs de programmation courantes pour un programmeur de coldfusion à éviter? P>
9 Réponses :
Utilisation inappropriée de # p>
Sélectionnez * P>
ne pas nettoyer les entrées URL / formulaire P>
Débogage sur l'environnement de production (même si la sortie est supprimée) p>
SET non oublié d'ajouter une sortie = false sur les méthodes CFC p> li>
n'utilise pas pas de variables non si évidentes telles que le nom cfquery ou l'index de boucle dans une méthode p> li>
Utilisez oublié à Utilisez trust Attendez-vous à une comparaison de chaîne sensible à la casse (IS et EQ Les opérateurs sont insensibles de cas) p> li>
Envoi de chaînes "Oui" ou "Non" à ne pas mettre des services singletons dans la portée de l'application p> li>
Créez aveuglément autant de CFC comme on veut comme on veut faire en Java P> Li>
Mettre la valeur complexe / objet dans une liste (Impossible, la liste n'est qu'une chaîne de valeurs séparées par des virgules) p> li>
Ecrire des fonctions qui prend une array comme un argument et modifie que la matrice s'attend à ce que la matrice soit modifiée (tableau dans la CFML est transmis par valeur) P> li>
changements aveuglély Utilisez beaucoup de writeOutput () dans cfscript lorsque CFML est plus approprié p> li>
utilise aveuglément utilise aveuglément mettre à jour un certain code dans OnApplicationStart () et ne pas voir la différence sur Actualiser (redémarrer l'application!) p> li>
Chemin absolu de codage de code papier lorsque oublié d'activer le support Unicode dans DSN (Unicode devient "" ???? ') P> Li>
ne pas passer à la dernière JRE et les Hotfixes P> LI>
Muve de la portée du client et faire sauter le registre Windows ... P> Li>
utilise des fonctions / fonctionnalités obsolètes / fonctionnalités (c'est-à-dire Formulaire Flash AKA Flex 1.x Alpha, CFTABLE, VERITY Texte complet de texte, etc.) P> LI>
Passer ne lisez pas Les meilleures pratiques CFC de Coldbox Wiki. p> li>
L'achat dans la mentalité de .asp (x) ou .jsp ou [insérer la technologie Web] est toujours meilleur ..) p> li>
ne pas utiliser
issatruc () code> avant
isObject () code> dans une série de
htmleditformat () code> Lors de l'affichage du contenu généré par l'utilisateur (XSS) p> li>
urlencodedformat () code> URL définie par l'utilisateur p> li>
isdate () code> trop (tout numéro retournerait vrai) p> li>
Serializejson () Code> Sans Ajout d'un espacement pour préserver la chaîne (sinon
Serializejson () CODE> ou
DESERIALIZON () CODE> les traduira par "TRUE" et "FALSE") P> LI>
Access = "Remote" code> sur une méthode et attendez-vous à fonctionner (lorsque la proxy distante est généralement plus appropriée) P> LI>
isdefinefinine () code> lorsque
structure de structure () code> peut généralement le faire plus efficacement p> l>
iif () code> et
de () code> sans savoir qu'ils sont aussi méchants que l'évaluation () p> p> l>
extpath () code> est généralement meilleur p> li>
cfcatch code> à une fonction de type d'argument
struct code> (
cfcatch code> se comporte comme un
struct code>, Mais ce n'est pas le cas. Il suffit de le transmettre comme tapez '
n'importe quel code>'). p> li>
precisionevaluat () code> et obtenir toutes sortes d'erreur de point flottant d'arrondi, en particulier lors du calcul de l'argent. P> Li>
ul>
@HENRY - C'est une liste tout à fait de mon homme! Merci.
Toujours penser à quoi ajouter sur la liste ... :)
@HENRY: Petit typo - c'est htmleditformat () code>. (Une des raisons de la véracité des vulnérabilités XSS est que les noms de fonctions d'évasion HTML sont tellement verbeux partout:
htmlspecialchars () code>,
server.htmlencode () code>, vous le nommez. Habituellement Je fais une fonction d'emballage pour
htmleditformat () code> et appelez ce
h () code>, ce qui est très pratique. Avec un wrapper pour UrlenCodedFormat appelé
u () code>.)
Oh, et +1. Très belle compilation de choses pour se tromper dans cf.
Je vois toujours cela dans le code hérité: exécuter ("formulaire # i #") au lieu de former ['compté # i #'].
J'espère que cela ne vous dérange pas que j'ai ajouté l'espacement et édité une orthographe, une excellente liste!
@éthyreal, pourquoi je voudrais dire? :) Merci d'être modifié. J'ai aussi ajouté 2 points supplémentaires sur le post.
Attaques d'injection SQL . Il semble que CFQUERY est simplement fabriqué pour leur permettre. Vous devriez donc utiliser CFQUERYPARAMS . P>
Je ne peux pas contrainter fortement la manière dont les bonsparyparams sont: cfqueryparam arrêtera l'injection SQL - le serveur SQL n'exécutera jamais la valeur passée via cfqueryparam
Dans ColdFusion, toutes les variables sont globales par défaut, à moins qu'elles ne soient déclarées avec le mot-clé Vous devez donc vous rappeler Il n'y a rien Magie sur le nom Notez que la situation est un TAD différent pour les CFCS: dans CFCS , les variables var code>. (Un peu similaire à la situation dans JavaScript.)
cfquery code>
nom code> ou vous pouvez simplement utiliser ce truc: p>
local code>, c'est juste une convention. Bien que Coldfusion 9 ajoutera un local explicatif Portée , donc si vous utilisez
local code>, il facilitera probablement la mise à niveau vers CF9 lorsque le moment est venu. P>
code> la portée (la portée par défaut ") ne sont pas globales comme si elles sont destinées à des fonctions normales mais existent plutôt par exemple de votre CFC. Ainsi, alors que vous oubliez d'utiliser
var code> n'est pas aussi dangereux dans un CFC, car il se trouve dans une fonction de haut niveau, la meilleure pratique est toujours d'utiliser
var code> tout le temps. p> p>
"Pas tout aussi dangereux"? Il est encore assez dangereux car le code n'est pas très sûr.
Eh bien, oui, c'est toujours le mal et vous ne devriez jamais le faire, mais les problèmes seront limités à ce CFC, au lieu d'affecter potentiellement une page de fonctionnement de niveau supérieur ou .CFM dans votre application CF.
Surutilisation de la "requête de requête". C'est-à-dire que le filtrage ou le tri des résultats de la requête en utilisant la balise CFQUERY. p>
Ce type de travail est souvent mieux fait par la base de données elle-même, en particulier si l'ensemble de données est grand. P>
voler sans vergogénéiment Mise en forme de Henry ... em> p>
"Ne pas chaîner une série de blocs
L'une des plus grandes erreurs n'utiliserait pas cfqueryparam
très mauvais: p> très bon: p>
Mettre des variables dans la mauvaise portée; Même si vous ne faites pas sauter le registre ou sur le serveur, il est facile de drainer lentement les performances de votre application en cogning les variables jusqu'à la portée la plus élevée dans laquelle vous pensez avoir besoin d'eux ou de perdre des informations parce que vous l'avez stockée une portée et essayé d'y accéder dans une autre portée. p>
Utilisation de Utilisation de avec accès administrateur: p>
CFCatch code> sans capturer et / ou transmettre des informations sur l'erreur afin qu'elle puisse être trouvée et corrigée. (Il est difficile de trouver une erreur qui ne vous dit pas qu'elle s'est produite.) P>
ListContains () CODE> Quand vous souhaitez
listfind () code>. Surtout si la liste contient des chiffres.
listfind () code> ne correspond que d'un élément entier dans une liste;
listContains () code> correspond à une partie d'un élément. (Oui, nous avons fait cette erreur une fois.) P>
Ne pas empêcher les utilisateurs de voir des erreurs de ColdFusion.
Ajouter une méthode onerror à une application de niveau supérieur.cfc Pour empêcher les utilisateurs de voir ces messages de députage détaillés exposant vos travaux intérieurs (et défaillances). P>
<cffunction name="onError" returntype="void" output="true"> <cfargument name="exception" type="any" required="true" /> <cfargument name="eventname" type="string" required="true" />
Demander des questions trop larges à ce sujet. ;)
Questions amusantes ... questions informatives ... pas seulement trop large! Certaines de ces questions "erreurs" obtiennent de bonnes réponses! Bonne lecture.
@Greg Beech +1 - Bien que je dois admettre que j'ai programmé avec ColdFusion de CF 3 à 6,1 ... Une fois qu'une personne trouve une langue / plate-forme comme C # et .net, il est très difficile de maintenir l'intérêt dans le monde de Coldfusion. Mais en regardant en arrière, il faut admettre que ColdFusion 2.0 offrait aux développeurs classiques ASP Qu'est-ce que .Net n'a pu offrir que plusieurs années plus tard. J'irais si loin de dire que Asp.net était grandement inspiré par Coldfusion de la même manière que c # a été inspiré par Java.
Drôle comme la même question exacte est révélée et fermée car la plate-forme n'est pas populaire. Le thread "des erreurs javascript communs" (juste en dessous de ce guichet automatique) a plusieurs upvotes.
Je parierais que le nombre de bowvotes a été généré par des personnes qui n'ont jamais entendu parler de Coldfusion ou n'ont jamais utilisé de froid. Très probablement étant évité non plus parce que c'est une froide, mais parce que j'ai posté plusieurs de ces questions aujourd'hui ... et les "pureistes" en ont assez de ce type de question. Pas de soucis!
... ou n'aime tout simplement pas que les gens jouent le système REP.
Alors, demandez à une bonne question est acceptable ... mais demandez 5 différentes bien que de bonnes questions dans la même veine que la première bonne question n'est pas? Trop drôle.
@ADEWREW - Si vous avez présenté ces questions, wiki de la communauté, vous n'auriez pas tant de flak. Comme c'est le cas, vous ne les faites que cw après que beaucoup de gens l'appellent et que vous choisissez essentiellement chaque langue que vous pouvez trouver et écrire une copie de la question populaire. C'est une agriculture de représentant, pure et simple. On dirait que vous avez même cessé de les changer en CW maintenant aussi.
J'ai seulement posé des questions concernant les langues / sujets que je suis intéressé. Je n'ai pas posé de question concernant Perl, XAML, HTML, LINGO, LISP, etc. Mais cela aurait pu. Merci pour votre dévouement. Cela a rendu ma journée agréable! : P
@zombat - j'ai fait cela un cw juste pour vous!
J'ai révoqué ma défense antérieure de ce fil après avoir remarqué combien d'entre eux sont ...
Je n'obtiens jamais bien ce que cw est utilisé pour
CW est utilisé pour réduire les gémissements des personnes qui souhaitent avoir pensé à demander une question à une question de reproduction. ;)
@zombat appelle l'acte de poser une bonne question, qui attire beaucoup de gens à réagir et à vérifier la question, "agriculture de représentants". J'aime ce terme si cela est censé être péjoratif ou non. Et si demande de nombreuses bonnes questions gagnant la question de la réputation du propriétaire de la question est une agriculture de représentant ... alors par tous les moyens appelle-moi un "représentant" agriculteur "!!! J'aime poser des questions et répondre aux questions. C'est amusant de voir toute l'interactivité créée par elle.
@ Peter Boughton: Non, il doit être utilisé lorsqu'il n'y a pas de réponse correcte pour une question (comme celle-ci). La FAQ a plus d'informations
Il y a toujours le potentiel d'une seule réponse correcte - même des questions qui sont un vote perpétuel peut avoir un résumé des réponses que la réponse acceptée. Bien sûr, l'absence de représentant de CW aide aux questions fondées sur le vote afin que la première personne de fournir une réponse commune ne reçoit pas de représentant indéterminé. Mais sinon c'est juste une solution de contournement pour quand il y a plusieurs contributeurs (à une question ou i> réponse), supprimez la complexité du calcul de la valeur des modifications et de la division du représentant.
Pour une question comme celle-ci, Henry mérite la réputation de relever la question et de la compilation d'une réponse complète longue.
Andrew Siemer a posé la question de la question. Le nom de Henry apparaît juste parce qu'il l'a modifiée.