我有一个存储姓名,电子邮件和消息的简单表单。提交时,我将3个字段存储在2D数组中,每增加一次我提交表单,我想将该数据添加到已经提交的内容中。
但是每次我提交表单时,不是在数组中创建新元素,而是覆盖之前提交的内容。
在我的Application.cfc中,我按如下方式声明我的数组:
<cffunction name="onApplicationStart">
<!--- Define array that will store form submissions --->
<cfset Application.formSubmissions = ArrayNew(2) />
</cffunction>
我的test.cfm页面有主要代码:
<cfscript>
// if form submitted
if (StructKeyExists(Form,"name") AND Form.name NEQ "") {
// define constants for column names
Variables.name = 1;
Variables.email = 2;
Variables.message = 3;
// define array position
Variables.arrayLen = ArrayLen(Application.formSubmissions);
Variables.arrayPos = Variables.arrayLen + 1;
// add form data to array
Application.formSubmissions[Variables.arrayPos][Variables.name] = Form.name;
Application.formSubmissions[Variables.arrayPos][Variables.email] = Form.email;
Application.formSubmissions[Variables.arrayPos][Variables.message] = Form.message;
// reset form fields to stop insert
Form.name = "";
Form.email = "";
Form.message = "";
}
</cfscript>
<cfdump var="#Application.formSubmissions#">
<cfoutput>
<form action="##" method="post" name="contactForm" id="contactForm">
<table>
<tr>
<td><label name="nameLabel" for="name">Name</label></td>
<td><input type="text" name="name" id="name" /></td>
</tr>
<tr>
<td><label name="emailLabel" for="email">Email</label></td>
<td><input type="text" name="email" id="email" /></td>
</tr>
<tr>
<td><label name="emailLabel" for="email">Message</label></td>
<td><textarea name="message" id="message" cols="50" rows="5"></textarea></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="submitBtn" id="submitBtn" value="SUBMIT" /></td>
</tr>
</table>
</form>
</cfoutput>
有人可以指出我似乎出错了吗?
答案 0 :(得分:0)
您的代码适合我。我怀疑你的onApplicationStart
事件会在每次请求时被触发。
要确保不重新定义Application.formSubmissions
,请删除<cfset Application.formSubmissions = ArrayNew(2) />
函数中的行onApplicationStart
并替换示例中的<cfscript>
部分使用以下代码:
<cfscript>
if ( !structIsEmpty(Form) ) {
if (
( structKeyExists(Form, "name") && len(trim(Form.name)) ) &&
( structKeyExists(Form, "email") && len(trim(Form.email)) ) &&
( structKeyExists(Form, "name") && len(trim(Form.name)) )
) {
if ( !structKeyExists(Application, "formSubmissions") ) {
Application.formSubmissions = [];
}
Application.formSubmissions.add([
trim(Form.name),
trim(Form.email),
trim(Form.message)
]);
}
}
</cfscript>
这将初始化Application.formSubmissions
懒惰的方式并阻止娱乐。 注意:这仅用于测试目的,因为应锁定应用程序范围以避免竞争条件。您应该添加表单验证,无论如何。
答案 1 :(得分:0)
使用struct,更好更容易理解。
<cffunction name="onApplicationStart">
<!--- Define array that will store form submissions --->
<cfset Application.formSubmissions = ArrayNew(1) />
</cffunction>
<cfscript>
Application.formSubmissions[Variables.arrayPos] = StrunctNew();
Application.formSubmissions[Variables.arrayPos].name = Form.name;
Application.formSubmissions[Variables.arrayPos].email = Form.email;
Application.formSubmissions[Variables.arrayPos].message = Form.message;
</cfscript>
答案 2 :(得分:0)
还有一个提示:
使用CompareNoCase比较字符串。它比EQ / NEQ快。请参阅以下信息。
CompareNoCase
描述:对两个字符串执行不区分大小写的比较。
返回:差异的指标:
负数,如果string1小于string2 0,如果string1等于string2正数,如果string1大于string2
功能语法:
CompareNoCase(Form.name, "")
如果以上返回0,则表单变量为空。
中的更多数据