2010-10-13 520 views
0

我有一个动态输出窗体,其中文本输入字段具有相同的名称。我需要通过 循环输入文本并为数据库中的每个文本字段输入插入多行。通过窗体输入数组循环

$sql="INSERT INTO orderitems (orderNum,productNum,quant) 
     VALUES 
    ('$num1','$_POST[pNum]','$_POST[quant]')"; 


<input type="text" name="pNum" value="<?php echo $t1; ?>"> //may have several with same name 
+0

你必须给这些字段命名为'pNUm []',否则PHP无法处理具有相同名称的多个字段。看看这里:http://php.net/manual/en/language.variables.external.php – 2010-10-13 13:07:46

回答

1

Soooo ....循环它们并插入多行?

for ($i = 0; $i < count($_POST['pNum']); $i++) { 
    $sql = 'INSERT INTO orderitems (orderNum, productNum, quant) VALUES (' 
     . "'" . mysql_real_escape_string($num1) . "', " 
     . "'" . mysql_real_escape_string($_POST['pNum'][$i]) . "', " 
     . "'" . mysql_real_escape_string($_POST['quant'][$i]) . "'" 
     . ')'; 
} 

注意使用mysql_real_escape_string。从不,从不$_POST$_GET$_COOKIE或您用户直接提供给SQL语句的任何其他值注入值。除了可能破坏值(如果值包含'),还可以恶意使用它来注入更改(或擦除)数据库的SQL。

+0

在一个循环中的请求是不好的,你可以插入许多行只有一个INSERT请求。 – MatTheCat 2010-10-13 13:07:49

+0

这并不坏。对于小数据集,试图生成一个“INSERT”的额外复杂性是不值得的。 – VoteyDisciple 2010-10-13 13:49:33

+0

感谢您的回复,出于某种原因,这只是选择最后一个输入字段并将其插入两次。有任何想法吗? – cam 2010-10-13 15:24:44

1

如果你想用同一名称的多个输入提交表单,你应该添加[]的名称。然后你可以使用它在PHP端为每个数组(即foreach循环)

<input type="text" name="pNum[]" value="<?php echo addslashes($t1); ?>"> (顺便说一句,永远记住报价)

和PHP方面:

foreach($_POST['pNum'] as $value) 
{ 
    // remember about quoting here, too 
}