我有一个行数未知的表。我正在尝试将编辑保存到复选框字段、选择字段和文本字段。
以下是表格行的示例(概括):
<tr onMouseover="this.bgColor='#EEEEEE'"onMouseout="this.bgColor='#FFFFFF'">
<input type="hidden" name="batchupdate[][item1]" value="118">
<td><a target="blank" href="www.link.com">Link</a></td>
<td>Name</td>
<td><input value="" type="text" name="batchupdate[][item2]" size=35></td>
<td>
<select name="batchupdate[][item3]">
<optgroup label="Group 1">
<option >1</option>
<option >2</option>
<option >3</option>
<option >4</option>
<option >5</option>
</optgroup>
<optgroup label="Group 2">
<option >6</option>
<option >7</option>
<option >8</option>
<option >9</option>
</optgroup>
</select>
</td>
<td><input type="checkbox" value="FALSE" name="batchupdate[][item4]"></td>
</tr>
“id”(item1)是我的 postgresql 数据库中的自动递增字段。
这是php:
if(isset($_POST['savebutton'])) {
if(isset($_POST['bachtupdate']) || is_array($_POST['batchupdate']))
{
foreach($_POST['batchupdate'] as $i)
{
$item1 = $i['item1'];
$item2 = $i['item2'];
$item2 = pg_escape_string($item2);
$item3 = $i['item3'];
if(isset($i['item4'])){
$item4 = "TRUE";
} else {
$item4 = "FALSE";
}
$query = "UPDATE schema.table SET field2='$item2', field3='$item3', field4='$item4' WHERE id='$item1'";
$result = pg_query($database, $query);
if ($result) {
// success
} else {
die("Error: " .pg_last_error());
}
在这之后还有一些其他的逻辑,但是查询部分是它失败的地方。我收到一个错误,基本上 item3 和 id (item1) 是空的,所以它找不到要更新的行。Items2 和 4 工作正常,我可以在 postgres 提供的错误消息中看到它们包含的内容。
我在网上找到了这个解决方案,并将其改编为我自己的使用。我只是对为什么某些领域有效而其他领域无效感到困惑。想法?
编辑:
这就是带有回声的输出(在 foreach 循环内)。我注释掉了 postgres 查询。请注意,它执行了两次。我还注意到复选框没有返回 true。然而,所有的信息都在那里......,
118(id),文本框 1,选项 2,FALSE(复选框)
119 (id),文本框 2,选项 3
118(id),文本框 1,选项 2,FALSE(复选框)
119 (id),文本框 2,选项 3
编辑:
接下来,我将尝试以下方法之一:
使用 php 创建唯一的名称属性(
item11
、item12
、item13
等),并增加一个for
循环来计算表中有多少行,更改变量并执行查询。这似乎太乱了,但我想不出别的……,如我发现的其他示例中所示
foreach
,不要执行循环,而是执行循环。for
不确定它会改变什么,但我想值得一试。
我会报告我发现的。