2013-06-12 86 views
1

我遇到了我的ColdFusion代码返回“元素AUTHOR在FORM中未定义”的问题。每当我提交我的表格。我试过用<cfparam>来设置comment.author,但它也没有工作。我对ColdFusion相当陌生,所以任何推理评论都会很棒!ColdFusion中的元素未定义错误

<cfparam name="form.submitted" default="0" /> 
<cfset blogPost = EntityLoad('BlogPost',url.id,true) /> 
<cfif form.submitted> 
    <cfset comment = EntityNew('BlogComment') /> 
    <cfset comment.author = form.author /> 
    <cfset comment.comment = form.comment /> 
    <cfset comment.createdDateTime = now() /> 
    <cfset blogPost.addComment(comment) /> 
    <cfset EntitySave(blogPost) /> 
</cfif> 

<cfimport taglib="customTags/" prefix="layout" /> 
<layout:page section="blog">  

     <!-- Content Start --> 

     <!--Card --> 
     <div id="content"> 
      <div class="card-pattern"> 
       <!-- blog --> 
       <div id="blog"> 
        <div class="clr"> 
         <div class="top-bg1"> 
          <div class="top-left"> 
           <div><h1>Blog</h1></div> 
          </div> 
         </div> 
         <div class="clr"> 
          <div class="pat-bottomleft">&nbsp;</div> 
          <div class="pat-bottomright">&nbsp;</div> 
         </div> 
        </div> 
        <div class="blog-top"> 
         <div class="clr"> 
         <cfoutput> 
          <div class="left"> 
           <!-- Blog Title --> 
           <h2 class="big"> 
            #blogPost.title# 
           </h2> 
           <!-- Date Published --> 
           <h5> 
            <strong>Date Posted</strong>: #dateformat(blogPost.dateposted,'mm/dd/yyyy')# 
           </h5> 
           <!-- Blog Body --> 
            #blogPost.body# 
           <!-- Blog Export --> 
           <p> 
            <a href="exportToPDF.html?id=#blogPost.id#" target="_new"><img src="assets/images/export_pdf.png" border="0"/></a> 
           </p> 
           <!-- Blog Comments Section --> 
           <h3> 
            Comments #arrayLen(blogPost.getComments())# 
           </h3> 
           <div class="clr hline">&nbsp;</div> 

           <div class="clr comments"> 
            <ul> 
             <!-- Start Comment --> 
             <cfloop array="#blogPost.getComments()#" index="comment"> 
             <li> 
              <p> 
               <strong>Posted On:</strong> #dateFormat(comment.createdDateTime,'mm/dd/yyyy')# at #timeformat(comment.createdDateTime,'short')# By #comment.author# 
              </p> 
              <p> 
               #comment.comment# 
              </p> 
              <div class="clr hline">&nbsp;</div> 
             </li> 
             </cfloop> 
             <!-- End Comment --> 
            </ul> 
           </div> 
           <h3> 
            Post Comment 
           </h3> 
           <div class="clr hline">&nbsp;</div> 

           <div class="clr postComment"> 
            <form action="BlogPost.cfm?id=#blogPost.id#" method="post" id="form"> 
             <div> 
              <label>Name <span class="font-11">(required)</span></label> 
              <input name="contactname" type="text" class="required" /> 
             </div> 
             <div class="textarea"> 
              <label>Comment <span class="font-11">(required)</span></label>    
              <textarea name="comment" rows="6" cols="60" class="required"></textarea>   
             </div> 
             <div> 
              <input id="submitBtn" value="Submit" name="submit" type="submit" class="submitBtn" /> 
             </div> 
             <input type="hidden" name="submitted" value="1" /> 
            </form> 
           </div> 
          </div> 
         </cfoutput> 
          <div class="right" > 
           <h2>Categories</h2> 
           <!-- Blog Specific Categories --> 
           <div id="categories" align="center"> 
            <ul> 
             <li><a href="#">ColdFusion</a></li> 
             <li><a href="#">Development</a></li> 
            </ul> 
           </div> 
          </div> 
         </div> 
        </div> 
        <div class="clr"></div> 
       </div> <!--blog end --> 

</layout:page> 

回答

5

错误是告诉你什么是错的。在您的表单中没有作者元素或根本没有表格范围。这里是你贴在表格代码:

<form action="BlogPost.cfm?id=#blogPost.id#" method="post" id="form"> 
    <div> 
     <label>Name <span class="font-11">(required)</span></label> 
     <input name="contactname" type="text" class="required" /> 
    </div> 
    <div class="textarea"> 
     <label>Comment <span class="font-11">(required)</span></label>    
     <textarea name="comment" rows="6" cols="60" class="required"></textarea>   
    </div> 
    <div> 
     <input id="submitBtn" value="Submit" name="submit" type="submit" class="submitBtn" /> 
    </div> 
    <input type="hidden" name="submitted" value="1" /> 
</form> 

只包含4个元素:contactnamecommentsubmitsubmitted。这意味着在提交表单后,ColdFusion将可以访问:form.contactname,form.comment,form.submitform.submitted。我假定你正试图将你的comment.author变量设置为contactname表单字段。

你既可以改变你的代码,你在哪里设置变量,就像这样:

<cfset comment.author = form.contactname /> 

或者你可以改变你的代码中的表单字段的定义,像这样:

<input name="author" type="text" class="required" /> 

无论哪种方式,对form范围的引用都必须与您在HTML表单中提供的名称相匹配。对于它的价值,你可以随时转储form范围内,可以提交后看到什么是可用的,就像这样:

<cfdump var="#form#"> 

还记得消毒您从客户端接收的所有数据。

How can I sanitize user input but keep the content of <pre> tags?

+0

对于此特定类型的错误消息,此答案的第一段并不总是正确的。有时这意味着根本没有形式范围。 –

+0

我会更新该段落。 –

+0

真棒,感谢您的详细解释! –

0

同意,不确定,因为它不存在于形式存在。

绝对清理所有表单和网址数据。下面的一个示例:

<cfset myVar = ReReplaceNoCase(#FORM.formfield#,"<[^>]*>","","ALL")/>