在一个很长的产品列表中,我正在创建一个表格。每一行都应该可以更新。如果我将多个表单放在一个表中,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>
它无效。我能做什么?
在整个表格周围使用一个表单。
在到达服务器后过滤掉不需要的数据。
如果你想
在不使用javascript的情况下跨浏览器执行此操作:
对每一行使用不同名称的提交按钮,其中名称包含 id 信息。喜欢
<input type="submit" name="id[589] value="update this row">
只要用户单击该提交按钮,或者按钮 tpo 的选项卡给予它焦点,然后按 Enter 键,浏览器就会可靠地发送该提交按钮的名称(并且仅发送该提交按钮),然后您可以通过
$id = key($_POST['id']);
但是,问题是如果用户通过 Enter 键提交表单,当表单焦点位于不同类型的输入元素上时,例如type=text
。表单将提交,但不同的浏览器将提交
1)根本不发送任何提交按钮的名称,
2)或者他们将发送第一个提交按钮的名称以显示在表单的HTML源中。
如果您在表单的开头放置一个虚拟提交按钮,并使用 css 隐藏,那么您可以通过
isset($_POST['dummySubmit']);
您无法执行更新,但您可以将所有发布的值输出回用户(这样他们的工作就不会丢失),以及一条消息,告诉他们需要显式单击提交按钮,并让他们重试。
或。。。你可以放弃使用单个按钮,每次都更新每条记录,这可能并不像你想象的那么糟糕。我认为尝试过滤掉哪些记录在尝试减少 sql 查询时发生了变化通常没有多大好处。但是,如果您真的想要,可以发送连接在一起的行数据的 md5 哈希,然后在提交和比较时重新组合哈希。
使用 id 指定行。同时将更改行的 id 发送到服务器以进行过滤。