【问题标题】:How to submit values for checked and unchecked dynamically named radio button groups with ColdFusion?如何使用 ColdFusion 为选中和未选中的动态命名单选按钮组提交值?
【发布时间】:2012-06-27 22:49:16
【问题描述】:

我创建了一个表单供用户将各种图像上传到图库。他们可以选择图像,它应该进入哪个现有类别(或创建一个新类别)以及是否将图像显示为该类别的“特色”图像。

这是表格:

<FORM action='update_gallery.cfm' method='post' NAME="addform">
<TABLE align='center' cellpadding='10' cellspacing='5'>
<TR><TH>Delete</TH><TH>Image File</TH><TH>Preview</TH><TH>Category</TH><TH>New Category</TH><TH>Description</TH><TH>Featured?</TH></TR>
<CFOUTPUT QUERY="getGallery">
<TR>
<TD><INPUT NAME="ID" TYPE="checkbox" VALUE="#ID#" /></TD>
<TD>#IMAGE#</TD>
<TD><IMG SRC="../images/#IMAGE#" WIDTH='50' HEIGHT='50' /><INPUT TYPE="hidden" NAME="IMAGE" VALUE="#IMAGE#" /></TD>
<TD>
    <SELECT NAME='CATEGORY'>
    <CFLOOP query="getCategory">
        <OPTION <cfif #getGallery.CATEGORY# IS '#getCategory.CATEGORY#'>SELECTED</cfif>>#getCategory.CATEGORY#</OPTION>
    </CFLOOP>
</SELECT>
</TD>
<TD><INPUT TYPE="text" SIZE='30' NAME='NewCATEGORY' VALUE="" /></TD>
<TD><INPUT TYPE="text" SIZE='35' NAME="IMAGE_DESC" VALUE="#IMAGE_DESC#" /></TD>
<TD align="center">
<INPUT TYPE="radio" NAME="#CATEGORY#_PIC" ID="CATEGORY_PIC" VALUE="Yes" <cfif #CATEGORY_PIC# IS 'Yes'>CHECKED</cfif> />
<INPUT TYPE="hidden" NAME="CATEGORY_PIC" VALUE="#CATEGORY_PIC#">
</TD>
</TR>
<INPUT TYPE="hidden" NAME="HiddenID" VALUE='#ID#' />
</CFOUTPUT>
<TR><TD COLSPAN='6' ALIGN='CENTER'>
<INPUT TYPE="hidden" NAME="Submitted" VALUE='Y' /><INPUT TYPE="submit" VALUE='Process Updates' /></TD></TR>
</TABLE>
</FORM>

这是我不知道该怎么做的复杂部分——对于每个独特的类别,只能选择一个特色图片,所以我为每个类别创建了一个动态命名的广播组,其中只有一个可以为每个类别选择项目。提交表单时,就 ColdFusion 而言,“未选中”单选按钮不存在。我需要为未选中的按钮提交一个“否”值到数据库中,为选中的按钮提交一个“是”值。这个值应该是 CATEGORY_PIC 值,我为此创建了一个隐藏的表单字段。

我已经连续工作了 4 天,并搜索了我能找到的所有可能的类似场景,但没有什么与我想要完成的相同。这不会那么困难,但我只是不知道如何做到这一点。

我正在运行带有 MS Access 数据库的 ColdFusion 9。

【问题讨论】:

  • 很难确定您的问题具体出在哪里。是因为您没有通过“否”值吗?还记得您的 HIDDEN Category_PIC 名称可能不正确......应该是 吗?但更有可能您需要评估该类别是否存在默认值,并且只有在这种情况下才通过。
  • 1.为什么你所有的标签都是大写的? 2. 访问?无论您尝试做什么都注定会失败,直到/除非您开始使用真正的数据库。

标签: forms button coldfusion radio-group


【解决方案1】:

您不能在您的 update_gallery.cfm 页面上为它们设置参数吗?

<cfparam name="CATEGORY_PIC" default="No">

动态

<cfparam name="#category#_pic" default="no">

