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

datepicker日期字段在编辑页未修改时被重置为00/00/0000的问题

问题分析与解决方案

这个问题的核心原因是:当你不修改日期字段时,pickadate插件可能没有正确提交原有日期值,或者你的更新逻辑直接用空值覆盖了数据库里的原有日期,最终导致数据库将空值转为00/00/0000。下面分步骤给你解决:

一、先检查日期输入框的初始化问题

首先要确保页面加载时,日期输入框的原有值能被pickadate正确识别,否则插件可能会清空输入框的默认值。

修改你的datepicker代码,做这两处调整:

<div class="col-md-6">
  <div class="md-form">
    <!-- 用htmlspecialchars转义避免XSS,同时确保函数返回yyyy/mm/dd格式 -->
    <input name="scadenza_richiesta" value="<?php echo htmlspecialchars(formato_data_scad_rich($row['scadenza_richiesta'])) ;?>" type="text" id="scadenza_richiesta" class="form-control datepicker">
    <label for="scadenza_richiesta">Scadenza Richiesta</label>
  </div>
  <script type="text/javascript">
    $('#scadenza_richiesta').pickadate({
      format: 'yyyy/mm/dd',
      formatSubmit: 'yyyy/mm/dd',
      // 去掉隐藏字段配置,直接用输入框的name提交值(隐藏字段容易同步出错)
      // hiddenPrefix: 'prefix__',
      // hiddenSuffix: '__suffix',
      min : true,
      // 强制让插件读取输入框的初始值作为默认日期
      defaultDate: new Date($('#scadenza_richiesta').val())
    });
  </script>
</div>

⚠️ 重点:确认formato_data_scad_rich函数返回的日期格式必须是yyyy/mm/dd,和插件的format完全一致,否则插件无法识别原有日期,会自动清空输入框。

二、修改更新逻辑,避免空值覆盖原有日期

即使输入框的值因为插件问题变成空,我们也要在后端做兜底处理——当日期字段为空时,不覆盖数据库里的原有值。

更新你的PHP代码:

<?php
if (isset($_POST['submit'])) {
    $id = $connessione->real_escape_string($_POST['ID_Richiesta']);
    $titolo_richiesta = $connessione->real_escape_string($_POST['titolo_richiesta']);
    $dettagli_richiesta = $connessione->real_escape_string($_POST['dettagli_richiesta']);
    $token_richiesta = $connessione->real_escape_string($_POST['token_richiesta']);
    $categoria_richiesta = $connessione->real_escape_string($_POST['categoria_richiesta']);
    
    // 处理日期字段:如果POST过来的日期为空,就从数据库读取原有值
    if (!empty(trim($_POST['scadenza_richiesta']))) {
        $scadenza_richiesta = $connessione->real_escape_string($_POST['scadenza_richiesta']);
    } else {
        // 查询当前记录的原有日期
        $query = $connessione->query("SELECT scadenza_richiesta FROM richieste WHERE ID_Richiesta = '$id'");
        $existingRow = $query->fetch_assoc();
        $scadenza_richiesta = $existingRow['scadenza_richiesta'];
    }
    
    // 执行更新
    $connessione->query("UPDATE richieste SET 
        categoria_richiesta='$categoria_richiesta', 
        titolo_richiesta='$titolo_richiesta', 
        dettagli_richiesta='$dettagli_richiesta', 
        scadenza_richiesta='$scadenza_richiesta', 
        token_richiesta='$token_richiesta' 
        WHERE ID_Richiesta ='$id'");
    
    header("Location: richieste.php?ed_rich=Y");
}
?>

额外建议

为了更安全,推荐你使用**预处理语句(Prepared Statements)**替代real_escape_string,能彻底避免SQL注入风险,示例片段:

$stmt = $connessione->prepare("UPDATE richieste SET categoria_richiesta=?, titolo_richiesta=?, dettagli_richiesta=?, scadenza_richiesta=?, token_richiesta=? WHERE ID_Richiesta=?");
$stmt->bind_param("sssssi", $categoria_richiesta, $titolo_richiesta, $dettagli_richiesta, $scadenza_richiesta, $token_richiesta, $id);
$stmt->execute();

内容的提问来源于stack exchange,提问作者user11524094

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:36:16