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

如何点击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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 02:55:13