我有一个行数未知的表。我正在尝试将编辑内容保存到复选框字段,选择字段和文本字段。
以下是表格行的示例(概括):
<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)是空的,所以它找不到要更新的行。第2项和第4项工作正常,我可以在postgres提供的错误消息中看到它们包含的内容。
我在网上找到了这个解决方案并根据自己的需要进行了调整。我只是为什么有些领域有效而其他领域没有,我感到很困惑。想法?
编辑:
这是回声与forech循环内部相似的结果(在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
循环,如我发现的其他示例所示。不知道它会改变什么,但我觉得值得一试。
我会报告我发现的内容。
答案 0 :(得分:0)
您展示的HTML有多广泛?
我的意思是,当你写作
<input type="hidden" name="batchupdate[][item1]" value="118">
你确实在batchupdate的第一个键中放了一些东西,不是吗?
因为否则POST会发出,比方说
batchupdate[][item1]=118&batchupdate[][item3]=124...
将在batchupdate []中创建两个不同的行,一个用item1,另一个只有item3,因为[]是自动递增语法。
行的每个“组”应具有不同的ID作为第一个索引:
<input type="hidden" name="batchupdate[row1][item1]" value="118">
<input type="hidden" name="batchupdate[row1][item2]" value="119">
<input type="hidden" name="batchupdate[row1][item3]" value="120">
...
<input type="hidden" name="batchupdate[row2][item1]" value="123">
这将导致batchupdate的一个条目,其中item1,2和3已定义,并且等于118,119和120,这似乎正是您要找的。 p>