2014-11-21 96 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

相关问题