【问题标题】:Output ALL results?输出所有结果?
【发布时间】:2014-01-11 21:41:34
【问题描述】:

我一直在尝试在 ColdFusion 中创建自己的论坛脚本,但遗憾的是,这比我想象的要困难得多。我在尝试显示数据库中的所有 cmets 时遇到困难,因为 ColdFusion 会引发错误。

以下信息仅供网站开发人员用于调试目的。

处理请求时发生错误

在 REAGEER 中未定义元素 USERNAME。

错误发生在C:/inetpub/wwwroot/content/1-Home/topicview.cfm: line 197

195:
196:         <div id="pers_info">
197:         <a href="/">#reageer.username#</a> <cfif #reageer.online# is 1><img src="http://www.wonderhotel.nl/archive/icons/mini/habbo_online_anim.gif"></img><cfelse><img src="http://www.wonderhotel.nl/archive/icons/mini/habbo_offline.gif"></img></cfif></strong>
198:         <p>Berichten: 55</p>
199:

我为此脚本编写的代码如下:

<cfif IsDefined('URL.id') and URL.id neq ""> // Get the topic ID
<cfquery name = "comments" datasource = "#DSN#">
SELECT *
FROM  `forum_comments`
WHERE topicid = #id#
</cfquery> // Get the comments

  <cfif #comments.RecordCount# is 1>

<cfquery name = "reageer" datasource = "#DSN#">
SELECT *
FROM  `users`
WHERE id = #comments.poster#
</cfquery> // Get the comment posters
</cfif>

                        <cfset colour ="post_uneven">

  <cfloop query="comments">

<div id="#colour#">

        <div id="pers_info">
        <a href="/">#reageer.username#</a> <cfif #reageer.online# is 1><img src="http://www.wonderhotel.nl/archive/icons/mini/habbo_online_anim.gif"></img><cfelse><img src="http://www.wonderhotel.nl/archive/icons/mini/habbo_offline.gif"></img></cfif>
        <p>Berichten: 55</p>

<cfquery name = "reageer_badge_one" datasource = "#DSN#">
SELECT *
FROM  `user_badges`
WHERE user_id = '#reageer.id#'
AND badge_slot = 1
</cfquery>
<cfquery name = "reageer_badge_second" datasource = "#DSN#">
SELECT *
FROM  `user_badges`
WHERE user_id = '#reageer.id#'
AND badge_slot = 2
</cfquery>

                <div id="pers_info_habbo">
                <img src="http://habbo.nl/habbo-imaging/avatarimage?figure=#reageer.look#.gif">
                </div>

                        <div id="pers_info_grbadge">
                <cfif #reageer_badge_one.RecordCount# is 1>
                <img src="http://wonderhotel.nl/Public/Images/badges/#reageer_badge_one.badge_id#.gif">
                </cfif>
                </div>

                <div id="pers_info_badge">
                <cfif #reageer_badge_second.RecordCount# is 1>
                <img src="http://wonderhotel.nl/Public/Images/badges/#reageer_badge_second.badge_id#.gif">
                </cfif>
                </div>

                <div id="pers_info_missie">
                #reageer.motto#
                </div>
        </div>


        <div id="post_text">

                <a href="/"><div id="post_text_edit" title="Bericht aanpassen"></div></a>
                <a href="/"><div id="post_text_delete" title="Bericht verwijderen"></div></a>

                <div id="post_text_title">
                RE: #gettopic.title#
                </div>

                <div id="post_text_date">
                #DateFormat(dateAdd("s", comments.timestamp, "01/01/1970"))# #TimeFormat(dateAdd("s", comments.timestamp, "01/01/1970"))#
                </div>

                <div id="post_text_text">
                #comments.text#

                </div>

        </div>
</div></div>


        <cfif colour is "post_uneven"><cfset colour="post_even"><cfelse><cfset colour="post_uneven"></cfif>
                                        </cfloop>

        </cfoutput>




<div id="topic_info_balk"> // Useless
<div id="forum_paginas">
    Bekijk pagina:
    1
    <a href="#">2</a>
    <a href="#">3</a>
    <a href="#">4</a>
    <a href="#">5</a>
    <a href="#">6</a>
    <a href="#">7</a>
    <a href="#">8</a>
    <a href="#">9</a>
    <a href="#">10</a>
    <a href="#">>></a>
</div>

<div id="reageer-topic">

                                <a href="/topic/<cfoutput>#gettopic.id#</cfoutput>/comment">Reageer</a>
                </div>

</div>
</div>

我真的不知道我做错了什么,以及为什么 ColdFusion 会给我这个错误。我将不胜感激所有的帮助!我唯一的猜测是 ColdFusion 试图(再次)从第一条评论的海报中获取所有数据,但这是错误的,因为我想获得评论 1、评论 2,然后是 3、4、5 等等。

此外,在向主题添加第一条评论时,一切正常。但是在添加第二个之后,我得到了你可以在上面看到的错误。

问候, 亚尼克

【问题讨论】:

  • 专业提示:切勿在脚本或软件中使用SELECT *。始终枚举要检索的列。 username 作为列名似乎有问题。
  • 谢谢!我将列举它们。奇怪的是,当主题有1条评论时,用户名列没有任何问题,因为只有在发布2条cmets时才会出现错误..

标签: mysql coldfusion


【解决方案1】:

我的猜测是,由于您在“reageer”查询周围有一个 &lt;cfif&gt;,因此发生错误是因为有超过 1 条评论,但 username 的输出未包含在 &lt;cfif&gt; 中出色地。因此,ColdFusion 试图从一个不存在的查询中获取 username 的值(因为 &lt;cfif&gt; 阻止它执行),因此出现了错误。

【讨论】:

  • 感谢您的帮助!我弄清楚是什么导致了问题,RecordCount 函数只在 cmets 的 RecordCount 为 1 时显示正确的输出,当有更多 cmets 时 标签会导致故障,所以我通过更改 cfif 标签修复它to 只有最后一件事,因为现在它为每条评论显示同一作者,但这不是应该的样子
  • 仅供参考 - 你不需要 # 在 if 语句中
  • 今天学到了很多新东西——非常感谢!我已经全部删除了。
  • 每条评论都获得相同的作者,因为您正在循环访问 cmets,但对作者详细信息的查询发生在该循环外部。所以对作者的查询只发生在第一条评论上,并且只在循环的每次迭代中重复使用。如果将查询移动到循环内,它应该可以工作。然而,更好的方法是在同一查询中检索评论和评论作者数据。这不仅会极大地简化您的代码,而且会减少 ColdFusion 必须对数据库进行的查询次数(这将提高性能)。
  • 事实上,虽然我不知道您的表是如何相关的,但您似乎可以将您在此页面上的所有查询合并为一个。然后,您实际上只需要遍历 cmets,不必担心“ifs”,并且可以在创建渲染内容方面处理一个查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多