我在mysql中有两个表:称为“授予”的主表和称为“目标”的子表。赠款有一个id字段以及其他一些目标,目标有一个目标名称和一个grant_id以将其链接到授予表。添加和更新具有多个条目数的Mysql子表
在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的内容,但这是一个糟糕的主意,因为多人可能会一次点击该网站并且可能会重叠。任何帮助表示赞赏!