1

我有一个行数未知的表。我正在尝试将编辑保存到复选框字段、选择字段和文本字段。

以下是表格行的示例(概括):

<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

编辑:

接下来,我将尝试以下方法之一:

  1. 使用 php 创建唯一的名称属性(item11item12item13等),并增加一个for循环来计算表中有多少行,更改变量并执行查询。这似乎太乱了,但我想不出别的……,

  2. 如我发现的其他示例中所示foreach,不要执行循环,而是执行循环。for不确定它会改变什么,但我想值得一试。

我会报告我发现的。

4

1 回答 1

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,这似乎是您要查找的内容。

于 2012-07-09T00:08:42.547 回答