Обновить счет, чтобы перезаписать предыдущий счет - PullRequest
0 голосов
/ 31 мая 2011

У меня есть страница, где перечислены названия стихов, средние оценки и списки судей, которые набрали стихи. Эти пункты находятся в 3 столбцах. Когда судья нажимает на заголовок стихотворения, он попадает на страницу обзора стихотворения, которая отображает содержание стихотворения и позволяет судье оценивать стихотворение с 1 по 3. Если судья уже набрал стихотворение, его оценка загружается в выпадающий список, и появляется сообщение о том, что он уже забил его, и если он изменит счет, он обновит его счет. Мой запрос на обновление не работает, но мне интересно, связано ли это с проблемой логики от моего имени.

Полный код, о котором идет речь, находится здесь. Запрос на обновление начинается со строки 86. Я думаю, что если счет уже есть, в массиве arrDuplicate появится сообщение с надписью и загрузится предыдущий счет в выпадающий список. Судья может изменить счет при желании. Однако, как сейчас обстоят дела, счет записывается в новую запись каждый раз, а не обновляет существующий счет.

Таблица PoemScores состоит из poemID, judID и Score. Там нет пк. Должно ли быть?

Ответы [ 2 ]

1 голос
/ 31 мая 2011

Вам нужно будет добавить

AND judgeID = ?

к вашему запросу, в противном случае он попытается обновить каждый счет для этого конкретного стихотворения.

0 голосов
/ 31 мая 2011

Добавьте 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...