php - 添加和更新具有多个条目的 Mysql 子表

标签 php mysql arrays parent-child

我在 mysql 中有两个表:一个名为“grants”的主表和一个名为“goals”的子表。 Grants 有一个 id 字段以及其他一些字段,并且 goal 有一个目标名称和一个 grant_id 将其链接到 grants 表。

在 html 表单上,用户可以添加或编辑任意数量的目标(我使用 Javascript 来添加新输入)。该表单还会获取之前添加的所有目标并将其添加到表单中。

<div id="goals">
        <?php
        $goals = getGoalsById($_GET['id']);
        if (empty($goals)) echo "<p>Goal 1: <input type='text' size='40' name='goals[]' /></p>";
        else {
            $i = 1;
            foreach($goals as $goal) {
                echo "<p>Goal {$i}: <input type='text' size='40' name=\"goals[{$goal['id']}]\" value=\"{$goal['goal']}\" /></p>";
            $i++;
            }

        }
        ?>
    </div>
<input type="button" value="Add goal" onClick="addInput('goals')" />

当我提交表单时,我有以下语句来插入或更新目标:

foreach($goals as $key=>$goal) {

        $sql_goals_add[] = "INSERT INTO goals (id, goal, grant_id) VALUES ($key,:goalnew,$grant_id) ON DUPLICATE KEY UPDATE goal = :goalupdate";
        foreach ($sql_goals_add AS $sql_goal) {
            $stmt_goal = $DBH->prepare($sql_goal);
            $stmt_goal->bindValue(':goalnew', $goal, PDO::PARAM_STR);
            $stmt_goal->bindValue(':goalupdate', $goal, PDO::PARAM_STR);
        }
    $stmt_goal->execute();
    }

这对于更新现有目标非常有效,因为传递的键是目标表中的 id。然而,我遇到的问题是,当他们有新目标时,从表单传递的 $goals 数组始终从 0 开始,因此插入查询尝试使用 0、1、2 等作为插入 id。我宁愿让它自动选择目标表中的下一个可用 ID。

我尝试自动填充我认为可能是新目标 ID 的内容,但这是一个坏主意,因为多个人可能会同时访问该网站,并且可能会重叠。如有任何帮助,我们将不胜感激!

最佳答案

我将做出一些假设,以使此过程适合您。

  • 新条目的表格为空白。
  • 如果有更新,表单将从数据库填充为 它站着。
  • 更新时,表单将从数据库中重新显示,并带有注释 顶部显示更新已发生。
  • 这不是银行数据或超临界容错数据。哪个 对于你的应用程序,我认为不是。它是一个表格 处理管理数据。

我建议的后期流程如下。 我建议稍微拆分一下插入过程。

  1. 插入/更新到主表中。如果是插入,请从包装行中获取记录 ID,用作目标表的外部键。

  2. 删除目标表中与外部键相关的所有条目。即使还没有条目,它也会运行,并且如果有任何目标,它将清除所有目标。从字面上讲,撕掉所有行并进行新插入。

  3. 使用主表的记录 ID 作为插入的外部键,循环遍历 post 数组的目标部分。跟踪原始目标记录 ID 进行更新非常困难。因为您清除了表格,所以您不必担心它,因为该数据也在帖子中。如果此人编辑了目标的措辞,您无需检测即可确定目标是否需要更新,因为它们都会立即重新输入。

  4. 使用从数据库中提取的数据再次显示表单。如果出现错误并且您将结果输出回表单,则在从目标表中清除数据后更新过程中出现错误时,用户始终可以再次更新。如果数据丢失,用户将看到问题并重试。

同样不是我如何处理银行数据,而是对于可以附加无限多个目标的表单,这是我找到的最简单的解决方案。
祝你好运

关于php - 添加和更新具有多个条目的 Mysql 子表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17603595/

相关文章:

php - 在javascript函数参数中插入变量

MySQL - 最后插入的 ID 的返回组

arrays - 如何快速将数据附加到 JSON 格式数组中?

php - 多次接收 Paypal IPN 响应

php - 如何一起概述选项卡和内容

php - 在 PHP 和 JavaScript 之间共享常量

php - 在网站本地备份上禁用 SSL 以在 WAMP 堆栈中进行本地编辑

Mysql sum 在一个字段上使用 group by 同时还考虑另一个字段

c - 在循环中搜索 C 中的字符序列

javascript - 在 Mongoose/MongoDB 中,如何更新数组的数组中的属性