【问题标题】:PHP/MySQL - how to UPDATE dynamically added rowsPHP/MySQL - 如何更新动态添加的行
【发布时间】:2019-11-17 06:33:37
【问题描述】:

我有一个表单,其中包含可以通过单击“添加新行”按钮动态添加行的部分。

每行有 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">

我使用循环将行写入数据库没有问题,但我正在努力想出UPDATE行的最佳方法。

例如,如果将 2 行写入数据库,然后用户编辑表单并更改第二行的日期,我怎么知道我应该更新数据库的第二行,而不是第一行?

我能想到的唯一方法是将数据库中的“id”字段添加为每一行的隐藏字段,但我的问题是 - 这是标准/最佳方法还是我有其他技巧失踪了?

我可以将其转换为 JSON 字段并将所有行存储为 JSON 对象,但我希望保留轻松查询数据的能力。

编辑 - 只是想到了另一种方法 - 删除所有记录并重新插入而不是更新。这是更好的方法吗?任何意见表示赞赏。

【问题讨论】:

    标签: php mysql dynamic sql-update


    【解决方案1】:

    是的,添加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>
    

    每个循环项应该为每一行生成不同的&lt;form&gt;标签,因此不同的保存按钮来更新行

    推荐:使用 javascript 处理,这样您的页面就不会在每次更新一个简单行时刷新。

    并且:删除记录并重新插入,可能是最糟糕的做法。

    【讨论】:

      【解决方案2】:

      您是否使用了 mysql DB 中最后插入的 id。按插入日期排序。

      【讨论】:

      • 不确定您的意思。我可以找到最后插入的 id,但不确定这对我有什么帮助?用户在创建记录时最初可以插入 10 行
      • 我明白了你帖子的意思。不知道有什么特别的方法。大多数情况下我和你一样。你在使用框架吗?可能有特殊的自动化对象类。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      • 2014-09-23
      相关资源
      最近更新 更多