通过在 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();
    }