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

Flutter登录触发FormatException,无法跳转至Accpage页面求助

问题解决:登录请求FormatException及服务器响应格式错误

问题根源

你的Flutter代码发送的是JSON格式的请求(已设置Content-Type: application/json并通过jsonEncode传递参数),但PHP后端试图用$_POST获取参数——$_POST仅能解析application/x-www-form-urlencoded或multipart/form-data格式的表单数据,无法读取JSON请求体,导致$login和$pass为空,后续逻辑触发错误甚至输出非JSON内容(比如PHP警告),最终让Flutter解析响应时抛出FormatException。

修复方案

修改PHP代码,改为读取JSON请求体并解码:

<?php
// 清空输出缓冲区,避免多余字符干扰JSON格式
ob_clean();
header('Content-Type: application/json');
$msg = json_encode(['message' => 'entered']);

try {
    // 读取JSON请求体并解码为关联数组
    $input = file_get_contents('php://input');
    $data = json_decode($input, true);
    
    if (!$data) {
        $msg = json_encode(['message' => 'Invalid request format']);
        echo $msg;
        exit;
    }
    
    // 从解码后的数据中获取参数,空值兜底
    $login = $data['login'] ?? '';
    $pass = $data['password'] ?? '';
    
    error_log("***Received login: $login, password: $pass");
    
    if (!$login || !$pass) {
        $msg = json_encode(['message' => 'Enter your login and password']);
    } else {
        $dns = "mysql:host=localhost;dbname=authentif";
        $user = "root";
        $mdp = "";
 
        $cnx = new PDO($dns, $user, $mdp);
        $cnx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $req = $cnx->prepare('select * from utilisateur where login=? and password=?');
        $req->execute([$login, $pass]);
        $res = $req->fetch(PDO::FETCH_ASSOC);

        if (!$res) {
            $msg = json_encode(['message' => 'No account found']);
        } else {
            $msg = json_encode([
                'message' => 'Login successful',
                'user' => [
                    'login' => $res['login'],
                    //'photo' => base64_encode($res['image']),
                ]
            ]);
        }
    }
} catch(Exception $e) {
    $msg = json_encode(['message' => 'Error: ' . $e->getMessage()]);
}
echo $msg;

额外检查项

  • 关闭Wampserver的PHP页面错误输出(在php.ini中设置display_errors = Off),仅通过error_log记录错误,避免多余字符破坏JSON结构。
  • 确认Flutter请求的IP192.168.56.1是Wampserver所在机器的正确内网IP,且/app_data/data.php文件路径无误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:15:03