PHP生成考勤表日期表头及表格渲染相关问题咨询
问题1:表头没有填充对应日期的原因
- 数组键名未加引号:
$_POST[startdate]语法错误,正确写法为$_POST['startdate'] - 变量引用错误:计算日期时直接写
startdate,既没有从POST请求中获取提交的值,也没有加$符号识别为PHP变量 - 变量作用域问题:表格代码写在if判断外,未提交表单时
$day1~$day4变量未定义,输出为空
问题2:将HTML表格插入if判断语句的方法
PHP支持代码和HTML混写,直接把表格结构放在if条件成立的代码块内即可,确保只有提交了有效起始日期才会渲染考勤表,避免未定义变量报错。
问题3:将日期列宽度设置为1个字符宽度的方法
使用CSS的ch单位(1ch等于数字0的宽度,刚好对应1个字符宽度),给日期列对应的th/td元素添加样式width: 1ch即可,可配合溢出隐藏规则避免内容撑开列宽。
修正后的输入表单 forum.php 代码
<!DOCTYPE html> <html> <head> <style> td, th { border: 4px solid lightblue; text-align: left; padding: 8px; } </style> <title>考勤表生成</title> </head> <body> <h2> ATTENDANCE LIST </h2> <form action="gen-table.php" method="post"> <p> <label for="startdate">起始日期:</label> <input type="date" name="startdate" id="startdate" required /> <input type="submit" value="选择并生成" /> </p> </form> </body> </html>
修正后的处理脚本 gen-table.php 代码
<!DOCTYPE html> <html> <head> <style> td, th { border: 4px solid lightblue; text-align: left; padding: 8px; box-sizing: border-box; } /* 日期列设置为1字符宽度 */ .date-col { width: 1ch; overflow: hidden; white-space: nowrap; } </style> <title>考勤表结果</title> </head> <body> <h2> ATTENDANCE LIST </h2> <?php if (isset($_POST['startdate'])) { $start_date = $_POST['startdate']; // 右数第三列为起始日期,后续依次加7天 $day_right3 = date('d-m-Y', strtotime($start_date . "+0 days")); $day_right2 = date('d-m-Y', strtotime($start_date . "+7 days")); $day_right1 = date('d-m-Y', strtotime($start_date . "+14 days")); ?> <!-- 表格嵌入if判断内部 --> <table> <tr> <th>Lastname</th> <th>Firstname</th> <!-- 右数第三、二、一列依次为起始日期、+7天、+14天 --> <th class="date-col"><?php echo $day_right3; ?></th> <th class="date-col"><?php echo $day_right2; ?></th> <th class="date-col"><?php echo $day_right1; ?></th> </tr> <!-- 后续可自行补充员工考勤行 --> </table> <?php } else { echo "<p>请先选择起始日期</p>"; } ?> </body> </html>
内容的提问来源于stack exchange,提问作者AadS
相关产品推荐
相关产品推荐

