You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:15:03