0

我有一个使用 PHP 从我的数据库动态生成的表(这对我来说本身就是一个胜利)。用户可以根据需要对任意数量的字段和记录进行更改

点击提交后,更新的记录应在数据库中更新。我可能会更新所有记录,即使是那些没有改变的记录,但这有点蹩脚。我已经开始序列化数据字符串,它看起来像:

category=Phone&error_level=1&service_name=API&status=Critical¬es=None&category=Phone&error_level=1&service_name=Inbound+Calls&status=Critical¬es=None&category=Phone&error_level=2&service_name=Outbound+Calls&status=次要+issue¬es=None&category=Consumer&error_level=1&service_name=Critical¬es=1.无&category=Consumer&error_level=…</p>

但是,我不知道如何进行;即我不知道如何处理这个查询字符串。它现在包含所有行的所有值。如何将其分解为记录,以及如何在数据库中更新它们?

我考虑过用正则表达式将它们分成几行,然后遍历列表……但这对我来说似乎很老套。有什么想法吗?

4

4 回答 4

3

如果要获取所有值,则不能多次使用相同的参数名称。在这种情况下,您只会得到一个值。

您可能需要做的是在输入字段名称中使用数组访问表示法。

我假设您对每一行都有某种整数 id,以便您知道数据库中该行的 id 并可以将其关联起来。如果是这种情况,您可以像这样输入:

(注意:为简单起见,我在表格中显示输入,因为您提到您有一个表格)

<tr>
    <td><input name="some_column_name[1]" ... /></td>
    <td><input name="another_column_name[1]" ... /></td>
    <td><input name="third_column_name[1]" ... /></td>
</tr>
<tr>
    <td><input name="some_column_name[2]" ... /></td>
    <td><input name="another_column_name[2]" ... /></td>
    <td><input name="third_column_name[2]" ... /></td>
</tr>

请注意每个name属性的括号中的值如何成为该行的整数 id。

现在,当您发布此数据时,PHP 将$_POST像这样组装数组:

var_dump($_POST['some_column_name']);
var_dump($_POST['another_column_name']);
var_dump($_POST['third_column_name']);

会输出:

Array([1] => 'some value', [2] => 'some other value');
Array([1] => 'some value 2', [2] => 'some other value 2');
Array([1] => 'some value 3', [2] => 'some other value 3');

如果您希望将所有 POST 值放在一个多维数组中,您甚至可以考虑执行以下操作:

<tr>
    <td><input name="table_data[1][some_column_name]" ... /></td>
    <td><input name="table_data[1][another_column_name]" ... /></td>
    <td><input name="table_data[1][third_column_name]" ... /></td>
</tr>
<tr>
    <td><input name="table_data[2][some_column_name]" ... /></td>
    <td><input name="table_data[2][another_column_name]" ... /></td>
    <td><input name="table_data[2][third_column_name]" ... /></td>
</tr>

哪个,当发布时,会给你一个像

Array
([1] => Array(
    ['some_column_name'] => 'value',
    ['another_column_name'] => 'value',
    ['third_column_name'] => 'value'
    ),
 [2] => Array(
    ['some_column_name'] => 'value',
    ['another_column_name'] => 'value',
    ['third_column_name'] => 'value'
    )
)

您可能会发现这更容易使用。

于 2013-08-01T16:25:34.883 回答
1

使用“&”作为分隔符来分解您的数据字符串。循环遍历生成的数组并使用“=”作为分隔符分解每个项目。

但是你不能在没有编码的情况下发送这样的字符串,否则 PHP 会在你可以之前将它拆分为“&”字符,这可能会造成混乱。或者您可以获取原始帖子数据并使用该字符串进行尝试。

真的,只发送整个表格可能更容易。

于 2013-08-01T16:15:50.910 回答
0

让自己熟悉数组和JSON

JSON 将帮助您将数组从 javascript 序列化为 PHP。在 PHP 中,您可以遍历(PHP)数组然后处理数组的记录并根据需要插入/更新到您的数据库。

您不能像上面开始那样手动执行此操作,而是将其留给 JavaScript 和 PHP 的内置功能。

于 2013-08-01T16:15:50.373 回答
0

现在看起来像这样

category=Phone
error_level=1
service_name=API
status=Critical
notes=None

category=Phone
error_level=1
service_name=Inbound+Calls
status=Critical
notes=None

category=Phone
error_level=2
service_name=Outbound+Calls
status=Minor+issue
notes=None

category=Consumer
error_level=1
service_name=www.website1.com
status=Critical
notes=None

目前,无法区分一条记录与另一条记录,因此您无法运行 if 语句来检查该记录是否已更新。如果您可以添加另一个包含行的唯一 ID 的输入字段(即使它被隐藏),您可以运行 If 语句来检查记录是否已更改,然后在该行上运行 MySQL Update 语句。

如果没有独特的东西来检查它是否已更新,我只会删除所有行并使用每行的 Insert 语句读取它们。

于 2013-08-01T16:21:28.733 回答