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

添加月份天数计算JS后,表单提交无法显示数据库表格数据问题

问题排查与修复

核心错误

你的代码存在两个关键问题导致表格无法显示:

  1. JavaScript中的event.preventDefault()直接阻止了表单提交,而表格数据依赖表单提交后PHP从数据库查询渲染,阻止提交后PHP代码完全不会执行。
  2. 即便去掉阻止提交的代码,点击按钮时执行JS的时机也不对——此时表格还未生成,JS找不到需要填充天数的输入框,逻辑完全无法生效。

修复步骤

1. 调整JavaScript执行时机

把原本点击按钮触发的JS,改为页面加载完成后自动执行,确保PHP渲染完表格后,JS能找到对应输入框填充天数。修改后的JS代码:

window.addEventListener('load', function() {
  // 仅在表单提交后执行计算逻辑
  <?php if(isset($_POST['batch'])) { ?>
    var monthInput = document.getElementById("input2");
    if(monthInput.value) {
      let number = 0;
      while (true) {
        const totalDaysInput = document.getElementById("totalDaysX" + number);
        if (!totalDaysInput) break;

        const selectedDate = new Date(monthInput.value + "-01");
        const year = selectedDate.getFullYear();
        const month = selectedDate.getMonth() + 1;
        const totalDays = new Date(year, month, 0).getDate();
        
        totalDaysInput.value = totalDays;
        number++;
      }
    }
  <?php } ?>
});

2. 恢复表单正常提交

移除Search按钮的onclick属性,让表单能正常提交触发PHP查询逻辑:

<input type="submit" class="btn btn-danger col-md-2 col-md-offset-5" style="border-radius:0%" value="Search" name="batch" />

3. 可选:优化PHP代码(防范SQL注入)

当前SQL查询直接拼接用户输入,存在注入风险,改用预编译语句更安全:

<?php
if (isset($_POST['batch'])) {
  $i = 0;
  $number = 0;
  $batch = $_POST['whichbatch'];
  $con = mysqli_connect("localhost", "root", "", "madrasadb");
  // 预编译语句替代直接字符串拼接
  $stmt = $con->prepare("SELECT id,name,fname,class from smash where class = ? order by id asc");
  $stmt->bind_param("s", $batch);
  $stmt->execute();
  $all_query = $stmt->get_result();

  while ($data = mysqli_fetch_array($all_query)) {
    $i++;
?>

修复后逻辑

点击Search按钮 → 表单提交至服务器 → PHP查询数据库并渲染表格 → 页面加载完成 → JS读取选中的月份,计算天数并自动填充到每个学生的输入框中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:15:09