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

PHP POST表单上传文件报错:Undefined array key 'attestat'

问题排查与修复方案

核心问题:表单缺少文件上传必需属性

HTML表单上传文件时,必须添加enctype="multipart/form-data"属性,否则PHP无法接收$_FILES数组中的文件数据,这就是你看到Undefined array key "attestat"警告的直接原因。

修复后的HTML代码

<form action="submit.php" method="POST" enctype="multipart/form-data">
  <div class="file-input">
    <input type="file" class="attestat" id="attestat" name="attestat" accept="application/pdf, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, image/*" multiple="multiple">
    <span class="file-name">Выберите файл</span>
  </div>
  <!-- 需添加提交按钮触发表单提交 -->
  <button type="submit">上传文件</button>
</form>

其他关键问题修复

1. 临时文件路径无法直接存储

$_FILES["attestat"]["tmp_name"]是PHP临时文件路径,脚本执行完毕后该文件会被自动删除,直接存入数据库无意义,需先读取文件内容再存储,或存储文件到服务器目录后记录路径。

2. 存在SQL注入风险

原代码直接将变量拼接进SQL语句,需改用预处理语句规避漏洞。

3. 多文件上传的结构处理

因添加了multiple="multiple"属性,$_FILES会变为多维数组,需循环处理每个文件。

修复后的PHP代码

<?php
$servername = "localhost";
$username = "root";
$password = "Youshit21";
$dbname = "medacc";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

// 判断是否有文件上传且无错误
if (isset($_FILES["attestat"]) && $_FILES["attestat"]["error"][0] == UPLOAD_ERR_OK) {
  // 循环处理多文件
  foreach ($_FILES["attestat"]["tmp_name"] as $key => $tmp_name) {
    // 读取文件内容
    $fileContent = file_get_contents($tmp_name);
    // 转义内容防止注入
    $fileContent = $conn->real_escape_string($fileContent);
    
    $id = uniqid('user_');
    // 使用预处理语句
    $stmt = $conn->prepare("INSERT INTO medacc.spaco(id, filo) VALUES (?, ?)");
    $stmt->bind_param("ss", $id, $fileContent);
    
    if ($stmt->execute()) {
      echo "文件上传成功<br>";
    } else {
      echo "Error: " . $stmt->error . "<br>";
    }
    $stmt->close();
  }
} else {
  echo "未选择有效文件或上传出错";
}

$conn->close();
?>

说明:数据库字段filo需设置为LONGBLOB类型以存储文件内容;若选择存储文件路径,可将文件移动至服务器指定目录,再将路径存入数据库。

额外检查项

  • 确认PHP配置中upload_max_filesize和post_max_size参数值足够容纳待上传文件
  • 检查服务器临时目录(upload_tmp_dir)是否具备读写权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 07:52:44