核心思路
标准的HTML多选框 <input type="checkbox"> 提交到数据库后,数据会是一个用逗号隔开的字符串,"选项1,选项2,选项3",我们需要:

(图片来源网络,侵删)
- 后台:添加一个新的表单字段,用于接收这些逗号分隔的值。
- 数据库:为这个新字段创建一个对应的
TEXT或VARCHAR类型的列,用于存储字符串。 - 前台:在留言表单中添加多选框组,并确保其
name属性与后台新增的字段名一致。
详细步骤
假设我们要为留言表单增加一个 “感兴趣的项目” 多选框,选项包括:网站建设, APP开发, UI设计。
第一步:修改后台数据表
这是最关键的一步,你需要直接操作数据库。
-
登录你的数据库管理工具(如 phpMyAdmin)。
-
选择你的织梦数据库。
(图片来源网络,侵删) -
找到留言表,通常表名是
dede_guestbook(前缀dede_可能不同,请根据你的实际情况修改)。 -
为该表添加一个新的字段:
- 在
dede_guestbook表上,点击“结构”或“SQL”选项卡。 - 执行以下
SQL语句来添加一个名为interest_projects的字段,类型为TEXT,这样可以存储较长的文本。
ALTER TABLE `dede_guestbook` ADD `interest_projects` TEXT NOT NULL DEFAULT '';
- SQL语句解释:
ALTER TABLEdede_guestbook`修改dede_guestbook` 这张表。ADDinterest_projectsTEXT: 添加一个名为interest_projects的新字段,数据类型为TEXT。NOT NULL DEFAULT '': 设置该字段值不能为空,默认值为空字符串。
- 在
-
刷新表结构,你应该能看到新添加的
interest_projects字段了。
第二步:修改后台模板文件
现在我们需要让后台的“添加留言”表单能输入这个新字段。

(图片来源网络,侵删)
-
找到后台模板文件:
- 文件路径通常为:
/dede/templets/guestbook_add.htm - 备份这个文件,以防修改出错。
- 文件路径通常为:
-
编辑
guestbook_add.htm:- 用文本编辑器(如 VS Code, Sublime Text, Dreamweaver)打开它。
- 找到合适的位置(比如其他表单字段的后面),添加以下HTML代码。
<!-- 在合适位置添加以下代码 --> <tr> <td height="24" colspan="2" bgcolor="#f5f5f5"> <strong>感兴趣的项目:</strong> </td> </tr> <tr> <td height="24" colspan="2"> <label><input type='checkbox' name='interest_projects[]' value='网站建设' checked /> 网站建设</label> <label><input type='checkbox' name='interest_projects[]' value='APP开发' /> APP开发</label> <label><input type='checkbox' name='interest_projects[]' value='UI设计' /> UI设计</label> </td> </tr>- 代码解释:
name='interest_projects[]':非常重要! 方括号[]告诉PHP,这是一个数组,这样所有被选中的选项的值都会被收集到$_POST['interest_projects']这个数组中。value='...':每个选项的值,这个值将会被存入数据库。checked:表示默认选中“网站建设”这个选项。
-
保存修改。
第三步:修改处理逻辑(PHP代码)
后台模板添加了,但提交数据时,PHP需要把数组转换成逗号分隔的字符串才能存入数据库。
-
找到后台处理文件:
- 文件路径通常为:
/dede/guestbook_add.php
- 文件路径通常为:
-
编辑
guestbook_add.php:- 在文件中找到处理表单提交的代码段,通常在文件开头,会有类似
if($dopost == 'save')的判断。 - 在
$msg变量被赋值之前(即if($msg == '')这个判断里面),添加以下PHP代码。
// 在 guestbook_add.php 中添加以下代码 // 处理多选框 if (isset($_POST['interest_projects']) && is_array($_POST['interest_projects'])) { $interest_projects = implode(',', $_POST['interest_projects']); // 将数组转换为逗号分隔的字符串 } else { $interest_projects = ''; // 如果没有选择任何项,则设为空 } // 将处理后的值添加到要入库的数据中 // 假设你使用 $arct->Fields 来存储数据,请找到类似下面的代码 // $arct->Fields['msg'] = $msg; // 在这行代码后面,添加: $arct->Fields['interest_projects'] = $interest_projects;- 代码解释:
isset($_POST['interest_projects']):检查是否存在这个POST变量。is_array($_POST['interest_projects']):确认它是一个数组(因为我们的name是interest_projects[])。implode(',', ...):这是PHP的核心函数,它将数组元素用指定的分隔符(这里是逗号 )连接成一个字符串,数组['网站建设', 'UI设计']会被转换成"网站建设,UI设计"。$arct->Fields['interest_projects'] = $interest_projects;:将转换好的字符串赋值给织梦的数据对象,以便存入数据库。
- 在文件中找到处理表单提交的代码段,通常在文件开头,会有类似
-
保存修改。
第四步:修改前台模板文件(可选)
为了让访客在前台留言时也能使用这个多选框,你还需要修改前台的留言模板。
-
找到前台模板文件:
- 文件路径通常为:
/templets/plus/guestbook.htm
- 文件路径通常为:
-
编辑
guestbook.htm:- 在合适的位置,添加与后台模板类似的HTML代码。
<!-- 在前台留言表单的合适位置添加 --> <div class="form-group"> <label>感兴趣的项目:</label> <div> <label><input type='checkbox' name='interest_projects[]' value='网站建设' checked /> 网站建设</label> <label><input type='checkbox' name='interest_projects[]' value='APP开发' /> APP开发</label> <label><input type='checkbox' name='interest_projects[]' value='UI设计' /> UI设计</label> </div> </div> -
保存修改。
第五步:修改后台列表和显示模板
为了让后台能显示这个新字段,你还需要修改后台列表和查看留言的模板。
-
修改后台列表模板:
- 文件路径:
/dede/templets/guestbook_list.htm - 找到表头
<tr>,在合适的位置添加一列:<td width="150">感兴趣的项目</td>
- 找到循环数据的
<tr>,在对应位置添加:<td>{dede:field.interest_projects/}</td>
- 文件路径:
-
修改后台查看留言模板:
- 文件路径:
/dede/templets/guestbook_note.htm - 在合适的位置添加,用于显示该字段的值:
<tr> <td>感兴趣的项目:</td> <td>{dede:field.interest_projects/}</td> </tr>
- 文件路径:
完成以上五个步骤后,你的织梦留言系统就成功支持了多选框功能了。
流程回顾:
- 数据库:
ALTER TABLE添加TEXT字段。 - 后台模板 (
guestbook_add.htm):添加<input type="checkbox" name="xxx[]">。 - 后台处理 (
guestbook_add.php):用implode()将数组转为字符串并存入。 - 前台模板 (
guestbook.htm):添加多选框,让访客能填写。 - 后台显示 (
guestbook_list.htm,guestbook_note.htm):添加显示新字段的代码。
重要提示:
- 文件路径:如果你的织梦安装目录或自定义了模板,文件路径可能不同,请务必确认。
- 备份数据:在操作数据库之前,请务必备份数据库,以防万一。
- 测试:完成修改后,务必在前台和后台都进行测试,确保功能正常。
