通过在 PHP 表单中按提交按钮,在 MySQL table 中输入多行
Enter multiple rows in an MySQL table by pressing the Submit button in a PHP Form
因此作为序言 - 我正在尝试在我的网站上实现“标记出勤”功能,我将所有注册学生打印在 table 中(包裹在 )中 - 每个学生都有一个“出席/缺席”单选按钮,一旦管理员选择了他的首选选项,他按“提交”,表格应标记所有学生出席或缺席,即插入多行(等于 [=31 中的学生总数=]) 以及他们的出勤状态,即缺席或出席。
以下是代码的 HTML 部分(与一些 PHP 混合):
<form action="adminmarkattendance.php" method="post">
<div class="row">
<div class="col">
<div class="card bg-default shadow">
<div class="card-header bg-transparent border-0">
<div class="form-inline">
<div class="col-lg-6">
<h3 class="text-white mb-0">Registered Students</h3>
</div>
<div class="col-lg-6">
<div class="form-group">
<input style="width: 100%;" class="form-control" name="attendancedate" type="date" required>
</div>
</div>
</div>
</div>
<div class="table-responsive" style="overflow-y: scroll; height: 600px;">
<table class="table align-items-center table-dark table-flush">
<thead class="thead-dark">
<tr>
<th scope="col" class="sort" data-sort="name">Avatar</th>
<th scope="col" class="sort" data-sort="name">Student Name</th>
<th scope="col" class="sort" data-sort="status">Phone Number</th>
<th scope="col" class="sort" data-sort="status">Age</th>
<th scope="col" class="sort" data-sort="status">Gender</th>
<th scope="col" class="sort" data-sort="status">Address</th>
<th scope="col" class="sort" data-sort="status">Action</th>
</tr>
</thead>
<tbody class="list">
<?php
foreach ($getRows as $row) {
$i = 0; ?>
<tr>
<td>
<img src="<?php echo '../profileImages/' . $row['profile_image'] ?>" width="45" height="45" alt="">
<input type="hidden" name="id" value="<?php echo $row['student_id']; ?>">
</td>
<th scope="row">
<div class="media align-items-center">
<div class="media-body">
<span class="name mb-0 text-sm"><?php echo $row['fname'] . ' ' . $row['lname']; ?></span>
</div>
</div>
</th>
<td>
<span class="badge badge-dot mr-4">
<span class="status"><?php echo $row['phonenumber']; ?></span>
</span>
</td>
<td>
<span class="badge badge-dot mr-4">
<span class="status"><?php echo $row['age']; ?></span>
</span>
</td>
<td>
<span class="badge badge-dot mr-4">
<span class="status"><?php echo $row['gender']; ?></span>
</span>
</td>
<td>
<span class="badge badge-dot mr-4">
<span class="status"><?php echo $row['address']; ?></span>
</span>
</td>
<td>
<div class="btn-group btn-group-toggle" data-toggle="buttons">
<label class="btn btn-secondary active">
<input type="radio" name="options" value="present" id="option1" autocomplete="off" checked> Present
</label>
<label class="btn btn-secondary">
<input type="radio" name="options" value="absent" id="option2" autocomplete="off"> Absent
</label>
</div>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="text-center">
<button type="submit" name="submit" style="width: 100%;" class="btn btn-warning">Mark Attendance</button>
</div>
</form>
PHP:
if (isset($_POST["submit"])) {
$student_id = $_POST["id"];
$date = $_POST['attendancedate'];
$date = date('Y-m-d', strtotime($date));
$status = $_POST['options'];
$queryInsert = $conn->prepare("INSERT
into attendance
(
student_id,
date,
status
)
values
(
$student_id,
'$date',
'$status'
)
");
$queryInsert->execute();
echo "<script> location.replace('adminmarkattendance.php'); </script>";
}
正如您可能在代码中看到的那样 - 我只是想插入学生的 ID、日期和他的 present/absent 状态。
现在,当我按提交时,只有 1 个学生的信息被插入到考勤中 table。通常是最后一个学生。这不是我想要的 - 我希望在按下提交时插入 X 行,其中 X 等于 table.
中的学生人数
我该如何实现?感谢阅读。
你需要的是提交整个数据,然后像这样循环遍历它
<input type="hidden" name="id[]" value="<?php echo $row['student_id']; ?>">
<input type="radio" name="options[]" value="absent" id="option2" autocomplete="off"> Absent</label>
然后
if (isset($_POST["submit"]))
{
for($i=0;$i<count($_POST["id"]);$i++)
{
$student_id = $$_POST["id"][$i]];
$date = $_POST['attendancedate'];
$date = date('Y-m-d', strtotime($date));
$status = $_POST['options'][$i]];
$queryInsert = $conn->prepare("INSERT into attendance(student_id,date,status)
values ($student_id,'$date','$status')");
$queryInsert->execute();
}
}
注意根据需要调整代码。
遗憾的是,我还不能对答案发表评论。
我觉得我确实需要改进 Adib Javed 的回答(back-end 部分)。
最好 - 不要循环数据库请求,并尝试发出单个请求。
所以你可以循环创建请求,当循环结束时,发送那个请求:
if (isset($_POST["submit"]))
{
$query = "INSERT into attendance(student_id,date,status) values";
for($i=0;$i<count($_POST["id"]);$i++)
{
$student_id = $$_POST["id"][$i]];
$date = $_POST['attendancedate'];
$date = date('Y-m-d', strtotime($date));
$status = $_POST['options'][$i]];
$query .= " ($student_id,'$date','$status'),";
}
substr_replace($query ,";", -1);
$queryInsert = $conn->prepare($query);
$queryInsert->execute();
}
因此作为序言 - 我正在尝试在我的网站上实现“标记出勤”功能,我将所有注册学生打印在 table 中(包裹在 )中 - 每个学生都有一个“出席/缺席”单选按钮,一旦管理员选择了他的首选选项,他按“提交”,表格应标记所有学生出席或缺席,即插入多行(等于 [=31 中的学生总数=]) 以及他们的出勤状态,即缺席或出席。
以下是代码的 HTML 部分(与一些 PHP 混合):
<form action="adminmarkattendance.php" method="post">
<div class="row">
<div class="col">
<div class="card bg-default shadow">
<div class="card-header bg-transparent border-0">
<div class="form-inline">
<div class="col-lg-6">
<h3 class="text-white mb-0">Registered Students</h3>
</div>
<div class="col-lg-6">
<div class="form-group">
<input style="width: 100%;" class="form-control" name="attendancedate" type="date" required>
</div>
</div>
</div>
</div>
<div class="table-responsive" style="overflow-y: scroll; height: 600px;">
<table class="table align-items-center table-dark table-flush">
<thead class="thead-dark">
<tr>
<th scope="col" class="sort" data-sort="name">Avatar</th>
<th scope="col" class="sort" data-sort="name">Student Name</th>
<th scope="col" class="sort" data-sort="status">Phone Number</th>
<th scope="col" class="sort" data-sort="status">Age</th>
<th scope="col" class="sort" data-sort="status">Gender</th>
<th scope="col" class="sort" data-sort="status">Address</th>
<th scope="col" class="sort" data-sort="status">Action</th>
</tr>
</thead>
<tbody class="list">
<?php
foreach ($getRows as $row) {
$i = 0; ?>
<tr>
<td>
<img src="<?php echo '../profileImages/' . $row['profile_image'] ?>" width="45" height="45" alt="">
<input type="hidden" name="id" value="<?php echo $row['student_id']; ?>">
</td>
<th scope="row">
<div class="media align-items-center">
<div class="media-body">
<span class="name mb-0 text-sm"><?php echo $row['fname'] . ' ' . $row['lname']; ?></span>
</div>
</div>
</th>
<td>
<span class="badge badge-dot mr-4">
<span class="status"><?php echo $row['phonenumber']; ?></span>
</span>
</td>
<td>
<span class="badge badge-dot mr-4">
<span class="status"><?php echo $row['age']; ?></span>
</span>
</td>
<td>
<span class="badge badge-dot mr-4">
<span class="status"><?php echo $row['gender']; ?></span>
</span>
</td>
<td>
<span class="badge badge-dot mr-4">
<span class="status"><?php echo $row['address']; ?></span>
</span>
</td>
<td>
<div class="btn-group btn-group-toggle" data-toggle="buttons">
<label class="btn btn-secondary active">
<input type="radio" name="options" value="present" id="option1" autocomplete="off" checked> Present
</label>
<label class="btn btn-secondary">
<input type="radio" name="options" value="absent" id="option2" autocomplete="off"> Absent
</label>
</div>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="text-center">
<button type="submit" name="submit" style="width: 100%;" class="btn btn-warning">Mark Attendance</button>
</div>
</form>
PHP:
if (isset($_POST["submit"])) {
$student_id = $_POST["id"];
$date = $_POST['attendancedate'];
$date = date('Y-m-d', strtotime($date));
$status = $_POST['options'];
$queryInsert = $conn->prepare("INSERT
into attendance
(
student_id,
date,
status
)
values
(
$student_id,
'$date',
'$status'
)
");
$queryInsert->execute();
echo "<script> location.replace('adminmarkattendance.php'); </script>";
}
正如您可能在代码中看到的那样 - 我只是想插入学生的 ID、日期和他的 present/absent 状态。
现在,当我按提交时,只有 1 个学生的信息被插入到考勤中 table。通常是最后一个学生。这不是我想要的 - 我希望在按下提交时插入 X 行,其中 X 等于 table.
中的学生人数我该如何实现?感谢阅读。
你需要的是提交整个数据,然后像这样循环遍历它
<input type="hidden" name="id[]" value="<?php echo $row['student_id']; ?>">
<input type="radio" name="options[]" value="absent" id="option2" autocomplete="off"> Absent</label>
然后
if (isset($_POST["submit"]))
{
for($i=0;$i<count($_POST["id"]);$i++)
{
$student_id = $$_POST["id"][$i]];
$date = $_POST['attendancedate'];
$date = date('Y-m-d', strtotime($date));
$status = $_POST['options'][$i]];
$queryInsert = $conn->prepare("INSERT into attendance(student_id,date,status)
values ($student_id,'$date','$status')");
$queryInsert->execute();
}
}
注意根据需要调整代码。
遗憾的是,我还不能对答案发表评论。 我觉得我确实需要改进 Adib Javed 的回答(back-end 部分)。
最好 - 不要循环数据库请求,并尝试发出单个请求。 所以你可以循环创建请求,当循环结束时,发送那个请求:
if (isset($_POST["submit"]))
{
$query = "INSERT into attendance(student_id,date,status) values";
for($i=0;$i<count($_POST["id"]);$i++)
{
$student_id = $$_POST["id"][$i]];
$date = $_POST['attendancedate'];
$date = date('Y-m-d', strtotime($date));
$status = $_POST['options'][$i]];
$query .= " ($student_id,'$date','$status'),";
}
substr_replace($query ,";", -1);
$queryInsert = $conn->prepare($query);
$queryInsert->execute();
}