0

我正在尝试创建一个页面,该页面将显示表格中的项目以及每个项目的所有字段。目的是让用户可以在线更新项目的详细信息。

我的表中有大约 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>

然后,我只想在数据库中更新用户已更新的那些字段。我应该每个字段一一检查吗?或者有没有更简单的方法来做到这一点?

谢谢!

4

2 回答 2

1

我目前正在使用此代码来禁用所有未更改的字段:

<script>
$(function() {
    $('.input').change(function() {
        $(this).addClass('changed');
    });
    $('input[type=submit]').click(function(){
     $('form').find('.input:not(.changed)').attr("disabled", "disabled");
    });
});
</script>

我将“输入”类添加到所有表单元素(选择、文本区域、输入等),然后,脚本观察它们是否发生变化,然后添加另一个名为“已更改”的类,稍后,当单击提交按钮时,脚本禁用所有未更改的元素。

于 2013-02-27T17:15:17.597 回答
0

Akam 的回答非常出色 - 将 disabled="disabled" 应用于未更改的输入元素实际上会阻止它们被提交,并且只有更改的变量才会被发送到服务器。

我必须在这里添加的是.......changed这里已经检查提交/输入的值是否与原始值不同。但是您也可以轻松地在提交时将值与原始值进行比较(===例如,或者如果您已经想做一些卫生/验证,您可以使用正则表达式等)

这都是优雅的 javascript(或 jQuery)解决方案,但我看到(愚蠢的 ;-)人们也在服务器端进行类似的比较(例如使用 php)。但是,然后您要么来回反弹原始值-这还不错(意味着:您必须将新值和旧值传递回服务器-但不要再次从数据库中读取它们-然后您就松了不仅仅是更新数据库中的所有表单值)。

于 2013-02-27T17:56:13.507 回答