PHP+Smarty网站提交后保留日历输入框选中日期的实现方法
在Smarty中保留用户选择的日期输入值
嘿,我来帮你搞定这个问题——要让PHP+Smarty网站的日期输入框在提交刷新后保留用户上次选择的内容,其实分三步就能实现,咱们一步步来:
1. PHP后端接收并传递日期参数
首先,你需要在处理表单提交的PHP文件里,安全获取用户提交的日期值,然后把这些值传给Smarty模板,这样模板才能拿到数据并渲染到输入框里。
// 安全获取提交的日期参数,避免未定义变量报错 $dateFrom = isset($_POST['DateFrom']) ? trim($_POST['DateFrom']) : ''; $dateTo = isset($_POST['DateTo']) ? trim($_POST['DateTo']) : ''; // 如果你的表单用的是GET方法,就把$_POST换成$_GET就行 // 把日期变量传给Smarty模板 $smarty->assign('savedDateFrom', $dateFrom); $smarty->assign('savedDateTo', $dateTo);
2. Smarty模板中填充输入框的value属性
接下来修改你的模板代码,给日期输入框加上value属性,用Smarty变量填充它。这样页面加载时,就会自动显示上次提交的日期。
<!-- 第一个日期输入框 --> <div class="col-sm-4 form-group"> <label for="DateFrom">Date from</label> <div class="input-group date" id="datetimepicker1"> <input class="text-box single-line form-control date" id="DateFrom" name="DateFrom" value="{$savedDateFrom}" /> <!-- 保留你原来的日历触发元素,比如: --> <span class="input-group-addon"> <span class="glyphicon glyphicon-calendar"></span> </span> </div> </div> <!-- 第二个日期输入框 --> <div class="col-sm-4 form-group"> <label for="DateTo">Date to</label> <div class="input-group date" id="datetimepicker2"> <input class="text-box single-line form-control date" id="DateTo" name="DateTo" value="{$savedDateTo}" /> <span class="input-group-addon"> <span class="glyphicon glyphicon-calendar"></span> </span> </div> </div>
3. 调整前端日历插件的初始化
如果你的日期选择用的是第三方插件(比如bootstrap-datetimepicker),还要确保插件初始化时能识别输入框里的已有值。以bootstrap-datetimepicker为例,你可以在初始化时设置defaultDate参数:
$(document).ready(function() { // 初始化第一个日历选择器 $('#datetimepicker1').datetimepicker({ format: 'YYYY-MM-DD', // 这里要和你输入框的日期格式完全一致 defaultDate: '{$savedDateFrom}' // 有值的话自动加载这个日期 }); // 初始化第二个日历选择器 $('#datetimepicker2').datetimepicker({ format: 'YYYY-MM-DD', defaultDate: '{$savedDateTo}' }); });
额外注意事项
- 日期格式统一:确保PHP端接收的日期格式、Smarty渲染的格式、前端插件的格式完全一致,否则插件可能无法识别日期。
- 安全性:如果需要对日期做进一步处理(比如存入数据库),记得用
DateTime类验证日期的合法性,避免恶意输入。 - GET/POST区分:如果你的表单用的是
method="get",就把PHP里的$_POST换成$_GET。
内容的提问来源于stack exchange,提问作者Grimmjow
相关产品推荐
相关产品推荐

