数据库多值查询异常:弹窗仅显示单个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
相关产品推荐
相关产品推荐

