我的数据库中的列:stat_id,stat1,stat2,stat3。
我正在使用一个表单,允许我遍历成员列表并输入3个不同的统计数据。 ($ member_stat是一个已包含'stat_id'作为其键之一的数组)
foreach($member_stats as $member_stat) {
echo '<label for="stat1"> Stat 1</label>';
echo '<input type="text" name="'.$member_stat['stat_id'].'stat1" id="stat1" />';
echo '<label for="stat2"> Stat 2</label>';
echo '<input type="text" name="'.$member_stat['stat_id'].'stat2" id="stat2" />';
echo '<label for="stat3"> Stat 3</label>';
echo '<input type="text" name="'.$member_stat['stat_id'].'stat3" id="stat3" /><br />';
}
我点击提交,我的$ _POST数组/数据如下所示:
Array (
[157stat1] = 1
[157stat2] = 4
[157stat3] = 7
[158stat1] = 2
[158stat2] = 2
[158stat3] = 6
[159stat1] = 8
[159stat2] = 6
etc...
)
我的问题是:如何获取此$ _POST数组并将其插入我的数据库中?即
157 stat1 stat2 stat3
158 stat1 stat2 stat3
159 stat1 stat2 etc...
我尝试了各种各样的事情,但是我很难将我的头部分开来将stat_id与$ _POST键中的不同统计数据分开(即:stat1,stat2,stat3中的157)。我想知道是否可能在表单中设置错误,并且应该以其他方式命名我的输入。
答案 0 :(得分:1)
$out = array();
$post= array(
'157stat1' => 1,
'157stat2' => 2,
'157stat3' => 3,
'158stat1' => 1
);
foreach($post as $key => $value)
{
if (preg_match('/^(\d+)(\w+)$/', $key, $match) !== 0)
$out[$match[1]][] = $match[2];
}
var_dump($out);
循环通过$out
并准备SQL语句。
foreach($out as $key => $values)
{
// escape array $values (array('stat1', 'stat2', 'stat3, ...) for each $key)
// and string $key (it will be 157, 158 and so on)
// prepare and execute SQL statement
// function join will help to deal with array $values
}
答案 1 :(得分:0)
使用HTML数组。
foreach($member_stats as $member_stat) {
echo '<label for="stat1"> Stat 1</label>';
echo '<input type="text" name="'.$member_stat['stat_id'].'[stat1]" id="stat1" />';
echo '<label for="stat2"> Stat 2</label>';
echo '<input type="text" name="'.$member_stat['stat_id'].'[stat2]" id="stat2" />';
echo '<label for="stat3"> Stat 3</label>';
echo '<input type="text" name="'.$member_stat['stat_id'].'[stat3]" id="stat3" /><br />';
}
这将返回如下内容:
数组(
[157stat][1] = 1
[157stat][2] = 4
[157stat][3] = 7
[158stat][1] = 2
[158stat][2] = 2
[158stat][3] = 6
[159stat][1] = 8
[159stat][2] = 6
)
您可以在http://www.thefutureoftheweb.com/blog/use-arrays-with-html-form-inputs看到一个示例,另一个很棒的堆栈溢出回答:HTML input arrays
答案 2 :(得分:0)
想象一下你的$ _POST是这样的:
array(
'stats' => array(
157 => array(
stat1 => 1,
stat2 => 3,
stat3 => 4
),
158 => array(
stat1 => 2,
stat2 => 3,
stat3 => 1
)
.
.
)
)
然后你可以:
foreach ($_POST['stats'] as $whateverId => $stats) {
// now you have the desired $whateverId and
// its $stats
// you can access each stats indexing $stats like: $stats['stat1']
}
最后,您可以使用以下html表单命名(使用数组表示法)来完成所需的$ _POST格式:
foreach($member_stats as $member_stat) {
$id = $member_stat['stat_id'];
echo '<label for="stat1"> Stat 1</label>';
echo "<input type=\"text\" name=\"stats[$id][stat1]\" id=\"stat1\" />";
echo '<label for="stat2"> Stat 2</label>';
echo "<input type=\"text\" name=\"stats[$id][stat2]\" id=\"stat2\" />";
echo '<label for="stat3"> Stat 3</label>';
echo "<input type=\"text\" name=\"stats[$id][stat3]\" id=\"stat3\" /><br />";
}
不要忘记验证您的$ _POST ['stats']输入。