我的表包含表单输入字段,其中值来自数据库。现在我想在数据库的新表中提交值。但是当我按下提交按钮时,只插入最后一行!我犯的错是什么?请帮忙。
数据提取代码:
<?php
if (isset($_POST['show'])) {
$class = $_POST["Class"];
$sql = "SELECT * FROM students WHERE Class='$class' ORDER BY Roll ";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
?>
<form action="" method="POST">
<table class="table table-bordered table-hover" style="width: 85%;text-align: center">
<tr >
<th>Roll</th>
<th>Student's Name</th>
<th>Attendance</th>
</tr>
<?php while ($row = $result->fetch_assoc()) { ?>
<tr>
<td><input value="<?php echo $row['Roll']; ?>" name="Roll[]" readonly required=""/></td>
<td><input value="<?php echo $row['Name']; ?>" name="Name[]" readonly required=""/></td>
<td><select name="Status[]">
<option value="0">0</option>
<option value="1">1</option>
</select></td>
</tr>
<?php } ?>
</table>
<input type="submit" name="save" value="Save" style="width: 50%;margin-left: 20%">
</form>
<?php
} else {
$message = "Sorry! No result!";
echo "<script type='text/javascript'>alert('$message');</script>";
}
$conn->close();
}
?>
数组插入代码:
<?PHP
if (isset($_POST["save"])) {
foreach ($_POST["Roll"] as $rec => $value) {
$Roll = $_POST["Roll"][$rec];
$Name = $_POST["Name"][$rec];
$Status = $_POST["Status"][$rec];
$Date = date('Y-m-d');
$sql = "INSERT INTO `attendance`(`id`, `Date`, `Roll`, `Name`, `Status`) VALUES ('','$Date','$Roll','$Name','$Status')";
}
if ($conn->query($sql) === TRUE) {
$message = "Saved !";
echo "<script type='text/javascript'>alert('$message');</script>";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
?>
答案 0 :(得分:0)
用这个替换相关的行:
$sql .= "INSERT INTO `attendance`(`id`, `Date`, `Roll`, `Name`, `Status`) VALUES ('','$Date','$Roll','$Name','$Status');";
然后在foreach循环之前添加:
$sql = "";
如果您使用的是mysqli,那么您还需要将if语句替换为:
if ($conn->multi_query($sql) === TRUE) {
这会将所有插入组合成一个可以用一个查询语句执行的字符串,而不是将查询放在foreach中并对数据库进行n次调用。
答案 1 :(得分:0)
1)正如John Ellmore在评论中所发表的那样:
您需要在foreach循环中调用$ conn-&gt; query(...),而不是在它之后。 -
2)如果你的代码“更漂亮”,你可能会更容易注意到这个问题。为每个循环或其他包含缩进三个空格。当你退出夹杂物时,并且恢复正常。然后你(很可能)很容易看到你的问题。这些“最佳实践”项目经常受到“专业人士”甚至是新手的嘲笑。但是一个好的IDE可以帮助你完成这个缩进过程,并且可能每天编码都会让生活更轻松。