You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

提交员工考勤时无法同步保存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>";
    }
}
?>

核心说明

  1. 关联映射:通过user_ids[]和attendance_status[]两个同步数组,确保每个考勤状态能对应到正确的员工ID。
  2. 安全防护:使用预处理语句避免SQL注入;员工的用户名和职位从数据库读取,而非直接使用前端提交内容,防止恶意篡改。
  3. 语法修复:修正了原代码中if(isset($_POST['submit']));的多余分号,避免逻辑失效。

内容的提问来源于stack exchange,提问作者Jitesh Gala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 17:34:57