Добавьте cfqueryparam к запросам duplicateCheck, updateScore и qRatePoem, главным образом, чтобы избежать внедрения SQL.
Вы можете изменить это
<cfif duplicateCheck.recordCount GT '0'>
(что является сравнением строк) на это (числовое)сравнение)
<cfif duplicateCheck.recordCount GT 0>
или даже просто (булево)
<cfif duplicateCheck.recordCount>
Эти 2 оператора IF идентичны, поэтому, если ошибок нет, вы будете выполнять и обновление, и вставку,Вам нужно переосмыслить свою логику.
<cfif NOT ArrayLen( arrErrors ) >
<cfquery name="updateScore" datasource="#request.dsn#">
UPDATE PoemScores
SET score = '#form.rating#'
WHERE poemID = <cfqueryparam cfsqltype="cf_sql_varchar" value="#url.id#">
</cfquery>
</cfif>
<cfif NOT ArrayLen( arrErrors )>
<!--- INSERT DATABASE QUERY--->
<cfquery name="qRatePoem" datasource="#request.dsn#">
INSERT INTO PoemScores (poemID, score, judgeID)
VALUES ('#url.id#', '#form.rating#', '#session.username#')
</cfquery>
<!---<cflocation url="dash.cfm" addtoken="no">--->
</cfif>
Возможно, вы захотите добавить здесь дополнительный оператор IF, проверяющий, имеет ли arrDuplicates длину.Если это произойдет, они уже забили это, сделайте запрос на обновление.В противном случае сделайте вставку.
<cfif NOT ArrayLen( arrErrors ) >
<cfif ArrayLen(arrDuplicate)> <!--- already submitted a score for this poem --->
<cfquery name="updateScore" datasource="#request.dsn#">
UPDATE PoemScores
SET score = '#form.rating#'
WHERE poemID = <cfqueryparam cfsqltype="cf_sql_varchar" value="#url.id#">
</cfquery>
<cfelse>
<!--- INSERT DATABASE QUERY--->
<cfquery name="qRatePoem" datasource="#request.dsn#">
INSERT INTO PoemScores (poemID, score, judgeID)
VALUES ('#url.id#', '#form.rating#', '#session.username#')
</cfquery>
</cfif>
<!---<cflocation url="dash.cfm" addtoken="no">--->
</cfif>