我有一个表单,其中包含一个部分,可以通过单击“添加新行”按钮来动态添加行。
每行都有2个字段:说明和完成日期
这是我用来存储行的表:
CREATE TABLE IF NOT EXISTS example (
id int(11) NOT NULL AUTO_INCREMENT COMMENT 'Contact ID',
parent_id int(11) NOT NULL COMMENT 'Parent ID',
description varchar(64) NOT NULL COMMENT 'Description',
completed_date date DEFAULT NULL COMMENT 'Completed date',
PRIMARY KEY (id)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8
COLLATE=utf8_unicode_ci
COMMENT='Example';
在我的表单上,字段定义为数组,因此,如果有2行,则HTML将如下所示:
<input type="text" name="description[0]" placeholder="Description">
<input type="text" name="completed_date[0]" placeholder="DD-MM-YYYY">
<input type="text" name="description[1]" placeholder="Description">
<input type="text" name="completed_date[1]" placeholder="DD-MM-YYYY">
使用循环将行写入数据库没有问题,但是我一直在努力寻找更新行的最佳方法。
例如,如果将2行写入数据库,则用户编辑表单并更改第二行的日期,我怎么知道我应该更新数据库的第二行而不是第一行?
我能想到的唯一方法是将数据库中的'id'字段添加为每一行的隐藏字段,但是我的问题是-是这样做的标准/最佳方法,还是我有其他技巧失踪了吗?
我可以将其转为JSON字段,并将所有行存储为JSON对象,但我想保留轻松查询数据的功能。
编辑-只是想另一种方式-删除所有记录并重新插入而不是更新。这是更好的方法吗?任何意见表示赞赏。
答案 0 :(得分:0)
是,最好将id
添加为hidden
字段。您的表单应如下所示:
<form action="editwork.php" method="post">
<input type="hidden" name="id" value="<?php echo $id_of_this_row;?>"/>
<input type="text" name="description" value="<?php echo $desc_of_this_row;?>" placeholder="Description"/>
<input type="text" name="completed_date" value="<?php echo $comp_date_of_this_row;?>" placeholder="DD-MM-YYYY"/>
<input type="submit" value="save"/>
</form>
每个循环项应为每一行生成不同的<form>
标记,从而使用不同的保存按钮来更新该行
推荐:使用javascript处理它,因此您的页面不会在每次更新一个简单行时刷新。
并且:删除记录并重新插入,可能是最糟糕的方法。
答案 1 :(得分:0)
您使用的是MySQL数据库中最后插入的ID。按插入日期排序。