多条记录连接在一个查询字符串中


Multiple records concatenated in one query string

我用PHP从数据库中动态生成了一个表(这本身就是我的胜利)。用户可以根据自己的需要输入对任意多个字段和记录的更改

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

category=电话&error_level=1&service_name=API&status=关键&notes=无&category=电话&error_level=1&service_name=入站+呼叫&status=关键&notes=无&category=电话&error_level=2&service_name=出站+呼叫&status=次要+问题&notes=无&category=消费者&error_level=1&service_name=www.website1.com.amp;status=关键&notes=无&category=消费者&error_level=…

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

我考虑过用正则表达式将它们拆分成行,然后在列表上迭代。。。但这对我来说似乎很生气。有什么想法吗?

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

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

我假设您对每一行都有某种整数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');

如果您希望将所有POSTed值都放在一个多维数组中,您甚至可以考虑这样做:

<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'
    )
)

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

使用"&"作为分隔符分解数据字符串。循环遍历生成的数组,并使用"="作为分隔符分解每个项。

但是,如果不对字符串进行编码,就不能发送这样的字符串,否则PHP会在发送之前将其拆分为"&"字符,可能会造成混乱。或者,您可以获取原始的post数据,并使用该字符串进行尝试。

发送完整的表格可能会更容易,真的。

让自己熟悉数组和JSON。

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

您不能像上面开始的那样手动完成,而是将其留给JavaScript和PHP的内置功能。

现在看起来像这个

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语句读取它们。