如何点击Submit按钮后保留Smarty表单字段的输入值
Smarty表单提交错误后保留字段值的实现方案
核心思路
表单提交后,后端验证失败时,将用户提交的所有字段值传递给Smarty模板,在模板中把这些值回显到对应表单控件里。
步骤1:后端传递提交数据到Smarty
在处理表单提交的PHP脚本中,当验证不通过时,把$_POST(POST提交场景)的数据赋值给Smarty变量:
// 假设已初始化Smarty实例 if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 表单验证逻辑,若验证失败 $smarty->assign('form_data', $_POST); // 渲染表单页面 $smarty->display('form.tpl'); exit; }
步骤2:模板中回显字段值
根据不同表单控件类型,用Smarty语法实现值的回显:
文本/文本域输入框
在value属性中使用default修饰符,确保首次加载时显示空或默认值,同时用escape转义特殊字符避免XSS:
<!-- 文本输入框 --> <input type="text" name="username" value="{$form_data.username|escape:'html'|default:''}" /> <!-- 文本域 --> <textarea name="intro">{$form_data.intro|escape:'html'|default:''}</textarea>
注:密码框建议不回显值,避免安全风险,直接设置value=""即可
下拉选择框
通过条件判断设置selected属性:
<select name="gender"> <option value="male" {if $form_data.gender == 'male'}selected{/if}>男</option> <option value="female" {if $form_data.gender == 'female'}selected{/if}>女</option> <option value="other" {if $form_data.gender == 'other'}selected{/if}>其他</option> </select>
复选框(单值/多值)
单值复选框直接判断值匹配,多值复选框用in_array判断:
<!-- 单值复选框 --> <input type="checkbox" name="agree" value="1" {if $form_data.agree == '1'}checked{/if} /> 同意协议 <!-- 多值复选框 --> <input type="checkbox" name="hobbies[]" value="reading" {if in_array('reading', $form_data.hobbies)}checked{/if} /> 阅读 <input type="checkbox" name="hobbies[]" value="sports" {if in_array('sports', $form_data.hobbies)}checked{/if} /> 运动
单选框
通过条件判断设置checked属性:
<input type="radio" name="contact" value="email" {if $form_data.contact == 'email'}checked{/if} /> 邮箱 <input type="radio" name="contact" value="phone" {if $form_data.contact == 'phone'}checked{/if} /> 电话
注意事项
- 若使用GET提交,将
$_POST替换为$_GET即可,但表单提交优先推荐POST方法。 - 确保后端验证失败时,不会直接跳转页面,而是重新渲染表单模板并传递
form_data变量。
内容的提问来源于stack exchange,提问作者Kumari
相关产品推荐
相关产品推荐

