2012-01-30 55 views
0

我有四组:的foreach插入阵列栏目

$qtys = $_POST['qty']; 
$colours = $_POST['colour']; 
$sizes = $_POST['size']; 
$names = $_POST['name']; 

我想这些进入一个MySQL表所示:

qty  | colour  | size  | name 
------------------------------------------- 
$qtys[0] | $colour[0] | $size[0] | $name[0] 
$qtys[1] | $colour[1] | $size[1] | $name[1] 

我已经试过各种事情,包括这个:

foreach($qtys as $value) { 
    $i = 0; 
    mysql_query("INSERT INTO table (qty,colour,size,name) VALUES ('$qtys[$i]','$colours[$i]','$sizes[$i]','$names[$i]')"); 
    $i++; 
} 

......但无济于事。任何人都可以提出一个不同的INSERT语句来获取表中的数据吗?我是否需要循环迭代?我确定$qtys as $value是不正确的,但尝试了很多没有运气的东西。

+2

用'$ i = 0;'*在* foreach之前再试一次,否则'$ i'将始终为零。 – bfavaretto 2012-01-30 16:54:16

+0

您应该首先简单地检查您的代码是否符合您的想法......这可能是最有帮助的。 – hakre 2012-01-30 16:54:50

+1

感谢downvote,无论是谁。显然不清楚,没有研究的努力没有用。谢谢。 – 2012-01-30 16:57:08

回答

1

只需使用for循环即可,并记住ESCAPE USER INPUT

for($i =0, $count = count($qtys); $i < $count; $i++) { 
    mysql_query("INSERT INTO table (qty,colour,size,name) VALUES ('$qtys[$i]','$colours[$i]','$sizes[$i]','$names[$i]')"); 
} 
+1

现货,谢谢。我知道所有关于逃避用户输入的信息,只要我有工作,就应该完成。 – 2012-01-30 16:58:28

+0

确保数组的长度相同,否则迟早会碰到索引越界问题。 – MrKiane 2012-01-30 17:01:10

2

首先,你在每个迭代复位计数器,把$i = 0之外循环的,如果你想要做这种方式。

$i = 0; 
foreach($qtys as $value) { 
    mysql_query("INSERT INTO table (qty,colour,size,name) VALUES ('$qtys[$i]','$colours[$i]','$sizes[$i]','$names[$i]')"); 
    $i++; 
} 

一个更好的(清洁剂)的方法是这样的:

for ($i = 0; $i < $qtys.count(); $i++) { 
    mysql_query("INSERT INTO table (qty,colour,size,name) VALUES ('$qtys[$i]','$colours[$i]','$sizes[$i]','$names[$i]')"); 
} 

此外,你确保数组始终具有相同的长度?否则,您可能会遇到索引越界问题。

+0

谢谢。它们的长度始终相同,是的,它将在执行前进行验证。 – 2012-01-30 17:00:25

1
$sql = "INSERT INTO table (qty,colour,size,name) VALUES "; 

$inserts = array(); 
for($i=0 ; $i < count($qtys); $i++) { 
    $inserts[] = "('$qtys[$i]','$colours[$i]','$sizes[$i]','$names[$i]')"; 
} 

$sql .= implode(',', $inserts); 
mysql_query($sql); 

不需要一次又一次地运行查询。