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

如何从PHP后端直接获取数据传递到Flutter应用

Flutter对接PHP接口获取$dept变量实现方案

第一步:修复PHP接口返回问题

当前PHP代码在验证成功时直接return $dept不会向前端输出任何内容,需要统一返回JSON格式响应,同时建议添加JSON响应头,修正后的代码如下:

<?php
session_start();
include_once ('config.php');
// 设置JSON响应头
header('Content-Type: application/json');

$lg_username = $_REQUEST['lg_username'];
$lg_password = $_REQUEST['lg_password'];
$lg_password = md5($lg_password);

// 注意:直接拼接SQL存在注入风险,生产环境建议改用预处理语句
$sql = "SELECT lg_username, lg_name, lg_dp_code FROM hr_login WHERE lg_username = '$lg_username' AND lg_password = '$lg_password'";
$res = mysqli_query($conn,$sql);
$count = mysqli_num_rows($res);

if($count == 1){
    $userRow = mysqli_fetch_array($res,MYSQLI_ASSOC);
    $dept = $userRow['lg_dp_code'];
    // 统一返回JSON格式,禁止用return输出接口内容
    echo json_encode([
        'code' => 0,
        'msg' => 'success',
        'dept' => $dept
    ]);
}else{
    echo json_encode([
        'code' => 1,
        'msg' => '账号或密码错误'
    ]);
}
?>

第二步:完善Flutter端请求与解析逻辑

首先确保已经在pubspec.yaml中引入http依赖,然后修改_saveCheckIn方法,增加响应状态判断、JSON解析逻辑,即可拿到$dept值,示例代码如下:

// 可根据需要调整返回值类型,示例直接返回获取到的dept值
Future<String?> _saveCheckIn() async {
  var url = Uri.http(
      "192.168.68.216", '/ump_attendance_2/save_check_in.php', {'q': '{http}'});
  try {
    var response = await http.post(url, body: {
      "lg_username": user.lg_username,
      "lg_password": user.lg_password
    });
    // 先判断HTTP请求状态是否正常
    if (response.statusCode == 200) {
      // 解析JSON响应
      final resData = jsonDecode(response.body);
      if (resData['code'] == 0) {
        // 提取dept值
        String dept = resData['dept'];
        // 可直接返回dept供组件使用,也可存入全局变量/本地存储供后续逻辑调用
        print('获取到的部门编码:$dept');
        return dept;
      } else {
        print('接口返回错误:${resData['msg']}');
        return null;
      }
    } else {
      print('请求失败,状态码:${response.statusCode}');
      return null;
    }
  } catch (e) {
    print('请求异常:$e');
    return null;
  }
}

组件内调用示例

获取到dept值后可直接通过setState更新组件状态完成展示,示例如下:

ElevatedButton(
  onPressed: () async {
    String? dept = await _saveCheckIn();
    if (dept != null) {
      setState(() {
        currentDept = dept;
      });
    }
  },
  child: Text('签到获取部门信息')
)

注意事项

  • 记得在Flutter对应文件头部导入依赖:import 'package:http/http.dart' as http;、import 'dart:convert';
  • 测试时确保运行Flutter的设备和PHP服务所在机器在同一局域网,对应IP可正常访问
  • 生产环境建议把PHP端的MD5加密替换为更安全的密码哈希方式,同时改用SQL预处理语句避免注入风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:15:45