我在表单中使用了四个数组。当只使用两个数组时,它可以工作。但是超过两个数组(以下面的形式)只插入第一个学生的第一个记录。我尝试过使用multiple ,但它不能解决问题。我的PHP表单输出如下。
<form method="post" action="mark.php">
<table id="customers">
<tr>
<th>Name</th>
<th colspan="2"><input type="text" name="subjectid[]" value="Social"></th>
<th colspan="2"><input type="text" name="subjectid[]" value="Math"></th>
<th colspan="2"><input type="text" name="subjectid[]" value="English"></th>
</tr>
<tr>
<td><input type="text" name="stdname[]" value="John"></td>
<td><input type="number" name="theory[]" value=""></td>
<td><input type="number" name="practical[]" value=""></td>
<td><input type="number" name="theory[]" value=""></td>
<td><input type="number" name="practical[]" value=""></td>
<td><input type="number" name="theory[]" value=""></td>
<td><input type="number" name="practical[]" value=""></td>
</tr>
<td><input type="text" name="stdname[]" value="Rahul"></td>
<td><input type="number" name="theory[]" value=""></td>
<td><input type="number" name="practical[]" value=""></td>
<td><input type="number" name="theory[]" value=""></td>
<td><input type="number" name="practical[]" value=""></td>
<td><input type="number" name="theory[]" value=""></td>
<td><input type="number" name="practical[]" value=""></td>
</tr>
</table>
<input type="submit" name="submit1" value="submit"></input>
</form>PHP代码
<?php }
if(isset($_POST['submit1'])){
$subjectid = $_POST['subjectid'];
$theory = $_POST['theory'];
$practical = $_POST['practical'];
$stdname = $_POST['stdname'];
foreach ($theory AS $key => $item) {
$sql = "INSERT INTO mark(subjectid, theory, practical, stdname) VALUES (:subjectid, :theory, :practical, :stdname)";
$query = $con->prepare($sql);
$query->bindParam(':subjectid', $subjectid[$key]);
$query->bindParam(':theory', $theory[$key]);
$query->bindParam(':practical', $practical[$key]);
$query->bindParam(':stdname', $stdname[$key]);
$query->execute();
echo "<script>alert('Mark is inserted')</script>";
echo("<script>window.location = 'mark.php';</script>");
}
}
?>插入以下输入时

它存储在数据库中,如

但它必须作为

发布于 2018-02-03 13:59:45
似乎prepare正在用最后一条语句进行缓存。你可能会写
$sql = "INSERT INTO mark(subjectid, theory, practical, stdname) VALUES (:subjectid, :theory, :practical, :stdname)";
$query = $con->prepare($sql);
foreach ($theory AS $key => $item) { 而不是
foreach ($theory AS $key => $item) {
$sql = "INSERT INTO mark(subjectid, theory, practical, stdname) VALUES (:subjectid, :theory, :practical, :stdname)";
$query = $con->prepare($sql);其他可能的情况可能是违反任何约束,您可能对任何列都有唯一的键约束,并试图在循环中插入相同的值。您可以通过在代码中添加下面一行代码来验证。
echo $query->error;发布于 2018-02-03 16:35:22
嵌套工程的使用
foreach ($stdname AS $key => $item){
$query->bindParam(':stdname', $stdname[$key]);
foreach ($theory AS $key => $item) {
$query->bindParam(':subjectid', $subjectid[$key]);
$query->bindParam(':theory', $theory[$key]);
$query->bindParam(':practical', $practical[$key]);
$query->execute();
}
}https://stackoverflow.com/questions/48598096
复制相似问题