dede自定义表单如何实现文件上传功能?

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 DEDE建站 正文
  1. 修改处理程序:让 PHP 脚本能接收并保存上传的文件。
  2. 修改表单模板:在前端页面上添加文件上传的输入框。
  3. 修改后台管理:在后台能查看和管理已上传的文件。

第一步:修改处理程序 (核心步骤)

这是最关键的一步,我们需要修改 DedeCMS 处理自定义表单提交的 post.php 文件,使其具备文件处理能力。

dede自定义表单上传文件
(图片来源网络,侵删)
  1. 找到文件 登录你的网站 FTP 或主机管理面板,找到并下载以下文件: /plus/diy.php

  2. 修改代码 用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开 diy.php 文件。

  3. 查找关键代码段 在文件中找到如下代码段(通常在文件中下部):

    //--------------提交处理部分------------------
    //用于处理前台提交的数据
    if($do == 2)
    {
        $diyform->save($addarr, $diy->name);
        showmsg('成功提交,请等待管理员审核!', $dreferer);
    }
  4. 添加文件上传处理逻辑 将上述代码块 替换 为下面的代码,我已经添加了详细的注释来解释每一部分的作用。

    dede自定义表单上传文件
    (图片来源网络,侵删)
    //--------------提交处理部分------------------
    //用于处理前台提交的数据
    if($do == 2)
    {
        // 1. 定义上传目录
        // 建议在 /uploads 目录下创建一个专门的文件夹,如 /uploads/diy_form_files/
        // 确保这个目录存在并且有 755 或 777 的写入权限
        $upload_dir = DedeCMS的根目录 . '/uploads/diy_form_files/';
        if (!is_dir($upload_dir)) {
            mkdir($upload_dir, 0777, true);
        }
        // 2. 初始化一个数组来存储所有提交的数据(包括文件信息)
        $addarr = array();
        // 3. 遍历所有表单字段
        foreach($_POST as $k => $v)
        {
            // 将非文件字段的数据添加到 $addarr 数组中
            if($k != 'token' && $k != 'dosubmit')
            {
                $addarr[$k] = stripslashes($v);
            }
        }
        // 4. 处理文件上传
        // 假设你的文件上传表单字段名为 'myfile',请根据实际情况修改
        $file_field_name = 'myfile'; 
        // 检查是否有文件被上传
        if(isset($_FILES[$file_field_name]) && $_FILES[$file_field_name]['error'] == 0)
        {
            $file_info = $_FILES[$file_field_name];
            // 生成安全的文件名(时间戳 + 随机数 + 原始扩展名)
            $file_ext = pathinfo($file_info['name'], PATHINFO_EXTENSION);
            $file_name = time() . mt_rand(1000, 9999) . '.' . $file_ext;
            $file_path = $upload_dir . $file_name;
            // 将文件从临时目录移动到我们指定的上传目录
            if(move_uploaded_file($file_info['tmp_name'], $file_path))
            {
                // 如果移动成功,将文件的相对路径存入 $addarr 数组
                // 存储相对路径比绝对路径更好,方便网站迁移
                $addarr[$file_field_name] = '/uploads/diy_form_files/' . $file_name;
            }
            else
            {
                // 如果文件移动失败,可以在这里记录错误或提示用户
                // showmsg('文件上传失败,请检查目录权限或文件大小!', $dreferer);
                // 为了流程继续,这里我们也可以存一个错误标识,但通常建议中断
                showmsg('文件上传失败,请检查服务器配置!', $dreferer);
                exit();
            }
        }
        // 5. 调用 DedeCMS 的方法保存数据
        // $addarr 数组里既包含了普通文本字段,也包含了文件的路径
        $diyform->save($addarr, $diy->name);
        // 6. 显示成功消息
        showmsg('成功提交,请等待管理员审核!', $dreferer);
    }
  5. 保存文件 将修改好的 diy.php 文件上传回服务器,覆盖原文件。


第二步:修改表单模板

