禁用HTML日期输入框后插入MySQL出现1970-01-01问题求助
问题原因
HTML中被禁用(disabled)的表单元素不会随表单提交到服务器,所以当你用JS将datai输入框设为disabled后,服务器端的$_POST['datai']根本不存在。strtotime()处理不存在的值会返回false,date('Y-m-d', false)会默认输出1970-01-01,这就是你遇到的核心问题。
而你移除date和strtotime后出现索引错误,是因为直接访问不存在的$_POST['datai']会触发“索引未定义”的PHP报错。
解决方案
方案1:用readonly替代disabled(最简单)
readonly属性会让输入框无法编辑,但值会正常随表单提交:
document.getElementById("datai").readOnly = true;
方案2:保留disabled,新增隐藏字段同步值
如果必须用disabled,可以添加一个隐藏input来传递值:
<!-- 原date输入框 --> <input type="date" class="form-control" name="datai" placeholder="" id="datai" disabled> <!-- 新增隐藏字段,name和原输入框一致 --> <input type="hidden" name="datai" id="hidden_datai">
const dataiInput = document.getElementById("datai"); // 设置固定日期后再禁用 dataiInput.value = "2024-05-20"; // 替换成你的特定日期 dataiInput.disabled = true; // 将值同步到隐藏字段 document.getElementById("hidden_datai").value = dataiInput.value;
方案3:服务器端直接赋值(不依赖前端)
如果这个日期是固定值或可在服务器端生成,直接在PHP里赋值,无需从$_POST获取:
if (isset($_POST["submit"])) { // 直接设置特定日期,比如'2024-05-20' $datai = '2024-05-20'; // 或者用当前日期:$datai = date('Y-m-d'); }
额外建议:增加参数存在性判断
无论用哪种方案,都建议在PHP里先判断$_POST['datai']是否存在,避免报错:
if (isset($_POST["submit"])) { $datai = isset($_POST['datai']) ? date('Y-m-d', strtotime($_POST['datai'])) : '默认日期'; }
内容的提问来源于stack exchange,提问作者sltd
相关产品推荐
相关产品推荐

