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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:36:04