
本文详解如何通过 wordpress 数据库查询 fluent forms 插件中当前登录用户的历史表单提交内容,重点讲解正确数据表选择、json 响应解析、用户身份匹配及安全实践。
本文详解如何通过 wordpress 数据库查询 fluent forms 插件中当前登录用户的历史表单提交内容,重点讲解正确数据表选择、json 响应解析、用户身份匹配及安全实践。
在使用 Fluent Forms 构建用户注册或资料收集流程(如姓名、地址、联系方式等)后,常需在用户个人资料页动态展示其已提交的数据。但直接查询 wp_fluentform_entry_details 表(如原始代码所示)存在明显偏差:该表仅存储字段级明细(如单个输入框的值),且不关联用户 ID 或提交时间上下文,难以精准定位“当前用户”的完整表单记录。
✅ 正确做法是查询主提交表 wp_fluentform_submissions,其结构包含关键字段:
- id:唯一提交 ID
- form_id:所属表单 ID(需替换为你的实际表单 ID)
- user_id:提交时关联的 WordPress 用户 ID(核心!用于筛选当前用户)
- response:JSON 格式字符串,保存整个表单的字段名与值映射
以下为生产就绪的 PHP 示例(建议置于主题 functions.php 或自定义插件中,切勿直接放入模板文件裸写 SQL):
<?php
// 1. 确保用户已登录
if (!is_user_logged_in()) {
echo '<p class="notice">请先登录以查看您的资料。</p>';
return;
}
global $wpdb, $current_user;
$user_id = $current_user->ID;
// 2. 安全查询:使用 prepare() 防止 SQL 注入,指定 form_id(例如:4)
$form_id = 4; // ? 替换为你的注册表单 ID
$table_name = $wpdb->prefix . 'fluentform_submissions';
$submission = $wpdb->get_row(
$wpdb->prepare(
"SELECT * FROM {$table_name} WHERE form_id = %d AND user_id = %d ORDER BY created_at DESC LIMIT 1",
$form_id,
$user_id
)
);
if (!$submission) {
echo '<p class="notice">暂无提交记录,请先填写注册表单。</p>';
return;
}
// 3. 解析 JSON 响应(注意:response 字段为 JSON 字符串)
$response_data = json_decode($submission->response, true);
if (json_last_error() !== JSON_ERROR_NONE || !is_array($response_data)) {
echo '<p class="error">表单数据解析失败,请检查提交内容。</p>';
return;
}
// 4. 安全输出字段值(示例字段名需与表单设置一致)
// ✅ 推荐:使用 isset() 避免未定义索引警告
?>
<div class="user-profile-form-data">
<h3>您的注册信息</h3>
<ul>
<li><strong>姓名:</strong><?php echo esc_html(isset($response_data['full_name']) ? $response_data['full_name'] : '未填写'); ?></li>
<li><strong>邮箱:</strong><?php echo esc_html(isset($response_data['email']) ? $response_data['email'] : '未填写'); ?></li>
<li><strong>联系电话:</strong><?php echo esc_html(isset($response_data['phone']) ? $response_data['phone'] : '未填写'); ?></li>
<li><strong>地址:</strong><?php echo esc_html(isset($response_data['address']) ? $response_data['address'] : '未填写'); ?></li>
</ul>
</div>? 关键注意事项:
- 字段名映射:$response_data 中的键名(如 'full_name')必须与 Fluent Forms 后台表单字段的 "Field Name"(字段名称) 设置完全一致(区分大小写)。可在表单编辑页 → 字段设置 → "Advanced Options" → "Field Name" 查看或修改。
-
安全性强制要求:
- 使用 $wpdb->prepare() 绑定参数,杜绝 SQL 注入;
- 对输出内容调用 esc_html(),防止 XSS;
- 检查 json_decode() 结果有效性,避免空响应导致崩溃。
- 性能优化:添加 ORDER BY created_at DESC LIMIT 1 获取最新一次提交,避免遍历全部记录。
- 扩展性建议:若需支持多表单或历史版本,可将 form_id 参数化,或增加 submission_id URL 查询参数实现精确回溯。
通过以上方法,你不仅能准确提取当前用户专属的 Fluent Forms 提交数据,还能确保代码健壮、安全且易于维护——真正实现个性化资料展示的核心需求。










