我有一个用我的数据库用PHP动态生成的表(这对我来说本身就是一个胜利)。用户可以根据需要输入任意数量的字段和记录
在点击提交时,更新的记录应在数据库中更新。我可能会更新所有记录,即使是那些没有改变的记录,但这有点蹩脚。我已经开始序列化数据字符串了,它看起来像是:
类别=电话及安培; error_level = 1&安培; SERVICE_NAME = API&安培;状态=严重&安培;笔记=无&安培;类别=电话及安培; error_level = 1&安培; SERVICE_NAME =内向+电话和安培;状态=严重&安培;笔记=无&安培;类别=电话及安培; error_level = 2及SERVICE_NAME =出站+电话和放大器;状态=轻微+问题和放大器;票据=无&放大器;类别=消费和放大器; error_level = 1&安培; SERVICE_NAME = www.website1.com和放大器;状态=严重和放大器;票据=无&放大器;类别=消费和放大器; error_level = ...
然而,我不知道如何继续;即我不知道如何处理这个查询字符串。它现在包含所有行的所有值。如何将其分解为记录,以及如何在数据库中更新它们?
我考虑用正则表达式将它们拆分成行,然后在列表上进行迭代......但这对我来说似乎很烦人。有什么想法吗?
答案 0 :(得分: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');
如果你想在一个多维数组中使用所有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>
当POSTed时,会给你一个类似
的数组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'
)
)
您可能会发现这更容易使用。
答案 1 :(得分:1)
使用“&amp;”爆炸您的数据字符串作为分隔符。循环遍历生成的数组,并使用“=”作为分隔符来爆炸每个项目。
但是你不能在没有编码的情况下发送那样的字符串,否则PHP会把它拆分为“&amp;”在你可以之前,可能会造成一团糟。或者你可以获得原始的帖子数据,并用该字符串进行尝试。
真的,发送整个表单可能更容易。
答案 2 :(得分:0)
让自己熟悉数组和JSON。
JSON将帮助您将数组从javascript序列化为PHP。在PHP中,您可以遍历(PHP)数组,然后处理数组的记录并根据需要插入/更新到数据库。
您必须手动执行此操作,直到最后开始,但请将其保留为JavaScript和PHP的内置功能。</ p>
答案 3 :(得分: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语句读取它们。