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

PHP与SQL技术问题:如何将用户ID转为变量存入工单表?

解决PHP工单订购时自动存入用户ID的问题

看起来你需要实现用户订购工单时,自动将当前登录用户的ID写入tickets表,而不需要用户手动输入。结合你给出的代码片段,我整理了以下解决方案:

核心思路:安全获取当前用户ID

首先,不要通过表单提交用户ID(比如代码里的$_POST['usid']),这种方式容易被恶意篡改,而且既然用户ID已经在页面显示,说明用户已经登录,应该从会话($_SESSION)中获取用户ID——这是更安全可靠的方式。

步骤1:确保用户登录时已存入会话

在用户登录成功的代码中,需要将用户ID存入$_SESSION,比如:

// 登录验证通过后
$_SESSION['user_id'] = $logged_in_user['id']; // $logged_in_user是从数据库取出的用户数据
$_SESSION['user_logged_in'] = true; // 标记用户已登录状态

步骤2:修改你的best()函数

更新函数,从会话中获取用户ID,完善表单验证和数据插入逻辑:

function best(){
    global $db, $errors;

    // 接收表单输入值
    $ticket = e($_POST['tickety']);
    $aantall = e($_POST['aantal']);

    // 1. 验证用户是否已登录
    if(!isset($_SESSION['user_id']) || !$_SESSION['user_logged_in']){
        $errors['login_required'] = '请先登录才能提交工单';
        return;
    }
    $usidd = $_SESSION['user_id']; // 从会话安全获取用户ID

    // 2. 完善表单验证
    if(empty($ticket)){
        $errors['ticket_empty'] = '请选择工单类型';
    }
    if(empty($aantall) || !is_numeric($aantall) || $aantall < 1){
        $errors['aantal_invalid'] = '请填写有效的数量(至少1)';
    }

    // 3. 无错误时插入数据库
    if(empty($errors)){
        // 使用预处理语句防止SQL注入(非常重要!)
        $query = "INSERT INTO tickets (ticket_type, quantity, user_id) VALUES (?, ?, ?)";
        $stmt = mysqli_prepare($db, $query);
        mysqli_stmt_bind_param($stmt, "sii", $ticket, $aantall, $usidd);
        $result = mysqli_stmt_execute($stmt);

        if($result){
            // 插入成功的逻辑,比如跳转至成功页面
            header('Location: order_success.php');
            exit();
        } else {
            $errors['db_error'] = '提交失败,请稍后重试';
        }
    }
}

步骤3:前端表单优化

既然用户ID是自动获取的,前端表单里不需要再显示或提交usid字段,直接去掉对应的表单元素即可——避免不必要的数据暴露。

额外安全建议

  • 减少全局变量依赖:全局的$db和$errors可以改成函数参数传递,让代码更易维护、更安全。
  • 坚持使用预处理语句:上面的代码用了mysqli_prepare和bind_param,能有效防止SQL注入,绝对不要直接拼接SQL语句。
  • 严格验证输入:对$aantall进行数字合法性校验,确保存入数据库的是有效正整数。

内容的提问来源于stack exchange,提问作者Jop Rill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:59:52