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



我有一个复杂的数组(至少在我看来很复杂(。我有一个表格,你可以选择一个人,开始时间和结束时间。然后,您可以通过单击+按钮添加更多人员。因此,我将三个select字段命名为数组的"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。所以我想要它,这样我就可以将每个键"分组"在一起,并将值提交到数据库。

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

一种更简单的字段分组方法是在您的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'];
}

试试这样的东西:

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写的去做吧。

如果元素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] . "')";
}
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注入等的保护,但访问数组的原理是相同的

相关内容

  • 没有找到相关文章

最新更新