PHP编辑页出生日期不显示且表单无法提交到数据库问题求助
学生信息编辑系统问题修复
问题列表
- 编辑页面出生日期字段无法正常显示
- 表单校验通过后无法将修改内容写入数据库
根因分析
- 出生日期不显示问题
- HTML原生
type="date"输入框要求value属性必须严格符合YYYY-MM-DD格式,你的代码中出生日期输入框的value输出末尾多了一个多余空格,导致浏览器无法识别日期格式,默认显示为空。 - 若数据库中
dob字段存储格式为datetime(带时分秒),直接输出也会因为格式不匹配导致无法渲染。
- HTML原生
- 提交失败问题
- UPDATE SQL语法错误:MySQL的UPDATE语法不需要在表名后加字段列表,你当前写的
UPDATE students(student_id, first_name, last_name, email, dob) SET ...是INSERT语法的写法,执行时会报SQL语法错误,导致更新失败。 - 代码逻辑顺序存在隐患:未对
$_GET['id']做存在性判断,也未做SQL注入防护,极端情况下会导致页面报错或数据泄露。
- UPDATE SQL语法错误:MySQL的UPDATE语法不需要在表名后加字段列表,你当前写的
修复方案
1. 出生日期字段修复
把出生日期输入框的代码修改为:
<input type="date" id="dob" name="dob" class="form-control <?php echo isset($errors['dob']) ? 'is-invalid' : '' ?>" value="<?php echo date('Y-m-d', strtotime($students['dob'])) ?>">
去掉了末尾多余空格,同时用date()函数强制把数据库取出的日期转为YYYY-MM-DD格式。
2. SQL语法修复
把更新SQL修改为:
$sql = "UPDATE students SET student_id = '$student_id', first_name = '$first_name', last_name = '$last_name', email = '$email', dob = '$dob' WHERE id = '$id'";
删除表名后多余的字段列表括号即可。
3. 可选优化(建议修改)
- 连接数据库的错误判断改为
if ($mysqli->connect_error) { die("数据库连接失败:" . $mysqli->connect_error); } - 增加SQL注入防护:所有用户提交的参数入库前用
$mysqli->real_escape_string()转义,或者改用预处理语句 - 表单校验不通过时,渲染表单优先使用用户POST提交的内容,避免用户重新填写所有字段
问题截图

内容的提问来源于stack exchange,提问作者Hòa Đỗ
相关产品推荐
相关产品推荐