<cfscript>if(!isDefined('CATEGORY_PIC')){CATEGORY_PIC='No';}</cfscript>
<cfscript>if(!isDefined('#CATEGORY#_PIC')){'#CATEGORY#_PIC'='No';}</cfscript>

【讨论】:

  • 没有更多地研究代码,cfparam 似乎是可能的答案。那或者您可以假设缺少变量表明它没有被发送。
【解决方案2】:
<!--- Sample Data Set --->
<cfset gallery = "1,1.jpg,preview1.jpg,cat1,description1,true
5,5.jpg,preview5.jpg,cat1,description5,false
2,2.jpg,preview1.jpg,cat2,description2,false
6,6.jpg,preview6.jpg,cat2,description6,true
3,3.jpg,preview3.jpg,cat3,description3,false
7,7.jpg,preview7.jpg,cat3,description7,true
4,4.jpg,preview4.jpg,cat4,description4,true
8,8.jpg,preview8.jpg,cat4,description8,false">
<cfset category = "cat1
cat2
cat3
cat4">
<cfif isDefined('data')>
    <cfsetting showdebugoutput="false">
    <cfif isDefined(data)>
        <cfoutput>#evaluate(data)#</cfoutput>
    </cfif>
<cfelse>
    <!--- Populate Queries --->
    <cfhttp
        name="getGallery"
        method="get"
        url="#script_name#?data=gallery"
        firstrowasheaders = "no" 
        columns = "id,image,preview,category,image_desc,category_pic"
    />
    <cfhttp
        name="getCategory"
        method="get"
        url="#script_name#?data=category"
        firstrowasheaders = "no" 
        columns = "category"
    />

    <!--- Jennifer's Code --->   
    <form action='update_gallery.cfm' method='post' name="addform">
        <table align='center' cellpadding='10' cellspacing='5'>
            <tr><th>delete</th><th>image file</th><th>preview</th><th>category</th><th>new category</th><th>description</th><th>featured?</th></tr>
            <cfoutput query="getgallery">
                <tr>
                    <td><input name="id" type="checkbox" value="#id#" /></td>
                    <td>#image#</td>
                    <td><img src="../images/#image#" width='50' height='50' /><input type="hidden" name="image" value="#image#" /></td>
                    <td>
                        <select name='category'>
                            <cfloop query="getcategory">
                                <option <cfif getgallery.category eq getcategory.category>selected</cfif>>#getcategory.category#</option>
                            </cfloop>
                        </select>
                    </td>
                    <td><input type="text" size='30' name='newcategory' value="" /></td>
                    <td><input type="text" size='35' name="image_desc" value="#image_desc#" /></td>
                    <td align="center">             
                        <input type="radio" name="#getGallery.category#_pic" id="category_pic" value="#id#" <cfif getGallery.category_pic>checked="checked"</cfif>>
                    </td>
                </tr>
                <input type="hidden" name="hiddenid" value='#id#' />
            </cfoutput>
            <tr><td colspan='6' align='center'>
            <input type="hidden" name="submitted" value='y' /><input type="submit" value='process updates' /></td></tr>
        </table>
    </form>

</cfif>

【讨论】:

  • 这是我对您要完成的工作的最佳猜测。此处的区别在于,您在表单字段中为类别获取了新的精选图片......所以您只需编写一个查询,将所有功能设置为 NO,并将传递的一个 ID 的功能设置为是。跨度>
  • 出于好奇,您为什么要使用
  • 好的..我想我明白了。显示填充查询的方式非常糟糕。您正在向同一页面发出 3 个 HTTP 请求以加载数据(以及那个虚拟数据)。为什么不直接使用 queryNew()?
  • 考虑到您对最终用户通过查询字符串提交的数据盲目运行评估(),这也是一个巨大的安全漏洞
  • 我这样做是为了快速模拟她的查询数据。懒得使用 QueryNew 和 Inserts —— 只是使用了内置的 HTTP CSV to Query 功能,她不会包含“Jennifer's”代码部分上方的部分。不会有盲目的评价。是的。 ^_^
猜你喜欢
  • 2011-04-10
  • 2012-04-05
  • 2011-04-20
  • 1970-01-01
  • 2018-06-12
  • 2018-05-12
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多