2010-11-02 7 views
1

Je ne suis pas sûr si REFind fonctionne correctement. Essentiellement, j'essaie de déterminer si une chaîne commence par un certain nom. J'effectue certaines actions, mais je ne sais pas si je peux utiliser REFind dans un sens conditionnel. Mon code est ci-dessous, et il devrait retourner au moins 2 résultats réussis.REFind ne fonctionne pas correctement

<cfloop list="#form.fieldnames#" index="field"> 
<cfif REFind("^xtra_" & i, field)> 
    <cfset recipient = ArrayNew(1)> 
    <cfset ArrayAppend(recipient, evaluate("xtra_#LOCAL.sanity.id[LOCAL.i]#_email-#i#"))> 
    <cfset ArrayAppend(recipient, evaluate("xtra_#LOCAL.sanity.id[LOCAL.i]#_name_department-#i#"))> 
    <cfset ArrayAppend(recipients, recipient)> 
</cfif> 
<cfset i=i+1> 
</cfloop> 
<cfdump var="#recipients#"> 
<cfabort> 

Répondre

1

REFind renvoie l'emplacement en nombre entier de la chaîne que vous recherchez. Bien que vous puissiez utiliser le raccourci ColdFusion où 0 équivaut à false et toute autre valeur à true (comme vous le faites), je suggère d'être plus explicite dans votre conditionnel.

En d'autres termes ...

REFind("^xtra_" & i, field) GT 0> 
    <!--- string found ---> 

ou

REFind("^xtra_" & i, field) EQ 0> 
    <!--- string NOT found ---> 

Depuis que vous essayez de trouver un sous-chaîne particulier au début de la chaîne, peut-être quelque chose comme <cfif REFind("xtra_" & i, field) EQ 1> pourrait mieux vous servir .

+0

Merci, ça m'a aidé. – Darren

1

Je dirais que je ne suis pas correctement défini avant la boucle. Je voudrais ajouter une sortie de débogage dans la boucle pour me dire ce qu'il fait.

Si cela ne vous aide pas, veuillez nous montrer quelques exemples de données de formulaire (y compris les champs de formulaire) et les résultats de votre vidage des destinataires.

Et pendant que j'y suis, évitez evaluer(). Vous pouvez référencer les variables en utilisant la notation de support telles que:

form["xtra_" & LOVAL.sanity.id[LOCAL] & "_email-" & i] 

evaluate() est intrinsèquement inefficace, et peut être un trou de sécurité, car il peut exécuter des données arbitraires. Bien que ce ne soit pas un problème de sécurité ici, il vaut mieux éviter complètement le problème.

+0

Oh, oui. Pas besoin d'évaluer() ici. – ale

Questions connexes