PHP能否对数组类型的time输入使用strtotime()转换12小时制时间
问题修复说明
你代码的核心错误是遍历取值错误,把课程名称字段当成了时间字段做格式转换,同时时间数组的处理逻辑混乱,修正方案如下:
- 遍历数组时,要根据下标取对应行的
time_start和time_end提交值做格式转换 - HTML5的
time输入控件默认提交24小时制的HH:mm格式字符串,可直接传入strtotime解析,用date('h:i a')即可输出带am/pm标识的12小时制时间 - 原代码存在SQL注入风险,建议改用预处理语句写入数据
修正后的PHP处理代码
if(isset($_POST['sectionbtn'])) { $section = $_POST['section']; $level_id = $_POST['level_id']; $stats = 0; // 插入学段信息,建议后续也改为预处理写法 $sql3 = "INSERT INTO std_section (year_level_id, section, stats) VALUES ('$level_id', '$section', '$stats')"; if ($db->query($sql3) === TRUE) { $sec_id = $db->insert_id; $subject = $_POST['subject']; $time_start = $_POST['time_start']; $time_end = $_POST['time_end']; $day = $_POST['day']; // 预处理写入课程时间,避免SQL注入 $stmt = $db->prepare("INSERT INTO std_subject(subject, time_start, time_end, section_id, day) VALUES (?, ?, ?, ?, ?)"); foreach($subject as $key => $sub_name) { // 转换时间格式 $formatted_start = date('h:i a', strtotime($time_start[$key])); $formatted_end = date('h:i a', strtotime($time_end[$key])); // 绑定参数执行写入 $stmt->bind_param("sssis", $sub_name, $formatted_start, $formatted_end, $sec_id, $day[$key]); $stmt->execute(); } $stmt->close(); } }
额外说明
如果你的数据库时间字段是 datetime 类型,不建议直接存储12小时制字符串,可存储24小时制的标准时间格式,前端读取的时候再做格式转换,后续做时间比较、排序等操作会更方便。
内容的提问来源于stack exchange,提问作者Beginer
相关产品推荐
相关产品推荐

