将$ _POST数组插入数据库

时间:2014-10-08 21:45:11

标签: php mysql arrays post insert

我的数据库中的列: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)。我想知道是否可能在表单中设置错误,并且应该以其他方式命名我的输入。

3 个答案:

答案 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']输入。