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

数据库多值查询异常:弹窗仅显示单个tipo值的修改需求

解决多值Tipo仅显示单个的问题及标题修改方案

我看了你的代码,问题出在两个关键地方:一是PHP端处理多条Tipo记录时只保留了最后一条,二是没有根据Tipo值动态修改弹窗标题。咱们一步步来修复:

1. 修复PHP端多值获取问题

你的PHP代码里,while ($r = mysqli_fetch_assoc($res))循环每次都会把$tipo覆盖成当前行的值,最后只会返回最后一条记录的Tipo。要收集所有Tipo,得用数组来存储:

$dados = array();
if(isset($_POST["idoc"])) {
    $idoc = $_POST["idoc"];
    // 先按你的原有结构修改,同时提醒:直接拼接参数有SQL注入风险,后面会给安全写法
    $sql = "SELECT m.tipo FROM `material` as m INNER JOIN `ocorrencia_detalhe` as od on m.id = od.id_tipo AND od.id_ocorrencia=$idoc";
    $res = mysqli_query($conn, $sql);
    $tipos = array(); // 用数组存储所有Tipo记录
    while ($r = mysqli_fetch_assoc($res)) {
        $tipos[] = $r['tipo'];
    }
    // 把数组转成逗号分隔的字符串,方便前端直接显示;也可以直接传数组让前端处理
    $dados["tipo"] = implode(', ', $tipos);
    echo json_encode($dados);
}

安全优化建议:避免SQL注入,改用mysqli预处理语句:

$sql = "SELECT m.tipo FROM `material` as m INNER JOIN `ocorrencia_detalhe` as od on m.id = od.id_tipo AND od.id_ocorrencia=?";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, "i", $idoc);
mysqli_stmt_execute($stmt);
$res = mysqli_stmt_get_result($stmt);

2. 修复JS端标题修改及多值显示问题

在AJAX的success回调里,先判断Tipo值,再修改弹窗标题,最后把所有Tipo内容渲染到页面:

var idocorrencia;
$(document).on("click","#listagem tr td button", function(e) {
    idocorrencia = $(this).parent().attr("idlista");
    const originalBtnText = $(this).text(); // 保存按钮原文本,用于默认标题
    console.log(idocorrencia);
    
    $.ajax({
        type: 'POST',
        url: '../php/temp.php',
        data: { idoc : idocorrencia },
        success: function(data) {
            var data_array = $.parseJSON(data);
            // 渲染其他字段
            $("#descricao").empty().append( data_array['descricao'] );
            $("#qtd").empty().append( data_array['qtd'] );
            $("#sala").empty().append( data_array['sala'] );
            $("#data").empty().append( data_array['data'] );
            $("#hora").empty().append( data_array['hora'] );
            
            // 处理Tipo字段和标题
            const tipoContent = data_array['tipo'];
            $("#tipo").empty().append(tipoContent);
            
            // 判断是否为equipamento,修改弹窗标题
            if(tipoContent.includes('equipamento')) {
                $("#listagem caption").text("Detalhes do Equipamento"); // 改成你需要的标题文本
            } else {
                $("#listagem caption").text(originalBtnText); // 非equipamento时用原按钮文本
            }
        }
    });
});

这样修改后,弹窗就能显示所有Tipo值,并且当Tipo包含"equipamento"时自动替换标题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:27:38