我们需要在前端页面添加一个文件上传的输入框。

  1. 创建或编辑表单模板 登录 DedeCMS 后台,进入“自定义表单” -> “管理自定义表单”,选择你要修改的表单,点击“修改模板”。

  2. 在模板中添加文件上传框 在模板代码的适当位置(例如其他输入框的旁边),添加以下 HTML 代码:

    dede自定义表单上传文件
    (图片来源网络,侵删)
    <li>
        <label for="myfile">上传文件:</label>
        <input type="file" name="myfile" id="myfile" class="intxt" />
        <span class="gray">(请上传 JPG、PDF、DOC 等格式的文件)</span>
    </li>

    代码解释

    • <input type="file">:这是标准的 HTML 文件上传输入框。
    • name="myfile"这个 name 属性值必须与你在第一步中修改 diy.php 时定义的 $file_field_name 变量值完全一致,这里是 myfile
    • id="myfile":为了方便 CSS 样式和 JavaScript 操作,建议设置一个 id,通常与 name 相同。
    • class="intxt":为了保持与 DedeCMS 默认样式一致,可以加上这个 class。
  3. 保存模板 点击“保存”按钮,更新表单模板。


第三步:修改后台管理(可选但推荐)

默认情况下,后台的自定义表单列表只显示文本内容,文件路径会以普通文本显示,点击无法下载,我们需要修改模板,让它变成可点击下载的链接。

  1. 找到后台模板文件 登录 FTP,找到文件: /dede/templets/diy_list.htm

  2. 修改列表模板 用代码编辑器打开 diy_list.htm,找到显示数据列表的循环部分,通常是一个 {dede:datalist}

  3. 修改文件字段的显示方式 在循环内部,找到显示文件字段的单元格(<td field='myfile'>),将其修改为:

    <td field='myfile'>
        {dede:field name='myfile' runphp='yes'}
            $url = @me;
            if($url != '')
            {
                // 判断是否是完整的 URL,如果不是,则拼接网站根目录
                if (strpos($url, 'http') !== 0) {
                    $url = 'https://你的网站域名' . $url;
                }
                @me = "<a href='{$url}' target='_blank'>下载文件</a>";
            }
            else
            {
                @me = "未上传";
            }
        {/dede:field}
    </td>

    代码解释

    • {dede:field name='myfile' runphp='yes'}:这是调用 myfile 字段的值,并开启 PHP 解析。
    • $url = @me;:获取当前字段的值(即文件路径)。
    • if($url != ''):判断该字段是否有值。
    • strpos($url, 'http') !== 0:判断路径是否已经是完整的 URL,如果不是,则手动拼接你的网站域名。请务必将 https://你的网站域名 替换成你自己的域名
    • @me = "<a href='{$url}' target='_blank'>下载文件</a>";:如果存在文件,则生成一个可点击的下载链接。
    • @me = "未上传";:如果不存在文件,则显示“未上传”。
  4. 保存文件 将修改好的 diy_list.htm 文件上传回服务器。


总结与检查

完成以上三步后,你的自定义表单文件上传功能就基本实现了,请按以下步骤进行检查:

  1. 检查目录权限:确保你创建的上传目录 /uploads/diy_form_files/ 具有写入权限(通常是 755 或 777)。
  2. 清空缓存:在 DedeCMS 后台“系统” -> “一键更新站点”或“更新缓存”,确保前台和后台的模板修改生效。
  3. 前台测试:打开你的表单页面,尝试填写信息并选择一个文件进行提交。
  4. 后台验证:登录后台,进入该自定义表单的管理界面,查看提交的记录,确认文件路径是否正确,并点击“下载文件”链接是否能成功下载。

通过以上步骤,你应该就能成功地在 DedeCMS 自定义表单中实现文件上传功能了。

-- 展开阅读全文 --
头像
织梦php标签如何正确打开与使用?
« 上一篇 02-08
strcpy函数如何安全实现?
下一篇 » 02-08

相关文章

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