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