我在 mysql 中有两个表:一个名为“grants”的主表和一个名为“goals”的子表。Grants 有一个 id 字段以及一堆其他字段,goals 有一个目标名称和一个 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 的内容,但这是一个坏主意,因为多个人可能会同时访问该站点并且它可能会重叠。任何帮助表示赞赏!