添加月份天数计算JS后,表单提交无法显示数据库表格数据问题
问题排查与修复
核心错误
你的代码存在两个关键问题导致表格无法显示:
- JavaScript中的
event.preventDefault()直接阻止了表单提交,而表格数据依赖表单提交后PHP从数据库查询渲染,阻止提交后PHP代码完全不会执行。 - 即便去掉阻止提交的代码,点击按钮时执行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
相关产品推荐
相关产品推荐

