【问题标题】:ColdFusion/SQL : ELEMENT XXX IS NOT DEFINED IN FORMColdFusion/SQL:ELEMENT XXX 未在表格中定义
【发布时间】:2013-03-14 08:54:50
【问题描述】:

我的 cfm 页面上有一个表单,即在 SQL 数据源中插入一个新行。 cfm 页面承载表单 - 提交时,-action.cfm 页面插入数据并将用户重新定位到列出新信息的页面。我遇到的问题是当我提交我得到的表单时:: 元素 NEWUSERID 在 FORM 中未定义。

insertScores.cfm 页面上的表格:

<form method="post" action="insertScores-action.cfm">
<table>
  <tr>
    <td>User ID</td>
    <td><input name="newUserID" type = "text" size = "50"></td>
  </tr>

  <tr>
    <td>First Name</td>
    <td><input name="newFirstName" type="text" size="50"></td>
  </tr>
  <tr>
    <td>Last Name</td>
    <td><input name="newLastName" type="text" size="50"></td>
  </tr>
  <tr>
    <td>Email</td>
    <td><input name="newEmailAdd" type="text" size="50"></td>
  </tr>
  <tr>
    <td>Score</td>
    <td><input name="newScore" type="text" size="50"></td>
  </tr>
  <tr>
    <td>Pass Date</td>
    <td><input name="newPassDate" type="text" size="50" value="dd/mm/yyyy"></td>
  </tr>
  <tr>
    <td>Level</td>
    <td><input name="newLevel" type="text" size="50"></td>
  </tr>
  <tr>
    <td><input type="submit" value="Insert Scores"></td>
 </tr>
 </table>

insertScores-action.cfm 页面

<cfquery name="insertScores" datasource="staffwrite">
INSERT INTO protinfo_scores (
  userID
  , first_name
  , last_name
  , email
  , curr_score
  , curr_score_date
  , level
  )
VALUES (
    '#form.newUserID#'
  , '#form.newFirstName#'
  , '#form.newLastName#'
  , '#form.newEmailAdd#'
  , '#form.newScore#'
  , '#form.newPassDate#'
  , '#form.newLevel#'
  )
</cfquery>


<cfquery name = "queryScore" datasource="staff">
  SELECT userid, level
  FROM protinfo_scores
  WHERE userid LIKE '#form.newUserid#'
  AND level = '#form.newLevel#'
</cfquery>

<cflocation URL="newScore.cfm?userid=#url.userid#&level=#url.level#">

newScore.cfm

<center>
  <h2>Your ammendments have been made.</h2><hr>
</center>

<cfquery name = "queryScore" datasource="staff">
  SELECT first_name, last_name, email, curr_score, curr_score_date, userid, level
  FROM protinfo_scores
  WHERE userid LIKE '#URL.userid#'
  AND level = #URL.level#
</cfquery>


<cfoutput query="queryScore">

<table>
  <tr bgcolor=beige>
    <td>Name</td>
    <td width="40">#queryScore.first_name# #queryScore.last_name#</td>
  </tr>
  <tr>
    <td>Email</td>
    <td width="40">#queryScore.email#</td>
  </tr>
  <tr bgcolor=beige>
    <td>Username</td>
    <td width="100">#queryScore.userid#</td>
  </tr>
 <tr>
    <td>Level</td>
    <td width="100">#queryScore.level#</td>
  </tr>
  <tr bgcolor=beige>
    <td>Current Score</td>
    <td width="40">#queryScore.curr_score#</td>
  </tr>
  <tr>
    <td>Date Passed</td>
    <td width="40">#queryScore.curr_Score_date#</td>
  </tr>
</table>
</cfoutput>

【问题讨论】:

  • 您真的应该在所有查询中使用&lt;cfqueryparam&gt;,以防止 SQL 注入
  • 我已经阅读了你的代码几次,看不出有什么明显的错误。但是有两个问题:当您将 &lt;cfdump var="#form#&gt; &lt;cfabort&gt; 放在 insertScores-action.cfm 的顶部时会发生什么?newScore.cfm 中有什么?这不太可能,但你能走得那么远,然后在那里出错吗?
  • 如果您在 insertScores-application.cfm 页面顶部转储整个表单范围,您会得到什么?
  • insertScores-action.cfm 和 insertScores-application.cfm 真的是两个独立的页面吗?查看您的表单操作属性和您描述的操作页面的名称。
  • insertScores-action.cfm 中queryScore 查询的目的是什么?之后您立即执行 cflocation 而不引用该查询中的任何内容。这不会是您错误的原因,但最好消除混淆

标签: html sql forms coldfusion


【解决方案1】:

当提交时,-action.cfm 页面会插入数据并重新定位 用户到一个列出新信息的页面

我无法从措辞上判断这是预期效果还是实际效果。如果是实际效果,那么您的错误发生在newScore.cfm 上,这是有道理的,因为在cflocation 之后表单范围内的数据不会持续存在,并且您尝试在输出表之后使用form.newUserID

如果这是想要的效果而不是实际效果...

  1. 正如 Dan 所说,您正在查看两个不同的文件。您显示来自 insertScores-application.cfm 的代码,但您的操作指向 insertScores-action.cfm
  2. 您问题中的代码不是完全复制/粘贴,甚至不是您的所有代码(至少可以说您缺少&lt;/form&gt; 标签)。在这种情况下,我建议向我们展示实际代码和错误消息。很多时候我看到element XXX is undefined in FROM(注意它说的是FROM而不是FORM,当你盯着同一个东西几个小时时很容易错过)。错误消息将告诉您错误所在的行号。行号是否真的在您发布的代码中?

【讨论】:

  • FORM 转储似乎没有转储任何东西。另外,我已经编辑了 Q 以包含 newScore.cfm 及其 -action 而不是 -application ,这让我有点困惑。另外,第一个sn-p只是相关代码的sn-p,在表格之后应该有(并且是)一个标签。
  • 你能显示完整的错误吗?屏幕截图或复制/粘贴灰色框中的所有内容。它应该包括错误、文件名、行号和错误周围的代码(假设启用了强大的异常信息)。
【解决方案2】:

我将我的&lt;form&gt;&lt;/form&gt; 更改为&lt;cfform&gt;&lt;/cfform&gt;,现在似乎一切正常。我的印象是这不会有任何区别,但显然确实有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多