我有一个PHP页面,用于查询数据库以填充表单,供用户修改数据并提交 该查询返回包含3个项目的行数:
PHP页面标题表单中的每个框都带有通用名称,并将ImageID附加到它。即:
由于未知哪些图像将从数据库中检索出来,因此我无法事先知道表单条目的名称。 表单同时处理大量条目。
我的后端PHP表单处理器获取数据只是将其视为一个大数组:
[imageid_2] => 2
[imagename_2] => _MG_0214
[imageid_10] => 10
[imagename_10] => _MG_0419
[imageid_39] => 39
[imagename_39] => _MG_0420
[imageid_22] => 22
[imagename_22] => Curly Fern
[imagedescription_2] => Wibble
[imagedescription_10] => Wobble
[imagedescription_39] => Fred
[imagedescription_22] => Sally
我已经尝试在它上面进行数组散步,将其拆分为3个数组,这些数组设置了地方但是卡住了:
// define empty arrays
$imageidarray = array();
$imagenamearray = array();
$imagedescriptionarray = array();
// our function to call when we walk through the posted items array
function assignvars($entry, $key)
{
if (preg_match("/imageid/i", $key)) {
array_push($imageidarray, $entry);
} elseif (preg_match("/imagename/i", $key)) {
// echo " ImageName: $entry";
} elseif (preg_match("/imagedescription/i", $key)) {
// echo " ImageDescription: $entry";
}
}
array_walk($_POST, 'assignvars');
失败并出现错误:
array_push():第一个参数应该是......
我接近这个错误吗?
答案 0 :(得分:1)
是否可以更改表单上项目的命名方式?
电流:
更改为:
这样它应该通过$ _POST作为三个独立的数组,这意味着你可以跳过所有额外的处理。
答案 1 :(得分:0)
如果我这样做,我会用这样的形式制作:
<form method="POST">
<input type="text" name="name[1]">
<input type="text" name="desc[1]">
<input type="text" name="name[2]">
<input type="text" name="desc[2]">
...etc
</form>
所以,我有2个数组,$ _POST ['name']和$ _POST ['desc']其中id用作键
在你的情况下,我不会使用array_walk,因为它只是一个语法糖,并使用foreach
使其具有完整的数据处理控制权。
答案 2 :(得分:0)
我认为你需要
global $imageidarray;
访问函数内的全局数组。
答案 3 :(得分:0)
这样的东西也会起作用,假设你的三个表单字段总是一起提交:
$ids = preg_grep('/^imageid_(\d+)$/', array_keys($_POST)); // $ids now contains only the imageid_* keys
foreach($ids as $id) {
$id = substr($ids, 8); // now contains the numeric id of the field
echo $id, ": ", $_POST["imageid_$id"], "\n";
}
不如在表单名称中使用数组表示法有效,但允许您从一个字段名称中简单地提取ID号,然后使用它来访问其他匹配字段。