我正在尝试创建一个页面,该页面将显示表格中的项目以及每个项目的所有字段。目的是让用户可以在线更新项目的详细信息。
我的桌子上有大约14个字段,并且计划像下面这样做。它会有意义吗?或者是否有更有效的方法来做到这一点?
<form>
(query all items in table)
while (...) {
<span class="details">NAME: </span>
<input name="name" value="<?php echo $info['name']; ?>">
<span class="details">CATEGORY: </span>
<input name="category" value="<?php echo $info['category']; ?>"
...
... and so on 12 more times
}
<button to submit the form>
</form>
然后,我想在数据库中仅更新用户已更新的字段。我应该逐个检查每个字段吗?或者有更简单的方法吗?
谢谢!
答案 0 :(得分:1)
我目前正在使用此代码禁用所有未更改的字段:
<script>
$(function() {
$('.input').change(function() {
$(this).addClass('changed');
});
$('input[type=submit]').click(function(){
$('form').find('.input:not(.changed)').attr("disabled", "disabled");
});
});
</script>
我在所有表单元素(select,textarea,input等)中添加了'input'类,然后,如果脚本更改则会看到它们,然后添加另一个名为'changed'的类,之后,当单击提交按钮时,该脚本禁用所有未更改的元素。
答案 1 :(得分:0)
Akam的答案非常棒 - 对未更改的输入元素应用disabled =“disabled”实际上会阻止它们被提交,只有更改的变量才会被发送到服务器。
我在这里要添加的是...... .changed
这里已经检查提交/输入的值是否与原始值不同。但是您也可以在提交时轻松地将值与原始值进行比较(例如,使用===
,或者如果您已经想要进行一些卫生/验证,则可以使用正则表达式等)
这都是优雅的javascript(或jQuery)解决方案,但我看到(傻;-)人们也在服务器端进行比较(例如用php)。但是,你要么来回反弹原始值 - 这不是那么糟糕(意思是:你必须将新值和旧值传递回服务器 - 但不要再从数据库中读取它们 - 然后你松了比只更新数据库中的所有表单值更多。