0

我不完全确定该标题的描述性如何,但是:

在 Wordpress 中,我有一个自定义的数字数据表,它每月添加(通过电子表格导入)。因此,我$wpdb用来提取该表的内容,该表作为 stdClass 对象数组返回:

Array
(
    [0] => stdClass Object
        (
            [id] => 553
            [assocID] => 1
            [title] => Afghanistan
            [weight_political] => 8.2
            [indicator_political] => 0.0
            [weight_security] => 9.5
            [indicator_security] => 0.0
            [weight_criminal] => 9.5
            [indicator_criminal] => 1.0
            [weight_governance] => 9.0
            [indicator_governance] => 0.0
            [overall_score] => 9.2
            [datamonth] => 2013-08-18
            [active] => 1
        )

    [1] => stdClass Object
        (
            [id] => 369
            [assocID] => 1
            [title] => Afghanistan
            [weight_political] => 8.4
            [indicator_political] => 0.0
            [weight_security] => 9.5
            [indicator_security] => 0.0
            [weight_criminal] => 9.3
            [indicator_criminal] => 1.0
            [weight_governance] => 9.0
            [indicator_governance] => 0.0
            [overall_score] => 9.2
            [datamonth] => 2013-07-05
            [active] => 1
        )

)

这很好,给了我我想要的东西,然后我可以将其作为一系列输入字段回显出来以进行编辑(参见我的jsFiddle示例输出)。

但是,我无法理解(我很确定我在这里只是超级愚蠢并且遗漏了一些明显的东西)是将适当的数据保存适当的数据库行。

我考虑过将输入名称设置为数组(即<input name="weight_security[]"...),但它显然缺少引用。我希望将 2013 年 8 月的数据(id 553)保存到 2013 年 8 月的行;我只是不知道在哪里或如何实现该参考。

在此示例中,只有 2 行,但一旦上线,可能会有多达 14 行,并将添加到每月,因此同时修改多行的能力是关键。

任何帮助是极大的赞赏。

4

1 回答 1

1

回答我自己的问题:关键在于输入名称的多维数组;因此,而不是多个字段,例如:

<input name="weight_political" value="8.2" />
<input name="indicator_political" value="0" />

我决定更上一层楼,将这些字段名称包装在一个名为的数组中geodata,并且至关重要的是,用一个数组键作为需要更新的行的 ID 作为前缀,因此:

<input name="geodata[553][weight_political]" value="8.2" />
<input name="geodata[553][indicator_political]" value="0" />

然后,在解析发布的数据时,我可以遍历geodata数组以获取行 ID(作为键),然后将数据作为其中的关联数组:

<?php
if ($_POST["geodata"]) {

        foreach ($_POST["geodata"] as $rowID=>$valuesArray) {

            $queryArray = array();

            foreach ($valuesArray as $key=>$value) {
                $queryArray[] = $key . ' = '  . $value;
            }

            $queryString = implode(', ', $queryArray);

            $wpdb->query("UPDATE $table_name SET $queryString WHERE id = $rowID");

        }
    }
?>

还:

为了尽可能提高效率(因为初始的 9x14 网格会返回 126 个值来更新,其中许多是不必要的),我编写了一个小的 jQuery 函数来检测输入字段何时更改;如果是这样,则将其name更改data[id][identifier]geodata[id][identifier]- 这样,$_POST['geodata']只会发送需要更新的值,而不是整个批次。下面的jsFiddle,有兴趣的可以看看。

http://jsfiddle.net/hkVTn/1/

于 2013-09-11T18:52:56.273 回答