【问题标题】:Multiple form within one HTML table一个 HTML 表格中的多个表单
【发布时间】:2012-06-13 17:54:01
【问题描述】:

在一个很长的产品列表中,我正在创建一个表格。每行都应该可以更新。如果我将多个表单放在一个表中,则 HTML 无效。一种解决方案是为每一行创建一个表,但格式会非常难看。

我想做这个:

<table>
<tr><form><td><input type=\"text\" name=\"name\" value=\"".$row['name']."\" /></td>\n";
</td><td></td>....<td><input type=\"submit\" name=\"Submit_btn\" id=\"Submit_btn\" value=\"Update\"></td></tr></form>
<tr><form><td></td><td></td>....<td><input type=\"submit\" name=\"Submit_btn\" id=\"Submit_btn\" value=\"Update\"></td></tr></form>
.
.
.
</table>

这是无效的。我能做什么?

【问题讨论】:

    标签: php html forms html-table


    【解决方案1】:

    在整个表格周围使用一个表格。

    过滤掉不需要的数据到达服务器后。

    【讨论】:

    • 问题是过滤掉变化在哪里。否则我必须或多或少地更新整个表格。
    【解决方案2】:

    如果你想跨浏览器,不使用javascript:

    为每一行使用不同名称的提交按钮,其中名称包含 id 信息。喜欢

    <input type="submit" name="id[589] value="update this row">
    

    只要用户点击那个提交按钮,或者按钮的选项卡给它焦点,然后按下回车,浏览器就会可靠地发送那个提交按钮的名称(并且只有那个提交按钮),然后你可以通过

    $id = key($_POST['id']);
    

    但是,问题是如果用户通过回车键提交表单,当表单焦点位于不同类型的输入元素上时,例如type=text。表单会提交,但不同的浏览器会

    1) 根本不发送任何提交按钮的名称,

    2) 否则他们将发送第一个提交按钮的名称以出现在表单的 html 源中。

    如果您在表单的开头放置一个虚拟提交按钮,并使用 css 隐藏,那么您可以通过以下方式可靠地检测到这种类型的表单提交

    isset($_POST['dummySubmit']);
    

    您无法执行更新,但您可以将所有已发布的值输出回给用户(这样他们的工作不会丢失),同时会显示一条消息,告诉他们需要明确单击提交按钮,然后让他们再试一次。

    或者... 你可以放弃使用单独的按钮,每次都更新每条记录,这可能没有你想象的那么糟糕。我认为尝试过滤掉哪些记录已更改以减少 sql 查询通常没有多大好处。但如果你真的想,也许可以发送一个 md5 的行数据连接在一起的哈希,然后在提交和比较时重新计算哈希。

    【讨论】:

    • 我想我可以采用这个解决方案。谢谢大家!
    【解决方案3】:

    使用 id 来指定行。 还将更改行的 id 发送到服务器以进行过滤。

    【讨论】:

      猜你喜欢
      • 2016-02-10
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 2011-08-07
      相关资源
      最近更新 更多