提交员工考勤时无法同步保存User ID等信息的技术求助
解决考勤提交时同步保存员工信息的问题
问题根源
当前表单仅提交考勤状态数组,未将状态与对应员工的唯一标识(userid)绑定,导致后端无法关联员工信息完成存储;同时原代码存在SQL注入风险,需一并修复。
修改后的前端代码
在每条员工记录中添加隐藏字段存储userid,并让考勤状态的下拉框与员工ID形成索引对应,确保提交时能映射到正确员工:
<thead> <tr> <th>User ID</th> <th>User Name</th> <th>Designation</th> <th>Mark Attendance</th> </tr> </thead> <tbody> <?php $result = $conn->query("SELECT * FROM userdetails"); if($result->num_rows > 0){ while($row = $result->fetch_assoc()){ ?> <tr> <td><?php echo $row['userid']; ?></td> <td><?php echo $row['username']; ?></td> <td><?php echo $row['designation']; ?></td> <td> <!-- 隐藏字段存储员工ID,与状态数组索引同步 --> <input type="hidden" name="user_ids[]" value="<?php echo $row['userid']; ?>"> <!-- 修复class的语法错误,移除重复ID --> <select name="attendance_status[]" class="col-sm-2"> <option value="present">Present</option> <option value="absent">Absent</option> <option value="late">Late</option> <option value="absconding">Absconding</option> <option value="resigned">Resigned</option> <option value="terminated">Terminated</option> </select> </td> </tr> <?php } }else{ ?> <tr><td colspan="4">No Employees Found...</td></tr> <?php } ?> </tbody> </table> </div> </div> <div class="col-12"> <button type="submit" name="submit">Submit</button> </div> </form> </div> </div> </div>
修改后的后端处理代码
同步遍历员工ID和考勤状态数组,从数据库获取员工完整信息后插入考勤表,同时用预处理语句规避SQL注入:
<?php if(isset($_POST['submit'])){ // 移除原代码中多余的分号,修复逻辑错误 // 校验提交数据的完整性 if(isset($_POST['user_ids']) && isset($_POST['attendance_status']) && count($_POST['user_ids']) === count($_POST['attendance_status'])){ $user_ids = $_POST['user_ids']; $attendance_statuses = $_POST['attendance_status']; // 准备预处理插入语句 $stmt = $conn->prepare("INSERT INTO attendance (userid, username, designation, attendancemarked) VALUES (?, ?, ?, ?)"); $stmt->bind_param("ssss", $userid, $username, $designation, $status); foreach($user_ids as $index => $userid){ $status = $attendance_statuses[$index]; // 从数据库获取员工信息,避免前端篡改数据 $user_result = $conn->query("SELECT username, designation FROM userdetails WHERE userid = '$userid'"); if($user_row = $user_result->fetch_assoc()){ $username = $user_row['username']; $designation = $user_row['designation']; $stmt->execute(); } } $stmt->close(); echo "<script>alert('考勤提交成功');</script>"; } else { echo "<script>alert('提交数据异常,请重试');</script>"; } } ?>
核心说明
- 关联映射:通过
user_ids[]和attendance_status[]两个同步数组,确保每个考勤状态能对应到正确的员工ID。 - 安全防护:使用预处理语句避免SQL注入;员工的用户名和职位从数据库读取,而非直接使用前端提交内容,防止恶意篡改。
- 语法修复:修正了原代码中
if(isset($_POST['submit']));的多余分号,避免逻辑失效。
内容的提问来源于stack exchange,提问作者Jitesh Gala
相关产品推荐
相关产品推荐

