PHP二维码上传功能如何关联用户ID 实现员工为指定用户上传专属二维码
实现员工为指定用户上传专属图片的改造方案
第一步:调整数据库结构
先给存储二维码的qr表新增2个关联字段:
user_id:存储目标用户的主键ID,字段类型和你的用户表主键保持一致employee_id:存储操作的员工主键ID,字段类型和你的员工表主键保持一致
第二步:改造上传表单页
员工进入上传页前,先选中要上传图片的目标用户,跳转上传页时携带目标用户ID,例如跳转地址为employee_upload.php?target_user_id=2,表单中新增隐藏域传递用户ID,同时增加登录态和参数合法性校验:
<?php session_start(); // 校验员工登录态,根据你实际的员工session键名调整 if(!isset($_SESSION['employee_id']) || empty($_SESSION['employee_id'])){ die("请先登录员工账号"); } // 校验是否传递了目标用户ID if(!isset($_GET['target_user_id']) || empty($_GET['target_user_id'])){ die("请选择要上传图片的目标用户"); } $target_user_id = intval($_GET['target_user_id']); // 可选:校验目标用户ID是否真实存在,替换为你实际的用户表名 $check_user = $db->query("SELECT id FROM 你的用户表名 WHERE id = ".$target_user_id); if($check_user->num_rows == 0){ die("目标用户不存在"); } ?> <form action='upload.php' enctype='multipart/form-data' method='post'> <!-- 隐藏域传递目标用户ID --> <input type="hidden" name="target_user_id" value="<?php echo $target_user_id;?>"> <br>Qr Code: <p><input type='file' name='file' ></p> <p><input type='submit' value='上传' name='submit'></p> </form>
第三步:改造上传处理逻辑
插入数据库时新增关联字段的存储,同时增加参数校验:
<?php session_start(); $statusMsg = ''; $targetDir = "qr_code/"; $fileName = basename($_FILES["file"]["name"]); $targetFilePath = $targetDir . $fileName; $fileType = pathinfo($targetFilePath,PATHINFO_EXTENSION); // 校验登录态和必传参数 if(!isset($_SESSION['employee_id']) || empty($_SESSION['employee_id'])){ $statusMsg = "请先登录员工账号"; echo $statusMsg; exit; } if(!isset($_POST["target_user_id"]) || empty($_POST["target_user_id"])){ $statusMsg = "参数错误,缺少目标用户ID"; echo $statusMsg; exit; } $employee_id = intval($_SESSION['employee_id']); $target_user_id = intval($_POST['target_user_id']); if(isset($_POST["submit"]) && !empty($_FILES["file"]["name"])){ $allowTypes = array('jpg','png','jpeg','gif','JPG','PNG','GIF','JPEG'); if(in_array($fileType, $allowTypes)){ // 优化建议:重命名文件避免同名覆盖,例:$fileName = $target_user_id.'_'.time().'.'.$fileType; if(move_uploaded_file($_FILES["file"]["tmp_name"], $targetFilePath)){ // 插入数据时带上用户ID和员工ID // 优化建议:使用预处理语句避免SQL注入,以下为基础示例 $insert = $db->query("INSERT into qr (file_name, uploaded_on, user_id, employee_id) VALUES ('".$fileName."', NOW(), ".$target_user_id.", ".$employee_id.")"); if($insert){ $statusMsg = "文件".$fileName."上传成功"; header ("Location:employee.php?uploadsuccess&user_id=".$target_user_id); exit; }else{ $statusMsg = "文件上传失败,请重试"; } }else{ $statusMsg = "抱歉,文件上传时发生错误"; } }else{ $statusMsg = '仅支持上传JPG、JPEG、PNG、GIF格式的文件'; } }else{ $statusMsg = '请选择要上传的文件'; } echo $statusMsg; ?>
第四步:改造图片查询展示逻辑
查询时增加用户ID的筛选条件,即可获取指定用户的专属图片:
<?php // 获取要查看的目标用户ID,可根据你的业务场景从参数/上下文获取 $target_user_id = isset($_GET['user_id']) ? intval($_GET['user_id']) : 0; if($target_user_id <= 0 ){ echo "请指定要查看的用户"; exit; } // 筛选对应用户的最新上传的二维码 $query = $db->query("SELECT * FROM qr WHERE user_id = ".$target_user_id." ORDER BY uploaded_on DESC limit 1 "); if($query->num_rows > 0){ while($row = $query->fetch_assoc()){ $imageURL = 'qr_code/'.$row["file_name"]; ?> <img src="<?php echo $imageURL; ?>" alt="用户专属二维码" /> <?php } }else{ ?> <img src="images/qr.png" alt="默认二维码" /> <?php } ?>
可选优化项
- 可增加权限校验,判断当前登录员工是否有权限为目标用户上传图片,避免越权操作
- 所有数据库操作建议替换为PDO/mysqli预处理语句,避免SQL注入风险
- 上传文件时按规则重命名,避免不同用户上传同名文件导致覆盖
内容的提问来源于stack exchange,提问作者sKy
相关产品推荐
相关产品推荐

