我有一个表单处理,我确信可以更有效地完成,结果集中有一个错误,虽然不是“危及生命”,只是不正确。
该页面的目的是将项目与程序相关联,同时将程序内的名称关联 -B
字段F
是复选框,允许项目与该特定程序内的多个程序和名称相关联。(为清楚起见进行了编辑)示例:
物品:光剑
- 项目:绝地训练
- 名称:工具(b)(是)
名称:武器(f)(无)
节目:绝地大师
- 名称:工具(b)(是)
名称:武器(f)(是)
程序:走私者
- 名称:工具(b)(无)
- 名称:武器(f)(无)
形式:
<form action="#CGI.SCRIPT_NAME#" method="post" name="program">
<label>Item</label>
<select id="item" name="item">
<!---//loop through and display items --->
<cfloop query="getitems">
<option value="#itemid#">#itemname#</option>
</cfloop>
</select>
<table>
<!---//loop through and display programs --->
<cfloop query="getprogram">
<tr>
<td>#programname#</td>
<td><input type="checkbox" id="B#programid#" name="B#programid#"></td>
<td><input type="checkbox" id="F#programid#" name="F#programid#"></td>
</tr>
</cfloop>
</table>
<input type="submit">
</form>
行动页面:
<!---// is there is a form being processed --->
<cfif #CGI.REQUEST_METHOD# is 'post'>
<!---// create program list from query --->
<cfset pl = ValueList(query.var, ','>
<!---// set addtl form var's --->
<cfset listassid = 'form.item'>
<!---// loop over program list --->
<cfloop list="#pl#" index="i">
<!---// loop over form fields --->
<cfloop list="form.fieldnames" index="field">
<cfif #field# EQ 'B'&#i#>
<!---// if field is B and var, set designation true --->
<cfset b = 1>
<cfelse>
<!---// it's not, set to null --->
<cfset b = 'null'>
</cfif>
<cfif #field# EQ 'F'&#i#>
<!---// if field is F and var, set designation true --->
<cfset f = 1>
<cfelse>
<!---// it's not, set to null --->
<cfset f = 'null'>
</cfif>
<cfif b EQ 'null' AND f EQ 'null'>
<!---// if both are null then skip --->
//do nothing
<cfelse>
<!---//insert record into table --->
insert into table (table fields)
(#i#, #listassid#, #b#, #f# )
</cfif>
</cfloop>
</cfloop>
</cfif>
结果应该是:
id item_id program_id B F
1 24 1 x
2 32 2 x x
实际结果是:
id item_id program_id B F
1 24 1 x
2 32 2 x
3 32 2 x
提前感谢您提出的任何澄清和效率建议。