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

PHP导出勾选数据至CSV:表头缺失与数据重复问题求助

问题修复:PHP导出CSV表头缺失+数据重复

问题根源

  1. 表头不显示:

    • 代码虽已写入表头,但如果conexion.php存在多余空格、换行等隐性输出,会导致HTTP头无法正常发送,CSV内容被干扰。
    • 原代码中Content-Disposition里的文件名使用了HTML实体",可能导致浏览器解析异常,影响表头显示。
  2. 数据重复:
    循环中错误地将迭代变量$value(存储选中的ID)重新赋值为SQL语句,导致后续循环时$value不再是原始ID,重复执行同一条SQL,输出重复数据。

修复后的代码

<?php
require 'includes/conexion.php';

// 检查是否有选中数据
if (!isset($_POST['casilla']) || !is_array($_POST['casilla'])) {
    exit('No se ha seleccionado ningun dato para la exportacion');
}

$delimiter = ",";
$filename = "equipos_" . date('Y-m-d') . ".csv";

// 创建内存文件指针
$f = fopen('php://memory', 'w');

// 写入CSV表头
$fields = [
    'hostName', 'nSerie', 'modelo', 'cargador',
    'maletin', 'docking', 'ratonTeclado', 'notas', 'user_id'
];
fputcsv($f, $fields, $delimiter); 

// 遍历选中的ID,查询并写入数据
foreach ($_POST['casilla'] as $id) {
    // 使用参数化查询避免SQL注入,同时避免变量名冲突
    $sql = "SELECT * FROM informatica WHERE id = ? LIMIT 1";
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param("i", $id);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($d = $result->fetch_assoc()) {
        $lineData = [
            $d['hostName'], $d['nSerie'], $d['modelo'],
            $d['cargador'], $d['maletin'], $d['docking'],
            $d['ratonTeclado'], $d['notas'], $d['user_id']
        ];
        fputcsv($f, $lineData, $delimiter);
    }
    $stmt->close();
}   

// 将文件指针移到开头
fseek($f, 0);

// 设置正确的下载头
header('Content-Type: text/csv; charset=utf-8');
header("Content-Disposition: attachment; filename=\"{$filename}\"");

// 输出文件内容
fpassthru($f);
fclose($f);
exit;
?>

关键修改说明

  • 变量名重命名:将循环中的SQL语句变量从$value改为$sql,避免覆盖原始ID变量$id,解决数据重复问题。
  • 参数化查询:替换直接拼接SQL的写法,使用预处理语句,避免SQL注入风险,提升查询稳定性。
  • 修复HTTP头:修正文件名的引号写法,添加字符编码声明,确保浏览器正确解析文件。
  • 资源释放:手动关闭预处理语句和文件指针,避免资源泄漏。
  • 额外检查:确保conexion.php文件开头无多余空格、换行,结尾可删除?>(或清除?>后的空白),防止隐性输出导致HTTP头失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:12:56