织梦自定义输入表单如何实现功能配置?

99ANYc3cd6
预计阅读时长 24 分钟
位置: 首页 织梦建站 正文

整体思路

  1. 创建模板文件:在织梦的模板目录下,创建一个HTML文件,用于展示表单。
  2. 编写表单代码:在模板文件中,使用HTML的<form>标签创建表单,并使用织梦的标签{dede:php}来生成一个安全的、唯一的表单校验码。
  3. 创建处理文件:创建一个PHP文件,用于接收、验证和保存从表单提交过来的数据。
  4. 修改后台配置:在织梦后台,创建一个自定义的频道模型,用于管理和查看通过表单提交上来的数据。

第一步:创建表单模板文件

假设我们要制作一个“在线报名”页面。

织梦 自定义输入表单
(图片来源网络,侵删)
  1. 登录你的FTP或服务器管理工具

  2. 进入模板目录:通常位于 /templets/你的模板名称/ 目录下。

  3. 创建新的模板文件:在该目录下新建一个HTML文件,enroll.html

  4. 编写 enroll.html 的代码

    织梦 自定义输入表单
    (图片来源网络,侵删)
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">在线报名 - {dede:global.cfg_webname/}</title>
    <style>
        .form-group { margin-bottom: 15px; }
        .form-group label { display: block; margin-bottom: 5px; font-weight: bold; }
        .form-group input, .form-group textarea { width: 300px; padding: 8px; border: 1px solid #ccc; border-radius: 4px; }
        .form-group textarea { height: 100px; resize: vertical; }
        .btn-submit { background-color: #007bff; color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; }
        .btn-submit:hover { background-color: #0056b3; }
    </style>
</head>
<body>
    <h1>在线报名</h1>
    <form action="/plus/enroll.php" method="post" enctype="multipart/form-data">
        <!-- 1. 重要:必须包含一个隐藏的校验码字段,用于防止重复提交 -->
        <input type="hidden" name="dede_fields" value="name,text;tel,text;course,text;content,textarea" />
        <input type="hidden" name="dede_fieldshash" value="{dede:php}echo md5('name'.CFG_COOKIE_TIME.'tel'.CFG_COOKIE_TIME.'course'.CFG_COOKIE_TIME.'content'.CFG_COOKIE_TIME);{/dede:php}" />
        <div class="form-group">
            <label for="name">姓名:</label>
            <input type="text" id="name" name="name" required />
        </div>
        <div class="form-group">
            <label for="tel">联系电话:</label>
            <input type="text" id="tel" name="tel" required />
        </div>
        <div class="form-group">
            <label for="course">意向课程:</label>
            <input type="text" id="course" name="course" required />
        </div>
        <div class="form-group">
            <label for="content">备注信息:</label>
            <textarea id="content" name="content"></textarea>
        </div>
        <div class="form-group">
            <button type="submit" class="btn-submit">提交报名</button>
        </div>
    </form>
</body>
</html>

代码解析:

  • <form action="/plus/enroll.php" ...>: action 指向了我们即将创建的处理文件。enctype="multipart/form-data" 是如果表单包含文件上传时必须的,即使没有,加上也无妨。
  • <input type="hidden" name="dede_fields" ...>: 这是核心! 它告诉织梦后台,我们要提交哪些字段,以及它们的数据类型。
    • 格式为:字段名,数据类型;字段名,数据类型;...
    • name: 字段名,必须和下面<input>name属性一致。
    • text: 数据类型,常见的有 text (单行文本), textarea (多行文本), datetime (日期时间), number (数字), soft (软件上传), media (媒体上传), img (图片上传) 等。
  • <input type="hidden" name="dede_fieldshash" ...>: 防止重复提交的关键! 它是一个MD5校验码,织梦会根据dede_fields的值和你后台的全局安全密钥(CFG_COOKIE_TIME)来生成一个哈希值进行比对,如果哈希值不匹配,则提交无效。
    • {dede:php}...{/dede:php} 是织梦的PHP执行标签,我们在这里用它来动态生成哈希值,确保安全。
  • <input name="name" ...>: 这些是标准的HTML表单元素,它们的name属性必须和dede_fields中定义的字段名完全一致。

第二步:创建表单处理文件

这个文件负责接收数据,并将其保存到数据库中。

  1. 进入织梦的 /plus/ 目录

  2. 创建一个新的PHP文件,命名为 enroll.php

  3. 编写 enroll.php 的代码

    织梦 自定义输入表单
    (图片来源网络,侵删)
<?php
/**
 * 织梦自定义表单处理文件
 * 文件名: enroll.php
 */
// 引入织梦主文件
require_once(dirname(__FILE__)."/../include/common.inc.php");
// 检查是否为POST提交
if (empty($dopost)) {
    showMsg('表单提交方式错误!', '-1');
    exit();
}
// 获取表单数据
$name = isset($name) ? trim($name) : '';
$tel = isset($tel) ? trim($tel) : '';
$course = isset($course) ? trim($course) : '';
$content = isset($content) ? trim($content) : '';
// 基本的数据验证(可选但推荐)
if (empty($name) || empty($tel) || empty($course)) {
    showMsg('姓名、电话和课程为必填项!', '-1');
    exit();
}
// 定义表单数据要插入的数据表(通常使用默认的 `dede_feedback` 表)
$table = 'dede_feedback';
// 构建插入数据库的数据数组
$arctitle = $name . ' - ' . $course; // 文档标题,可以组合一下
$msg = '姓名:' . $name . '<br>电话:' . $tel . '<br>课程:' . $course . '<br>备注:' . $content; // 文档内容
// 使用织梦自带的函数插入数据
// 参数说明:表名, 标题, 内容, 用户IP, 是否审核 (0=审核,1=直接通过)
$inquery = $dsql->ExecuteNoneQuery("INSERT INTO `$table`(`arctitle`,`typeid`,`msg`,`username`,`ip`,`ischeck`,`dtime`) VALUES ('$arctitle',0,'$msg','游客','$ip',0,".time().");");
if ($inquery) {
    // 插入成功,提示并跳转
    showMsg('报名成功!我们会尽快与您联系。', '/');
} else {
    // 插入失败
    showMsg('报名失败,请联系管理员!', '-1');
}
// 结束
exit();
?>

代码解析:

  • require_once(...): 引入织梦的核心文件,这是必须的,否则无法使用织梦的数据库和函数。
  • showMsg(...): 织梦自带的提示函数,会弹出一个提示框,然后跳转。
  • $dsql->ExecuteNoneQuery(...): 执行SQL插入语句的核心函数。
    • dede_feedback 是织梦默认的反馈表,字段结构比较通用,适合存放自定义表单数据,你可以用 DESCRIBE dede_feedback; 查看其结构。
    • arctitle: 文档标题,我们这里用“姓名 - 课程”来组合。
    • msg: 文档内容,我们将所有字段信息格式化后存入这里。
    • username: 提交人,我们这里写死为“游客”。
    • ip: 提交者的IP地址,织梦会自动获取。
    • ischeck: 是否审核。0表示需要后台审核,1表示直接通过,建议设置为0,以便在后台检查数据。
    • dtime: 提交时间,使用 time() 获取当前时间戳。

第三步:在后台创建模型并查看数据

现在表单已经可以提交了,但我们需要在织梦后台有一个地方来管理这些数据。

  1. 登录织梦后台 (/dede/)。

  2. 进入“核心” -> “频道模型” -> “自定义表单”

  3. 点击“增加一个自定义表单”

    • 表单名称:填写一个你想要的名称,在线报名”。
    • 数据表:选择 dede_feedback(因为我们处理文件就是往这个表里插数据的)。
    • 默认排序id
    • 其他选项可以保持默认,然后点击“保存”。
  4. 添加字段(可选,但推荐):

    • 保存后,你会进入该表单的管理界面,点击右上角的“添加新字段”。
    • 字段名name (必须和处理文件中的name一致)
    • 字段类型单行文本
    • 后台栏目显示名称姓名
    • 勾选“后台增加内容时允许为空”,然后保存。
    • 重复此步骤,为 tel, course, content 等字段一一添加,这样在后台查看数据时,字段名会显示为“姓名”、“电话”等,而不是 msg 里的原始文本,更易管理。
  5. 查看和管理数据

    • 在后台左侧菜单中,你刚才创建的“在线报名”会出现在“自定义表单”菜单下。
    • 点击进入,你就可以看到所有用户提交的报名信息了,如果提交时 ischeck 设置为 0,这里会显示为“待审核”状态,你可以点击“审核”通过它。

总结与注意事项

  • 安全性dede_fieldshash 是织梦自定义表单的防重复提交机制,必须要有。
  • 数据类型dede_fields 中的数据类型要和HTML表单元素以及后台添加的字段类型匹配。
  • 灵活性:处理文件 (enroll.php) 是完全自定义的,你可以在里面添加任何你想要的逻辑,比如发送邮件通知、写入其他数据表等。
  • 数据表选择:默认使用 dede_feedback 最简单,如果你的表单数据非常复杂,也可以在数据库中自己创建一张新表,然后在处理文件中直接操作新表。
  • 文件上传:如果需要文件上传功能,数据类型要选择 softimg,并且表单要包含 <input type="file"> 元素,处理逻辑会更复杂一些,需要处理文件上传和路径保存。

按照以上步骤,你就可以成功地在织梦CMS中创建一个功能完整的自定义输入表单了。

-- 展开阅读全文 --
头像
dede文章内容页代码如何修改与调用?
« 上一篇 03-05
织梦多城市版源码下载安全吗?
下一篇 » 03-05

相关文章

取消
微信二维码
支付宝二维码

目录[+]