对于从post到数据库添加数组感到困惑

时间:2011-11-07 04:18:02

标签: php arrays multidimensional-array

我有一个复杂的数组(至少对我来说看起来很复杂)。我有一个表格,您可以选择一个人,一个开始时间和一个结束时间。然后,您可以通过单击+按钮添加更多人。所以我为数组命名了三个选择字段,如“select_dancer []”。

当我打印我的结果时,它看起来像这样:

Array
(
    [month_year] => 2011-11
    [select_dancer] => Array
        (
            [0] => 1
            [1] => 2
        )

    [time_from] => Array
        (
            [0] => 12:00pm
            [1] => 1:00pm
        )

    [time_to] => Array
        (
            [0] => 12:30pm
            [1] => 1:30pm
        )
)

基本上,键0是一个人,键1是另一个人。等等我无法将其添加到数据库中。我的表基本上是:id,date,dancer,from,to。所以我想要它所以我可以将每个键“分组”在一起并将值提交给数据库。

如果有人能帮助我,那就太棒了。

4 个答案:

答案 0 :(得分:4)

在HTML

中,更简单的字段分组方法就是这样
<input name="dancer[0][id]" ...
<input name="dancer[0][time_from]" ...
<input name="dancer[0][time_to]" ...

添加每个组时,请在第一个方括号中增加数字。

您生成的$_POST数组看起来像

Array
(
    [month_year] => 2011-11
    [dancer] => Array
    (
        [0] => Array
        (
            [id] => 1,
            [time_from] => 12:00pm
            [time_to] => 12.30pm
        )
        [1] => Array
        (
            [id] => 2
            [time_from] => 1:00pm
            [time_to] => 1:30pm
        )
    )
)

然后,您可以为每组值迭代$_POST['dancer']数组,例如(非常简化)

foreach ($_POST['dancer'] as $dancer) {
    if (!isset($dancer['id'], $dancer['time_from'], $dancer['time_to'])) {
        throw new Exception('All fields are required');
    }

    $id       = $dancer['id'];
    $timeFrom = $dancer['time_from'];
    $timeTo   = $dancer['time_to'];
}

答案 1 :(得分:0)

如果元素select_dancertime_fromtime_to中的每一个具有相同的数组大小,您可以轻松检查其中的任何一个并使用它进行循环:

警告:未经编辑的代码

foreach($post_array['select_dancer'] as $key => $value)
{
    $sql = "INSERT INTO dance_table(date, dancer, from, to) ";
    $sql .= "VALUES('{$wherever_you_got_the_date}', '{$value}',";
    $sql .= "'" . $post_array['time_from'][$key] . "', ";
    $sql .= "'" . $post_array['time_from'][$key] . "')";
}

答案 2 :(得分:0)

尝试这样的事情:

for ($i = 0; $i < count($mydata["select_dancer"]); $i++)
{
    $insert = "insert into mytable (date, dancer, from to) values ($mydata['month_year'], $mydata['select_dancer'][$i], $mydata['time_from'][$i], $mydata['time_to'][$i])";
    do_sql_insert($insert);
}

有了这个,你很容易受到注入攻击以及特定舞者在每个子阵列中没有代表索引的可能性。如果可以,请使用@Phil写的内容。

答案 3 :(得分:0)

foreach($_POST[select_dancer] as $key => $value) {
   $sql = "insert into table set dancer=$value,from='{$_POST['time_from'][$key]}',to={$_POST['time_to'][$key]}';"
  //execute the SQL ...
}
当然,在现实生活中得到了处理将防止SQL注入等,但访问阵列的原则是相同的