在同一个表中插入两种数组

时间:2009-05-14 01:59:28

标签: php

我在这里有一个来自表单的两个数组的例子,

<input type="text" name="children[]" />
<input type="text" name="age[]" />

我的问题是将上面的值插入到同一个表中,如

insert into childTable(children,age) values('children[]','age[]')

它是以数组的形式因为我不知道有多少孩子输入.. 你可以帮我解决这个问题???? 任何答案都将受到高度赞赏...谢谢!

3 个答案:

答案 0 :(得分:2)

表格中的数据可以在PHP中的$ _POST变量(或$ _GET中访问,但您应该使用$ _POST,例如:<form method="post">)。

我在设计表单后通常做的第一件事就是将其发布回脚本并添加以下行:

print_r($_POST);

这将显示您正在使用的数据的结构。在你的情况下,它看起来像这样:

array(
    "children" => array(
        0 => "Bobby",
        1 => "Mary",
        2 => "Janey"
    ),
    "age" => array(
        0 => 8,
        1 => 12,
        2 => 7
    )
);

(我假设每个age字段都有一个相应的children字段,是吗?)

因此,这只是循环遍历数组的问题:

$numKids = count($_POST['children']);
$values = array();

for ($i = 0; i < $numKids; ++$i) {
    $values[] = "('" . mysql_real_escape_string($_POST['children'][$i]) . "'"
              . ", " . intval($_POST['age'][$i]) . ")";
}
$sql = "INSERT INTO `childTable` (`children`, `age`) "
     . "VALUES " . implode(",", $values);

答案 1 :(得分:0)

我认为你需要一个for循环。

伪代码:

for(int i = 0; i < children.Length; i++)
{
    insert into childTable(child, age) values(children[i], ages[i])
}

答案 2 :(得分:0)

多个值表单字段实际上并不打算用于匹配这样的字段。我们无法保证多个$_POST['children']$_POST['age']值最终会以相同的顺序提交,或者甚至会使用相同数量的元素。

最好使用一系列编号字段,例如:

Child 1:    
<input name="children_1" />
<input name="age_1">
<br />
Child 2:
<input name="children_2" />
<input name="age_2" />
...

然后使用这样的代码来迭代提交的值:

$i = 1;
while (isset($_POST['children_' . $i]) && isset($_POST['age_' . $i])) {
    if ($_POST['children_' . $i] != '') {
        mysql_query('insert into childTable (children, age) values (\''
           . mysql_real_escape_string($_POST['children_' . $i]) . '\', \''
           . mysql_real_escape_string($_POST['age_' . $i]) . '\')');
    }
    $i++;
}

当然,在现实世界中,您还需要添加一些验证,以便在将这些值插入数据库之前检查这些值是否有意义。