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

点击日历日期后如何将值传入PHP变量并写入数据库

如何实现点击日历日期传递值到PHP变量

没问题,咱们一步步来解决这个问题——你现在的日历日期只是纯文本,点击后没法把值传给表单,所以PHP自然拿不到$day变量。这里有两种简单靠谱的实现方式,你可以选适合自己的:

方法一:隐藏输入框+JavaScript(交互友好,推荐)

这个方法会让用户点击日历日期后,把选中的日期值存入一个隐藏的表单输入框,提交表单时就能一起传给PHP了,还能给用户添加选中反馈。

1. 修改表单,添加隐藏输入框

在表单里(比如日历div的后面)加一个隐藏的input,用来存选中的日期:

<form action="insert.php" method="POST">
  <!-- 你的下拉框代码 -->
  <div id="main">
    <!-- 你的日历表格代码 -->
  </div>
  <!-- 添加隐藏输入框 -->
  <input type="hidden" name="day" id="selectedDay">
  <!-- 你的提交按钮 -->
</form>

2. 给日历日期添加点击事件

给日历里所有可选择的日期(非灰色的<td>)加上点击事件,比如:

<td onclick="setDay(this)">1</td>
<td onclick="setDay(this)">2</td>
<td onclick="setDay(this)">3</td>
<!-- 其他非灰色日期同理,灰色的不用加 -->

3. 编写JavaScript函数处理点击

在页面的<script>标签里写这个函数,用来把选中的日期值存入隐藏输入框,同时给选中的日期加样式:

function setDay(element) {
  // 获取点击的日期文本
  const dayValue = element.textContent.trim();
  // 把值设置到隐藏输入框
  document.getElementById('selectedDay').value = dayValue;
  
  // 给选中的日期加样式,方便用户看到选中状态
  // 先移除所有非灰色日期的选中样式
  document.querySelectorAll('#main td:not(.gray)').forEach(td => td.classList.remove('selected'));
  // 给当前点击的日期添加选中样式
  element.classList.add('selected');
}

4. 加个CSS样式增强体验

给选中的日期加个背景色,让用户一眼看到自己选了哪个:

#main td:not(.gray) {
  cursor: pointer; /* 鼠标悬停显示手型 */
}
#main td.selected {
  background-color: #0d6efd; /* 蓝色背景,和你的按钮风格一致 */
  color: white;
}

方法二:纯HTML单选按钮(无需JavaScript)

如果不想用JS,也可以把每个日期做成隐藏的单选按钮,点击日期文本就选中对应的单选框,表单提交时自动传值。

修改日历的日期单元格,每个可选择的日期改成这样:

<td>
  <input type="radio" name="day" value="1" id="day1" style="display: none;">
  <label for="day1">1</label>
</td>
<td>
  <input type="radio" name="day" value="2" id="day2" style="display: none;">
  <label for="day2">2</label>
</td>

这样点击<label>(也就是日期数字)就会自动选中对应的单选按钮,提交表单时$_POST['day']就能拿到选中的日期值了。你也可以给选中的label加CSS样式,比如:

#main td label {
  display: block;
  padding: 5px;
  cursor: pointer;
}
#main td input[type="radio"]:checked + label {
  background-color: #0d6efd;
  color: white;
}

重要提醒:修复PHP的安全问题

你原来的PHP代码直接把用户输入拼进SQL语句,存在严重的SQL注入风险!一定要用预处理语句来防止这个问题,修改后的PHP代码如下:

<?php
session_start();
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'calendar');

// 创建数据库连接
$con = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);

// 检查连接是否成功
if ($con->connect_error) {
    die("连接失败: " . $con->connect_error);
}

// 检查是否有提交的表单数据
if(isset($_POST['save_select'], $_POST['name'], $_POST['day'])){
    $name = $_POST['name'];
    $day = $_POST['day'];

    // 使用预处理语句,防止SQL注入
    $query = "INSERT INTO ferias (name, day, year, month, week, dateferia, recordtype, time) VALUES (?, ?, '123', '1', '1', '2021-01-01', '6', '1')";
    $stmt = $con->prepare($query);
    // 绑定参数,"ss"表示两个字符串类型的参数
    $stmt->bind_param("ss", $name, $day);

    if($stmt->execute()){
        $_SESSION['status'] = "插入成功";
    } else {
        $_SESSION['status'] = "插入失败: " . $stmt->error;
    }
    $stmt->close();
} else {
    $_SESSION['status'] = "缺少必填字段";
}

$con->close();
header("Location: ../1.php");
exit;
?>

这样修改后,你点击日历上的日期,选中的值就会传递到PHP的$day变量里,然后就能正常插入数据库啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:32:43