我正在为我的论文创建一个供学校使用的系统。虽然有一个方面我无法工作。我希望能够同时为多人设置出勤率。这里有一个图像,可以显示表单的样子:
所有值都设置为存在,因此如果需要,只有一对可以被追加到缺席。在表单底部按下按钮后,我希望它导航到确认页面。我使用了MySQl查询来获取尚未设置出勤率的工作人员列表,并使用 include 标记将其放在HTML表单中。我必须生成列表的代码如下:
<?php
// Get a list of all items and display them in ID order
$dynamicList = "";
$sql = mysql_query("SELECT StaffID, StaffName FROM StaffDetails WHERE StaffID NOT IN (SELECT StaffID FROM StaffAttendance WHERE AttendanceDate = curdate()) ORDER BY StaffID ASC");
// Show list
$productCount = mysql_num_rows($sql);
$setTodaysAttendanceList = "";
if ($productCount > 0) {
while($row = mysql_fetch_array($sql)) {
$StaffID = $row["StaffID"];
$StaffName = $row["StaffName"];
$setTodaysAttendanceList .= '<tr style="font-size:15px;">
<td><a href="../staff_member_details.php?id=' . $StaffID . '">' . $StaffID . '</a></td>
<td><a href="../staff_member_details.php?id=' . $StaffID . '">' . $StaffName . '</a></td>
<td><label>
<select name="attendance_status" id="attendance_status">
<option value="Present">Present</option>
<option value="Absent">Absent</option>
</select>
</label></td>
<td><label>
<textarea cols="21" rows="5" name="notes" id="notes" placeholder="Enter notes here..."></textarea>
</label></td>
</tr>';
}
} else {
$setTodaysAttendanceList = "There are no records listed at this time";
}
mysql_close();
?>
然后在HTML中我有这个:
<form action="set_multiple_staff_attendance_confirm.php" enctype="multipart/form-data" name="StaffAttendanceForm" id="StaffAttendanceForm" method="post">
<?php echo $setTodaysAttendanceList; ?>
<tr style="font-size:15px;">
<td></td>
<td></td>
<td></td>
<td><label>
<input type="submit" name="addNewRow" id="addNewRow" value="Add Staff Attendance Records" />
</label></form></td>
</tr>
当它重定向到下一页时,我有一个如下所示的插入查询:
<?php
// Add row to database
if (isset($_POST['staff_id'])) {
$staff_id = mysql_real_escape_string($_POST['staff_id']);
$attendance_status = mysql_real_escape_string($_POST['attendance_status']);
$notes = mysql_real_escape_string($_POST['notes']);
$sql .= mysql_query("INSERT INTO StaffAttendance (StaffID, AttendanceDate, AttendanceStatus, Notes) VALUES
('$staff_id', now(), '$attendance_status', '$notes')") or die (mysql_error());
$editid = mysql_insert_id();
}
?>
我知道这是一个漫长而复杂的问题,但我只是表明我已经走了,我完全被卡住了!
答案 0 :(得分:4)
我认为您正在检查$_POST["staffid"]
,但您的选择菜单已设置name="attendance_status"
。
您应该像这样设置选择菜单的名称:
name="attendance_status[]"
然后在您的PHP脚本中,当您执行$_POST["attendance_staff"]
时,您会读取一个数组 - 而不是单个值。
编辑:这只有在您拥有一个包含所有相应人员的阵列的情况下才有效。您可以通过对名称为staffid[]
且值为staffid的每一行使用隐藏输入来实现此目的。
但是,更可靠的方法可能是在每个可保存表单元素的名称中使用staffid,正如David-SkyMesh在对您帖子的评论中指出的那样。
编辑:例如,您可以使用此代码命名表单元素(未经测试):
<select name="$staffID_attendance_status" id="$staffID_attendance_status">
<option value="Present">Present</option>
<option value="Absent">Absent</option>
</select>
<textarea cols="21" rows="5" name="$staffID_notes" id="$staffID_notes" placeholder="Enter notes here..."></textarea>
<input type='hidden' name='staffID[]' value='$staffID'>
请注意,如果您希望HTML验证,这也会为您的所有表单元素提供唯一ID。
然后在你的脚本中你可以这样做:
foreach ($_POST["staffID"] as $staffID) {
$staff_id = mysql_real_escape_string($staffID);
$attendance_status = mysql_real_escape_string($_POST[$staff_id . "_attendance_status"]);
$notes = mysql_real_escape_string($_POST[$staff_id . "_notes"]);
$sql .= mysql_query("INSERT INTO StaffAttendance (StaffID, AttendanceDate, AttendanceStatus, Notes) VALUES ('$staff_id', now(), '$attendance_status', '$notes')") or die (mysql_error());
$editid = mysql_insert_id();
}