2010-10-13 192 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 
}