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

基于RFID与NODEMCU的考勤系统:POST请求PHP无法接收数据

问题分析与解决方案

核心排查方向及修复步骤

1. 修正NODEMCU的POST请求格式

确保请求头和数据编码方式匹配,这是最常见的问题点:

修正后的Arduino代码片段

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

const char* ssid = "你的WiFi名称";
const char* password = "WiFi密码";
const char* serverURL = "http://你的服务器地址/attendance.php";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi连接成功");
}

void loop() {
  if(WiFi.status() == WL_CONNECTED){
    HTTPClient http;
    http.begin(serverURL);
    // 必须添加对应格式的Content-Type头
    http.addHeader("Content-Type", "application/x-www-form-urlencoded");
    // 键值对格式构造POST数据
    String postData = "rfid_uid=1A2B3C4D&student_id=2024001";
    int httpCode = http.POST(postData);
    
    if(httpCode > 0){
      String response = http.getString();
      Serial.printf("响应码:%d\n", httpCode);
      Serial.println("服务器返回:" + response);
    } else {
      Serial.printf("请求失败,错误信息:%s\n", http.errorToString(httpCode).c_str());
    }
    http.end();
  }
  delay(5000);
}

2. 调整PHP的接收逻辑

根据请求格式选择正确的接收方式,避免格式不匹配导致收不到数据:

修正后的PHP代码

<?php
// 接收表单编码的POST数据(对应上面的Content-Type)
if(isset($_POST['rfid_uid']) && isset($_POST['student_id'])){
    $rfid = $_POST['rfid_uid'];
    $studentId = $_POST['student_id'];
    echo "已接收数据:RFIDUID=" . $rfid . ",学生ID=" . $studentId;
} else {
    // 兼容raw格式数据(比如直接发送JSON的情况)
    $rawData = file_get_contents('php://input');
    if(!empty($rawData)){
        echo "已接收Raw数据:" . $rawData;
    } else {
        echo "无数据接收";
    }
}
?>

3. 验证网络请求细节

从你的流量截图中重点确认:

  • 请求头是否包含Content-Type字段,且与发送的数据格式一致
  • 请求体中是否存在实际的键值对或数据内容
  • 服务器响应的HTTP状态码是否为200(确认请求已抵达服务器)

4. 服务器环境排查

  • 检查PHP配置中post_max_size、upload_max_filesize(避免小配置限制数据接收)
  • 查看服务器错误日志(Apache/NGINX的error.log),确认是否有PHP执行报错
  • 确保服务器未启用防火墙或安全规则拦截POST请求

快速验证方法

先用curl工具模拟请求,定位问题点:

curl -X POST -d "rfid_uid=1A2B3C4D&student_id=2024001" http://你的服务器地址/attendance.php

若curl请求能正常收到数据,说明问题在NODEMCU代码;若curl也收不到,说明PHP或服务器配置有问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:25:01