我创建了一个动态表单,允许您修改所需的输入字段数量。这是因为他们可能有15个乐队成员,需要15个乐队,或者一个乐队可能有2个。我唯一的问题是提交表单时,每个输入都被命名为“memberName1”,“membername2”等等。使用jQuery。如何在运行查询之前/之前运行检查以查看这些字段是否已填充以及是否要将其值输入数据库?感谢。
编辑1:
我在考虑类似下面的代码。但我需要运行一个循环来计算名称为memberName
的所有当前字段,后跟一个数字。而不是在第一个空场停留,而是贯穿它们。如果值为空,则不执行任何操作。如果有值,则将其插入我的表格。
<cfquery datasource="exampledatasource" name="insertbandmembers">
Insert Into members(members_name)
Values (memberName#i#)
</cfquery>
答案 0 :(得分:1)
使用静态数字循环,但是一旦序列中的数字尚未传递,则会中断。您还可以计算jQuery中的数字字段,并将其与表单提交一起传递
<cfquery datasource="exampledatasource" name="insertbandmembers">
INSERT Into members(members_name)
VALUES
<cfloop index="i" from="1" to="15">
<cfif structKeyExists(form, 'memberName#i#') AND len(form['memberName#i#'])>
<cfif i neq 1>, </cfif>
( <cfqueryparam cfsqltype="cf_sql_varchar" value="#form['memberName#i#']#"> )
<cfelse>
<cfbreak>
</cfif>
</cfloop>
</cfquery>
答案 1 :(得分:1)
我会做这样的事情:
<cfloop list="#form.fieldnames#" index="ThisElement">
<cfif left(ThisElement, 10) is "memberName">
<cfset ThisValue = form[ThisElement]>
<cfif len(ThisValue)>
<cfquery name="AddRecord">
Insert Into members(members_name)
Values
( <cfqueryparam cfsqltype="cf_sql_varchar" value="#ThisValue#"> )
</cfquery>
</cfif> <!--- len(thisvalue) --->
</cfif> <!--- left(ThisElement, 10) is "memberName" --->
</cfloop>
答案 2 :(得分:1)
(这开始是一个评论,但它太长了..)
有不同的方法来处理它。我的偏好是Travis mentioned in the comments。基本上有jquery存储隐藏表单字段中的成员总数。然后使用该值循环遍历成员字段,验证值,并根据需要插入。
您可以轻松调整Dan或jamckinn的示例来执行此操作。注意他们正在使用<cfqueryparam>
来防止sql注入?此外,由于这些是相关插入,因此您希望将整个事物包装在单个<cftransaction>
中。这确保了插入物被处理为单个单元。要么他们都成功,要么他们都失败了 - 在一起。
<cfparam name="form.totalFields" default="0" >
<cfloop from="1" to="#val(form.totalFields)#" index="x">
<!--- extract current name --->
<cfset memberName = trim(FORM["memberName"& x])>
<!--- insert NON-empty values --->
<cfif len(memberName)>
<cfquery datasource="exampledatasource" name="insertbandmembers">
INSERT INTO members ( members_name )
VALUES
(
<cfqueryparam value="#memberName#" cfsqltype="cf_sql_varchar">
)
</cfquery>
</cfif>
</cfloop>