2014-11-21 67 views
-1

我試圖做一個使用數組的表單,所以一旦它被提交和處理多行插入到我的數據庫。我的主程序比下面的程序更復雜,但我無法正常工作,所以我決定創建一個小的簡單程序來更好地理解基本語法,然後將這些技術應用到主程序中。我已經使用折舊的MySQL工作,但將其轉換爲MySQLi會導致問題,我不知道是否可以獲得幫助。從使用MySQLi的HTML表單插入多行到數據庫

我的形式設置這樣

<html> 
<title>multi row insert test form</title> 
<body> 
<table> 
<form action="process2.php" method="post"> 
<tr> 
<th>forename</th> 
<th>surname</th> 
<th>level</th> 
</tr> 
<tr> 
<td><input type="text" name="fname[]"></td> 
<td><input type="text" name="sname[]"></td> 
<td> 
<select name="level[]"> 
<option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
<option value="4">4</option> 
</select> 
</td> 
</tr> 
<tr> 
<td><input type="text" name="fname[]"></td> 
<td><input type="text" name="sname[]"></td> 
<td> 
<select name="level[]"> 
<option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
<option value="4">4</option> 
</select> 
</td> 
</tr> 
<tr> 
<td><input type="submit" name="submit" value="Submit"></td> 
</tr> 
</form> 
</table> 
</body> 
</html> 

和更新使用庫MySQLi數據庫中的PHP頁面如下

<?php 
include 'dbconnect2.php'; 
$fname = $_POST['fname']; 
$sname = $_POST['sname']; 
$level = $_POST['level']; 


if ($stmt = $mysqli->prepare("INSERT INTO people (fname, sname, level) values (?, ?, ?)")) { 

$stmt->bind_param('ssi', $fname, $sname, $level); 

for ($i=0; $i<2; $i++) 
{ 
$fname[$i] = $fname; 
$sname[$i] = $sname; 
$level[$i] = $level; 

$stmt->execute(); 
echo "Done"; 
} 

$stmt->close(); 
} 
?> 

回答

0

或者,用量少,重寫現有代碼:

$fnames = $_POST['fname']; 
$snames = $_POST['sname']; 
$levels = $_POST['level']; 

$stmt = $mysqli->prepare("INSERT INTO people (fname, sname, level) values (?, ?, ?)") 

for ($i=0; $i<count($fnames); $i++) { 
    $fname = $fnames[$i]; 
    $sname = $snames[$i]; 
    $level = $levels[$i]; 
    $stmt->bind_param('ssi', $fname, $sname, $level); 

    $stmt->execute(); 
} 
echo "Done"; 

$stmt->close(); 
+0

當我提交表單時,你提供的所有出現在mysql表的2行中的數組是Array Array 1 – Smush 2014-11-24 12:43:28

+0

我想我必須輸入錯誤的東西,因爲它現在可以工作。謝謝 – Smush 2014-11-24 13:14:52

0

試試這個。您需要迭代所有的發佈數據,並將它們綁定到循環中。

include 'dbconnect2.php'; 
for ($i = 0; $i < count($fname); $i++) { 
    $stmt = $mysqli->prepare("INSERT INTO people (fname, sname, level) values (?, ?, ?)"); 
    $stmt->bind_param('ssi', $_POST["fname"][$i], $_POST["sname"][$i], $_POST["level"][$i]); 
    $stmt->execute(); 
} 
echo "Done"; 
$stmt->close(); 
+0

您提供的不提交任何東西到數據庫,但在非給出了錯誤「調用一個成員函數close()的代碼-object「 – Smush 2014-11-24 12:45:38

相關問題