【发布时间】:2013-12-17 13:31:24
【问题描述】:
我有一个表单,其中有几个字段设置为数组,因此:
<input type="text" name="proj[]" id="proj[]" value="<?php echo $proj[0]; >?" />
<input type="text" name="budget[]" id="budget[]" value="<?php echo $budget[0]; >?" />
(为简洁起见,某些代码功能,如 htmlspecialchars,已被编辑。)
有四个这样的分组,在 INSERT 时,会创建四个单独的记录。
<?php for($i=0; $i<=3; $i++) {
$new = $con->prepare("INSERT INTO table (proj, budget, formId)
VALUES(:proj, :budget, :formid)");
$data = array('proj'=>$_POST['proj'][$i],
'budget'=>$_POST['budget'][$i],'formid'=>$formId);
//formId comes from a calculation performed elsewhere (x=x+1)
$new->execute($data);
} ?>
插入工作正常,我可以在查询数据库后调用记录并将它们显示在我的表单上。
<?php while($row = $data->fetch(PDO::FETCH_BOTH)) {
$proj[] = $row['proj'];
$budget[] = $row['budget'];
} ?>
然而,在更新它们时,我遇到了麻烦。我不知道如何更新各个行。这是我迄今为止尝试过的:
<?php for($i=0; $i<=3; $i++) {
$upd = $con->prepare("UPDATE table SET proj=:proj, budget=:budget
WHERE formId = :formid");
$data = array('proj'=>$_POST['proj'][$i], 'budget'=>$_POST['budget'][$i],
'formid'=>$_SESSION['formId']);
$upd->execute($data);
}
这就是我卡住的地方。我不知道如何告诉 MSSQL 我正在更新具有相同 formId 的单独行。上面的代码只是将所有内容都设置为 NULL。我也试过 $_SESSION['formId'][$i] (给会话变量一个索引),这只是将第一行重复了三遍。现有数据会被 proj[1] 和 budget[1] 中的任何内容覆盖。
所以如果用户将 proj[1]=100 改为 proj[1]=50, 如果他采用 proj[2]=50 并将其更改为 proj[2]=100,我需要将其反映在相应的数据库记录中。不变的一切都需要保持不变。想法?我觉得我很接近了,但缺少一些明显的东西。
【问题讨论】:
-
它们都具有相同的形式,但必须有一些独特的东西可以添加到您的 WHERE 语句中以使更新独一无二。
-
@DigitalChris:每一行都有一个自动递增的 UID。我正在尝试研究如何将该 UID 与 formId 一起合并到我的 UPDATE 语句中。有什么想法吗?
-
获取该 UID 并将其添加到 WHERE,例如
AND UID=:UID
标签: php sql sql-server