PHP注册表单日期参数报错无法写入SQL数据库求助
问题1:数组键"geburtsdatum"未定义警告
解决方法如下:
- 检查前端注册表单中出生日期输入框的
name属性是否准确为geburtsdatum,确认拼写、大小写没有错误 - 确认前端表单的提交方法为
POST,和后端接收参数的方式保持一致 - 后端接收参数前增加非空判断,参数缺失时直接标记校验不通过,避免后续逻辑报错:
if (empty($_POST['geburtsdatum'])) { $error = true; echo "请填写出生日期"; } else { $geburtsdatum = new DateTime($_POST['geburtsdatum']); }
问题2:DateTime类对象无法转换为字符串致命错误
MySQL的Date类型接收的是Y-m-d格式的字符串,你直接传入DateTime对象无法被识别,需要调用format方法将DateTime对象转为符合要求的字符串即可。
另外你编写的预处理SQL存在语法错误,telefon占位符前遗漏了冒号,会导致参数绑定失败,也需要同步修正。
修正后的数据库写入代码如下:
if(!$error) { $passwort_hash = password_hash($passwort, PASSWORD_DEFAULT); // 修正telefon占位符的冒号 $statement = $pdo->prepare("INSERT INTO kunde (KEMAIL,NACHNAME,VORNAME,GEBURTSDATUM,STRASSE,HAUSNR,PLZ,ORT,TELEFON,PASSWORT) VALUES (:kemail,:nachname,:vorname,:geburtsdatum,:strasse,:hausnummer,:plz,:ort,:telefon,:passwort)"); // 将DateTime对象格式化为Y-m-d格式的字符串 $result = $statement->execute(array( 'KEMAIL' => $email, 'NACHNAME' => $nachname, 'VORNAME' => $vorname, 'GEBURTSDATUM' => $geburtsdatum->format('Y-m-d'), 'STRASSE' => $strasse, 'HAUSNR' => $hausnummer, 'PLZ' => $plz, 'ORT' => $ort, 'TELEFON' => $telefon, 'passwort' => $passwort_hash )); if($result) { echo '注册成功。<a href="login.php">前往登录</a>'; $showFormular = false; } else { echo '数据存储时出现错误<br>'; } }
内容的提问来源于stack exchange,提问作者naseweis
相关产品推荐
相关产品推荐

