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

Ajax弹窗模态框多表取数问题:无Assistant时仍显示主表数据

解决无助理时任务详情模态框无法展示数据的问题

问题说明

表格中点击单元格会弹出模态框展示任务详情,需从job_register表获取jobregister_id、customer_name、machine_type、job_description、reason、jobregisterlastmodify_at字段,从assistants表获取username(助理)。当前存在问题:当任务没有对应助理时,job_register表的其他数据也无法在模态框中展示。

错误原因分析

  1. SQL查询条件错误:弹窗取数的SQL语句中额外添加了AND assistants.jobregister_id = '$jobregister_id',这会过滤掉assistants表无匹配记录的行(LEFT JOIN后这些行的assistants.jobregister_id为NULL,不满足该条件),导致无助理的任务数据被排除。
  2. PHP逻辑错误:在处理username为NULL的情况时,错误地将整个$html替换为提示文本,导致后续的任务字段无法输出。

修正后的弹窗取数代码(AdminJobTableJobInfo.php)

<?php
include 'dbconnect.php';

$jobregister_id = $_POST["jobregister_id"];

// 修正SQL:去掉多余的assistants.jobregister_id条件,保留LEFT JOIN确保获取所有job_register数据
$query = "SELECT * FROM job_register 
          LEFT JOIN assistants ON job_register.jobregister_id=assistants.jobregister_id 
          WHERE job_register.jobregister_id = '$jobregister_id'";

$result = mysqli_query($conn, $query);

// 检查查询是否成功
if (!$result) {
    die("Query failed: " . mysqli_error($conn));
}

$html = '';
$row = mysqli_fetch_assoc($result);
if ($row) {
    // 构建任务详情HTML
    $html .= "<h4>Row ID: " . $row["jobregister_id"] . "</h4>";
    $html .= "<p>Leader: " . $row["job_assign"] . "</p>";
    
    // 处理助理字段:为空时显示提示,否则显示用户名
    if ($row["username"] !== NULL) {
        $html .= "<p>Assistant: " . $row["username"] . "</p>";
    } else {
        $html .= "<p>Assistant: 无</p>";
    }
            
    $html .= "<p>Place: " . $row["customer_name"] . "</p>";
    $html .= "<p>Machine: " . $row["machine_type"] . " - " . $row["job_description"] . "</p>";
    $html .= "<p>Reason: " . $row["reason"] . "</p>";
    $html .= "<p>Last Update Date: " . $row["jobregisterlastmodify_at"] . "</p>";
} else {
    // 无匹配任务时的提示
    $html = "<p>No data available for this job register ID.</p>";
}

echo $html;
?>

额外优化建议

  1. 防止SQL注入:当前直接将$_POST参数拼入SQL存在注入风险,建议使用mysqli预处理语句,示例如下:
$stmt = $conn->prepare("SELECT * FROM job_register LEFT JOIN assistants ON job_register.jobregister_id=assistants.jobregister_id WHERE job_register.jobregister_id = ?");
$stmt->bind_param("i", $jobregister_id); // 假设jobregister_id是整数类型
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
  1. 表格代码优化:原表格中<tbody>标签放在while循环内,会导致每一行生成一个<tbody>,不符合HTML规范,建议将<tbody>移到循环外:
<tbody>
<?php
while($row = $results->fetch_assoc()) {
    $jobregisterlastmodify_at = $row['jobregisterlastmodify_at'];
    $datemodify = substr($jobregisterlastmodify_at,0,11); 
?>
    <tr>
        <td style="border-color: black;"></td>
        <td style="border-color: black;" class="clickable-cell" data-row-id="<?php echo $row['jobregister_id']?>"><?php echo $row['job_assign']?></td>
        <td style="border-color: black;"><?php echo $row['username'] ?? '无'?></td> <!-- 用空合并运算符处理空值 -->
        <td style="border-color: black;"><?php echo $row['customer_name']?></td>
        <td style="border-color: black;"><?php echo $row['machine_type']?> - <?php echo $row['job_description']?></td>
        <td style="border-color: black;"><?php echo $row['reason']?></td>
        <td style="border-color: black;"><?php echo $datemodify ?></td>
    </tr>
<?php } ?>
</tbody>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:27:02