Jeté comme un entier dans ColdFusion; désinfection des variables
Je suis rouillé en ColdFusion, j'ai été utilisé pour PHP depuis si longtemps. Ce que je veux faire, c'est quelque chose comme ceci:
<?php
$id = (isset($_GET['id'])) ? (int)$_GET['id'] : 0;
?>
Fondamentalement, vérifier un paramètre de l'url appelée id
et, s'il existe, assurez-vous que c'est un entier, donc je peux l'utiliser en toute sécurité dans les requêtes de base de données. S'il finit par zéro, c'est bien trop.
J'ai:
<cfscript>
if (IsDefined("URL.id") AND IsNumeric(URL.id)) {
id = int(URL.id);
} else {
id = 0;
}
</cfscript>
Cela fonctionne, mais il est très salissant. Est-il une meilleure façon de le faire?
OriginalL'auteur artlung | 2010-08-12
Vous devez vous connecter pour publier un commentaire.
Je voudrais utiliser cfparam. Je voudrais aussi portée explicitement, mais ce n'est pas nécessaire. Je ne voudrais pas utiliser la fonction IIF (), car il rend l'utilisation de l'évaluer(), qui peut être problématique, je voudrais aussi éviter DE() pour la même raison. Dans ce cas, il ne sera pas un problème, mais je éviter le principe général, dans une situation où il n'est pas absolument nécessaire. J'ai été en utilisant des FC depuis quelques années maintenant, et il n'a pas été nécessaire encore.
OriginalL'auteur Anthony
Dernières versions de ColdFusion ont également un opérateur conditionnel ternaire:
?:
ne fonctionneront pas avant de CF8, aussiisNumeric(url.id)
peut être remplacé avec plus stricteisValid("integer", url.id)
.pour un cf8 version de ce ---- variables.id = 0; if (structKeyExists(url,"id) && isValid("integer",url.id)) variables.id = url.id;
OriginalL'auteur Rick O
Pour moi, la meilleure façon d'assurer votre variable est un entier est d'envelopper la variable en val().
Il tente d'analyser la chaîne et d'en extraire tout entier a conclu (au début de la chaîne). Si aucun n'est trouvé, il renvoie 0.
Voir http://cfquickdocs.com/cf8/#Val
OriginalL'auteur ale
Excuses pour élever un vieux thread mais est venu avec cette même question et a trouvé une solution simple qui peut aider les autres avec ce problème
Il y a aussi différents masques que vous pouvez spécifier dans les différents scénarios
ColdFusion Référence
http://help.adobe.com/livedocs/coldfusion/8/htmldocs/help.html?content=functions_m-r_08.html
NumberFormat
est vraiment conçu pour la présentation. Techniquement, il renvoie un string, pas un entier. Aussi, il déclenche une exception lorsqu'il est passé d'une valeur non numérique. Afin de ne pas satisfaire à toutes les exigences de la question d'origine, c'est à dire désinfecter la valeur (et de vérifier que la variable existe).OriginalL'auteur Jon L
Vous pouvez également regarder dans
cfparam
.url.id
et vous aurez le feu de l'exception, de la manipulation ressemble surcharge ici.Sergii, je comprends où vous venez, mais si c'est "mal", je pense que cela dépend. Si avoir un vide ou mal,
url.id
n'a, en fait, constituent une exception dans son application, je pense qu'il est juste de face en tant que tels (c'est à dire à l'intérieur d'un bloc try/catch, où il peut être connecté, manipulé, etc). "D'avaler" les exceptionnelles comportement spécifiquement de programmation pour elle conditionnellement œuvres, bien sûr, bien qu'il brouille la ligne entre une exception ainsi qu'une prévision de l'état de fonctionnement de l'application.OriginalL'auteur Ken Redler
Vous pouvez utiliser
IIF
. C'est cool.DE
: adobe.com/livedocs/coldfusion/7/htmldocs/wwhelp/wwhimpl/common/... Merci! Semble fonctionner bien!Je n'ai pas testé, mais IIF est largement considéré comme l'un de l'efficacité de l'évier.
Ce qui à mon avis est correct, veuillez dun oubliez pas de cocher mon poste en tant que droit de réponse. 🙂
Vous ne pouvez pas utiliser IIF dans cette instance. IIF évalue toutes les pièces à chaque fois. Cela signifie que si vous utilisez cette URL.L'Id n'existe pas, il lèvera une erreur d'essayer de traiter Int(URL.Id) dans la deuxième partie de l'IIF()
L'OMI, de l'IIF est l'un des plus illisible caractéristiques de CFML -- ce qui est suffisant pour éviter de l'utiliser.
OriginalL'auteur PPShein