织梦表单如何精准获取来源网址?

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

在用户访问表单页面时,将当前页面的URL作为一个隐藏字段插入到表单中,然后在表单提交时,获取这个隐藏字段的值。

下面我将为你提供两种最常用且有效的方法,并附上详细的步骤说明。


使用织梦自带的/plus/diy.php功能(推荐)

这是织梦最原生、最简单的方法,无需修改核心文件,安全且易于维护。

操作步骤:

  1. 创建表单并添加隐藏字段

    • 登录织梦后台,进入【核心】 -> 【内容模型管理】 -> 【普通文章】(或其他你对应的模型)。
    • 点击【增加字段】。
    • 填写字段信息:
      • 字段名称: sourceurl (小写,英文,不要用特殊字符)
      • 字段类型: 单行文本
      • 字段提示: 来源网址 (这个在前台表单中会显示为提示文字)
      • 前台提交表单替换html代码: 这里留空,因为我们不需要用户输入。
      • 后台表单替换html代码: 这里也留空。
      • 是否显示:
      • 是否必填:
      • 保存
  2. 修改表单模板文件

    • 找到你用于展示表单的模板文件(templets/plus/post_diyform.htm,或者你自定义的页面模板)。
    • <form> 标签内部,<input type="submit"> 按钮之前,添加以下代码:
    <input type="hidden" name="sourceurl" value="{dede:php}echo urlencode($_SERVER['HTTP_REFERER']);{/dede:php}" />

    代码解释:

    • <input type="hidden">: 创建一个隐藏的输入框,用户在页面上看不到它。
    • name="sourceurl": 这个 name 必须和你第一步在后台创建的字段名称完全一致
    • value="...": 这里是核心,我们使用织梦的 {dede:php} 标签来执行PHP代码。
    • $_SERVER['HTTP_REFERER']: 这是PHP中的一个超全局变量,它包含了链接到当前页面的前一页面的URL(即来源网址)。
    • urlencode(): 强烈建议使用这个函数对URL进行编码,这样可以避免来源URL中包含 &、 等特殊字符时,对表单提交造成干扰。
  3. 提交并测试

    • 保存模板文件,然后访问你的表单页面。
    • 检查页面源代码,你应该能看到 <input type="hidden" name="sourceurl" value="..." /> 这一行,value 属性里已经填上了你访问该表单页面的网址。
    • 填写并提交表单。
    • 进入织梦后台,在【核心】 -> 发布】 -> 【自定义表单管理】 中,你就能看到提交的数据,来源网址”那一栏已经有了值。

通过修改 /plus/diy.php 文件(更灵活)

如果你想在提交表单后,将来源网址记录到数据库的其他字段,或者需要进行更复杂的处理,可以直接修改 diy.php 文件。

操作步骤:

  1. 修改 /plus/diy.php 文件

    • 使用FTP或文件管理器,打开 /plus/diy.php 文件。
    • 找到处理表单数据的代码段,通常在 $diy->save($addarr, $diy->table); 这一行之前
    • 在这里插入获取来源网址的代码。
    // 在这行代码之前添加
    // $diy->save($addarr, $diy->table);
    // 获取来源网址
    if(isset($_POST['sourceurl']) && !empty($_POST['sourceurl'])) {
        // 如果来源网址是通过隐藏字段提交的
        $addarr['sourceurl'] = $_POST['sourceurl'];
    } else if(isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER'])) {
        // 如果来源网址是直接通过HTTP_REFERER获取的(作为备选方案)
        $addarr['sourceurl'] = $_SERVER['HTTP_REFERER'];
    } else {
        // 如果都没有来源,可以设置为空或'直接访问'
        $addarr['sourceurl'] = '直接访问';
    }
    // --- 保存数据 ---
    $diy->save($addarr, $diy->table);
  2. 创建对应的数据库字段

    • 和方法一的第一步一样,你需要在数据库的自定义表单表中增加一个字段来存储来源网址。
    • 登录织梦后台,进入【系统】 -> 【SQL命令行工具】
    • 执行以下SQL语句(请将 dede_diyform1 替换为你自己的自定义表单表名,可以通过查看自定义表单管理页面获取):
    ALTER TABLE `dede_diyform1` ADD `sourceurl` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '来源网址';
    • 注意
      • dede_diyform1 是默认的表名,如果你的表单名称是“留言反馈”,那么表名可能是 dede_diyform_liuyan 之类的,请务必确认你的表名。
      • VARCHAR(255) 是字段类型和长度,可以根据需要调整。
      • NOT NULL DEFAULT '' 表示该字段不能为空,默认值为空字符串。
  3. 前台表单处理

    • 使用方法一中的第2步,在前台表单模板中添加隐藏字段,这是最规范的做法。
    • <input type="hidden" name="sourceurl" value="{dede:php}echo urlencode($_SERVER['HTTP_REFERER']);{/dede:php}" />
    • 这样,当用户提交表单时,$_POST['sourceurl'] 就会有值,diy.php 中的代码就能正确捕获并保存它。

总结与对比

特性 方法一 (修改模板) 方法二 (修改php文件)
优点 - 无需修改核心文件,安全,升级无忧
- 操作简单,符合织梦的设计理念
- 更灵活,可以处理更复杂的逻辑
- 不完全依赖前台隐藏字段,有备选方案
缺点 - 功能相对固定 - 需要修改核心文件,升级时可能被覆盖
- 操作稍复杂,需要懂一点SQL
适用场景 - 大多数普通需求,快速实现 - 需要对数据进行额外处理或记录
- 对系统稳定性要求极高,不希望修改核心文件时

推荐首选方法一,因为它简单、安全且足够应对绝大多数情况,只有在方法一无法满足你的特殊需求时,才考虑使用方法二。

希望这个详细的教程能帮到你!如果在操作中遇到任何问题,欢迎随时提问。

-- 展开阅读全文 --
头像
getchar c语言
« 上一篇 03-01
dede如何获取三级栏目?
下一篇 » 03-01

相关文章

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

目录[+]